• ベストアンサー

SH2のタイマ出力

Sh7050のダウンカウンタで16bit以上のタイマ出力を実現する方法はあるのでしょうか? ルネサステクノロジのSH2/SH7050のチャネル10(ダウンカウンタ機能)を使ってタイマ出力しようとしています。チャネル10は16bitタイマなのですが、出力時間はそれ以上(16bitの100倍ほど、24bit)必要です。他のタイマを並列で動作させてオーバーフローを数えることで延長すれば出来るように思うのですが、いい方法を考え出すことが出来ません。どなたか手が空いていれば、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.11

>SH7050では、ある割り込み処理中に、それより優先順位が高い割り込みが発生すれば自動的に多重割り込みとして処理してくれたと思うのですが、私の覚え違いだったでしょうか?(割り込み検知後、マスクビットや優先順位を判定して処理に分岐するまでの時間のことでしょうか? だとすれば、確かにそれは想定外でした)。 多重割り込みは可能です。ただし、「6.5割り込みの応答時間」に書いてありますが、割り込み動作に割り込みが重なったときに割り込みが遅延してしまう可能性があります。 割り込みのマスクビットや優先順位を判定を含む一連のシーケンス(X=4+m1+m2+m3+m4)がマイコンの制御シーケンス上中断できないので、その間割り込みが一切受け付けられないからです。割り込み開始が数ステート差のタイミングで重なるケースはレアでしょうが、レアなゆえに問題が無いことを実証することが困難です。 >パルス幅が可変のとき、何か競合が発生するのでしょうか?現在、パルス幅が16bit以上であるとき、 > パルス幅 = (割り込み周期) × (割り込み回数) + (ダウンカウンタ) - (補正値) >という具合に分解しているのですが、ご指摘の危険なタイミングとはどういう状況で発生するのでしょうか? 16bitをぎりぎり超えたとき、うまく計算できますか?心配したのはそのあたりです。 やはり色々と問題がありますので、組み込み機器として考えた場合はこの様にソフト的にパルスを作るのは私なら徹底的に避けます。精度誤差だけで駄目だしされるようなシビアな状況では危険な綱渡りですよ。 回路(CPLD)で作れば、目的の精度のパルスが簡単に出せることを考えるとなんでもソフトでやるのは手間が多く信頼性が低くなります。 最終的にどちらが得なのかの判断は上司がすることですが、ハードの知識が不足しているからと検討もせずにソフトだけでやることは無謀です。

kagiyo
質問者

お礼

回答ありがとうございます。 16bitまで正確に出力できるなら、それ以上は精度が少々落ちても問題にはならないらしいです。 16bitぎりぎりについては、大丈夫なはずですが検証してみます。 >最終的にどちらが得なのかの判断は上司がすることですが、ハード >の知識が不足しているからと検討もせずにソフトだけでやることは無 >謀です。 耳が痛いです。次回までの自分への課題としておきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (10)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.10

R32Cさんの意見も含め考えてみましたが、どの程度の精度のパルス幅まで保障するかでやれる事も変わりますね。 ここまで精度を保障する割り込み処理を組んだことがないですが、他の割り込みがあると、いくら優先度が高くても割り込み例外処理中は(低いレベルの割り込みでも)割り込み禁止になるので割り込みが遅延する可能性があるはずです。たぶん、十数ステートでしょうが。 他の割り込みがまったくなくてカリカリにチューン(割り込み内はアセンブラで、最適化レベルの影響を受けないようにとか)すれば、タイマの1クロック単位の精度が出せそうな気がします。 ただし、パルス幅が可変だと割り込み周期との関係で補正しきれない動作タイミングが出てくるのでパルス幅可変は危険です。もし対応するならパルス幅に合わせて割り込み周期も可変してチャネル10のカウンタ補正値も可変すると言うそうとう面倒な処理が必要そうです。

kagiyo
質問者

お礼

回答ありがとうございます。 SH7050では、ある割り込み処理中に、それより優先順位が高い割り込みが発生すれば自動的に多重割り込みとして処理してくれたと思うのですが、私の覚え違いだったでしょうか?(割り込み検知後、マスクビットや優先順位を判定して処理に分岐するまでの時間のことでしょうか? だとすれば、確かにそれは想定外でした)。 パルス幅が可変のとき、何か競合が発生するのでしょうか?現在、パルス幅が16bit以上であるとき、  パルス幅 = (割り込み周期) × (割り込み回数) + (ダウンカウンタ) - (補正値) という具合に分解しているのですが、ご指摘の危険なタイミングとはどういう状況で発生するのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • R32C
  • ベストアンサー率39% (115/290)
回答No.9

自己レスですが、 >パルスを出すことが目的なんでしょうか? ソフトでパルスオンオフするなら、設定後オン割り込み後オフ することで可能と思います。 Ano5補足にてソフトでオンオフするようなのでこれはOKのようですので Ano5の補足よりオーバーヘッドは少ないと思いますが それから、Ano5補足について、ソフトでカウント書き換え時間が一定化 することでオーバーヘッド一定にすることは最優先の割り込みなら可能 なことかと思います。現状の方法で問題ないと思っています。 ただそれなら ANo1の方法でも最優先割り込みで実施すれば同様に実現できるようにも 思いますが...

kagiyo
質問者

お礼

ありがとうございます。 社内で「これでいきます」と宣言した後なのですが、考えるほどに提案いただいた「オフセット+ ダウンカウンタ」の方がシンプルで確実に思えてきます。 少なくとも現状の方法によるパルス出力中に、優先順位の低い割り込みを意図的に何度も発生させてパルス出力幅が乱れないか確認が必要ですね。乱れなくとも「オフセット+ ダウンカウンタ」について実験しておくべきなようですね。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.8

>ベストではないですが、現状これで進めます。もっとシンプルなアイデアがありましたら、引き続きよろしくお願いいたします。 >(実はSH7050は端子入出力とタイマ機能に関しては、今回の質問とは別の機能で埋め尽くされつつあり、あまり自由には使えない状況です)。 確かにベストじゃないですね。 他から割り込まれないのならば、この方法でパルス幅は精度を高く制御できると思います。しかし、逆に割り込まれるとフォロー不能です。他の割り込みがないマイコンの使用用途ってのが思いつかないですが、大丈夫なんでしょうか? 後割り込み禁止のタイミングがあっても破綻しますね。 回路が変えられないのなら、この方法ぐらいしかありませんが出来れば回路設計かCPU選定のをやりなおしを勧めしたいです。

kagiyo
質問者

お礼

回答ありがとうございます。 ダウンカウンタによる割り込みを最優先にしておけば問題ないだろうと考えていたのですが、優先順位が低い割り込みでも致命的でしょうか? 今回の質問に関しては、SH7050を使用しているある用途の後継についての検討ですので、CPUを変えるのは現実的ではないですね。

全文を見る
すると、全ての回答が全文表示されます。
  • R32C
  • ベストアンサー率39% (115/290)
回答No.7

10.3.6 の引用です。 タイマインタラプトイネーブルレジスタ(TIERF)への設定により、対応するダウンカウンタ (DCNT10A~DCNT10H)が0 になり1 クロック経過した時点で、CPU へ割り込み要求ができます。 --- つまりオフセット+ダウンカウンタ経過後割り込みが発生できる パルスを出すことが目的なんでしょうか? 上記引用にあるとおり、指定時間での割り込みを発生できると思いますが いかがでしょうか?

kagiyo
質問者

お礼

回答ありがとうございます。 提案いただいた方法では、少なくともパルス出力開始は、ダウンカウンタによるタイマ出力とは別の端子を制御することになります。パルス出力終了もその端子をソフトウェアから制御する(ダウンカウンタによるタイマ出力を使用しない)という手もありそうですが、パルス出力幅が16bit以内であればダウンカウンタ単体の機能を使用して正確に出力したいので、  (1)16bit以内の時:ダウンカウンタによる端子出力  (2)16bit超の時 :ソフトウェアで制御する端子出力 を外部回路で合成する必要が出てきます。 しかし、SH7050のタイマ機能の使用法としては、確かにこちらのほうが格段にシンプルですね。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

CPLDやFPGAなどでパルス発生回路を丸々作ってしまうって方法は使えない状況でしょうか?Sh7050側は、CPLDやFPGAのパラメータの設定をするだけになりますけど。 kagiyoさんの求められる精度のパルスをSh7050だけで作り出すのは難しいと思います。周期と幅の両方を精度を高く制御したいんですよね?

kagiyo
質問者

お礼

回答ありがとうございます。 CPLDやFPGAについては、その概念をうっすらと知っている程度で、扱ったことが全くないので、私にはそこまで手を回せません。 昨日私が書き込んだ「ダウンカウンタの値を書き換えることによるパルス幅制御」についてルネサステクノロジに問い合わせたところ「正確なパルス出力はできない」との返答でした。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

#1のzwiです。 訂正します。 すいません、タイマ0をパルス出力に使えないみたいなので精度は無理ですね。 R32Cさんの提案されたオフセット付ワンショットパルス機能だけで周期を精度良くコントロールできなければ、外部回路に頼るしかないでしょう。 どちらにしろ、パルスの周期だけでなくパルス幅とかも精度が必要だと外部回路しか選択肢はたぶん無いです。

kagiyo
質問者

お礼

たびたびアイデアを頂き、ありがとうございます。 チャネル10は外部クロックを選択できないので、外部回路との 接続も工夫が必要になりそうです。

kagiyo
質問者

補足

いろいろと考えていただき、ありがとうございます。 実は、以下のような方法で簡略的に実現しました。 (1)パルス出力幅を、以下二つに分担させる。   ・ダウンカウンタ   ・タイマ割り込み    (2)ダウンカウンタの動作とタイマ割り込み用タイマの動作を開始   →パルス出力開始 (3)タイマ割り込み処理内でダウンカウンタの値を定期的に 一定値に保つ処理を行うことで、   ダウンカウンタのアンダーフローを発生させないようにする。 (4)タイマ割り込みが規定回数に達したら、ダウンカウンタの値を一定値に保つことを停止する (5)ダウンカウンタのアンダーフローが発生し、パルス出力終了 この方法ではソフトウェアの処理時間に影響されてしまいますが、逆に言うと他の割り込み処理が発生したりしなければ、パルス出力幅は一定になります。(ズレはありますが、そのズレが常に一定で変動しないなら、差し引くことである程度は相殺することができます)。 ベストではないですが、現状これで進めます。もっとシンプルなアイデアがありましたら、引き続きよろしくお願いいたします。 (実はSH7050は端子入出力とタイマ機能に関しては、今回の質問とは別の機能で埋め尽くされつつあり、あまり自由には使えない状況です)。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>急いでいたため質問には書かなかったのですが、パルス出力の確度(時間精度)の点から、プリスケーラで分周したり長周期の外部クロックを使うことが出来ません。 外部の回路が使えないとなると苦しいですね。CPLDが使えれば楽勝ですが。 アイデアとしては、別のタイマーチャンネルでタイマパルス出して、それを再度自分の外部入力クロックとして入れてチャネル10でダウンカウントしてパルスを出すぐらいですかね。当然回路の変更を伴います。

全文を見る
すると、全ての回答が全文表示されます。
  • R32C
  • ベストアンサー率39% (115/290)
回答No.3

精度が必要ということですので やったことありませんが オフセット付ワンショットパルス機能(10.3.12 ハードウエアマニュアル) というのを使ってみてはどうでしょうか? ダウンカウンタは、プリスケーラで荒く設定し、不足分をオフセットで 補えるように思います。フリーカウンタ(プリスケーラなし) がマッチした時点でダウンカウンタをハードウエアがセットしてスタートします。 詳しくはマニュアルを参照ください。

kagiyo
質問者

お礼

回答ありがとうございます。 もしオフセット付きワンショットパルス機能が、  (1)オフセット付きワンショットパルス機能発動  (2)パルス出力開始(High)  (3)オフセット時間経過  (4)ダウンカウンタのアンダーフロー  (5)パルス出力終了(Low) という順で機能すれば、正確な時間制御を保ちつつ長時間のタイマ出力が可能なのですが、実際にはこの機能は  (1)オフセット付きワンショットパルス機能発動  (2)オフセット時間経過  (3)パルス出力開始(High)  (4)ダウンカウンタのアンダーフロー  (5)パルス出力終了(Low) の順で起動します。つまりパルス出力幅についてはワンショットパルス機能単体と同じなのです。難しいものですね。

全文を見る
すると、全ての回答が全文表示されます。
  • R32C
  • ベストアンサー率39% (115/290)
回答No.2

2段のプリスケーラを設定すればいいんじゃないですか? PSCR1 φ/32 と TCR10 φ/32 で分周できるはずですが

kagiyo
質問者

お礼

回答、ありがとうございました。 急いでいたため質問には書かなかったのですが、パルス出力の確度(時間精度)の点から、プリスケーラで分周したり長周期の外部クロックを使うことが出来ません。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

16bitタイマで割り込みを発生させて、割り込みごとに変数で8bitの上位桁をカウントすることで事実上24bitにすることは可能ですが、それではだめですか? 処理時間さえ問題なければ、あえて別のタイマでカウントする必要は無いと思いますけど。

kagiyo
質問者

お礼

回答ありがとうございました。 今使おうとしているダウンカウンタでは割り込み要因はアンダーフローのみとなっています。そしてアンダーフローの時点でタイマ出力する仕様なので、そもそもアンダーフローを起こさない必要があるのです。 私の質問に説明不足な点があり、失礼しました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【H8-3052F】タイマ割り込み

    C言語もマイコンも初心者ですので情報が不足していたら笑って指摘してください。 今はルネサスのHigh-performance Embedded Workshop(Version 4.04.01.001)を使用してタイマ割り込みを実現しようとしてますが、タイマが動作しません。 出力結果も繰り返し処理が正常に動いてないように見えます。 原因等わかる方いらっしゃいましたら教えていただけますでしょうか。 可能でしたらソースコードもつけていただけると幸いです。 ---出力結果--- H8/3052F Monitor v1.12 Copyright (C) 1999-2004 CSE Tomakomai NCT 1:ld 1:go 00ffe000 change job wooooooooo! w ---ソースコード--- #include "3052f.h" #include "utility.h" #pragma interrupt ( aaa ) int cnt; extern void initITU( void ); void aaa() { debugString( "aaa!" ); cnt++; } void main(void) { InitializeSCI(); setDebugMode( true ); initITU(); // タイマーを初期化 ITU0.GRA = 20000; // タイマでカウントする値の設定 ITU0.TCNT = 0; // Reset ITU0.TCNT ITU.TSTR.BIT.STR0 = 1; // タイマ スタート debugString( "change job" ); while( 1 ){ if(cnt == 50){ debugString( "here we go!" ); cnt = 0; } else { debugString( "wooooooooo!" ); } } } void initITU() { ITU.TSNC.BIT.SYNC0 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC1 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC2 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC3 = 0; // 他チャンネルとの同期無し(独立動作) ITU.TSNC.BIT.SYNC4 = 0; // 他チャンネルとの同期無し(独立動作) ITU0.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU1.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU2.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU3.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU4.TCR.BYTE = 0x03; // クロックの1/8で動作。TCNTのクリア禁止 ITU0.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU1.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU2.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU3.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU4.TIOR.BYTE = 0; // GRの制御。0x00でよい。 ITU0.TIER.BIT.IMIEA = 1; // 全割り込み許可(オーバーフロー/IMFA/IMFB) ITU1.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU2.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU3.TIER.BIT.IMIEA = 0; // 全割り込み禁止(オーバーフロー/IMFA/IMFB) ITU4.TIER.BIT.IMIEA = 0; // 全割り込み許可(オーバーフロー/IMFA/IMFB) }

  • デジタルタイマとカウンタによる電磁弁の操作

    ご覧いただきありがとうございます。 電磁弁の開閉を時間制御して、一定回数繰り返したら停止させたいと思っています。(例えば、開5分・閉10分を1セットとして1000セット繰り返す作業をしたいです。) 過去質問を拝見し、デジタルタイマを利用した電磁弁の制御についてはできることがわかりました。https://mori.nc-net.or.jp/qa9615413.html ここに回数制御を付け加えるのに、下記のような方法を考えましたが、電気関係はほとんど知識がないため、これで実際にできそうか、また具体的にどう配線すればよいか自信がないため、ご助言いただければ幸いです。 ・OMRONのデジタルタイマH5CZと電子カウンタH7CZを使用する。 ・タイマの出力を電磁弁とカウンターに入力する。 →調べていると、リレーで1つの入力を複数に出力できるとありましたが、何を選定すればよいかわからなかったため、教えていただきたいです。 ・カウンタが規定回数に達したら、カウンタの出力をタイマに入力し停止させる。 ・電磁弁は方向制御をしたいのでSMCの3ポートソレノイドバルブVT307-1GS1-02を使用予定です。 よろしくお願いいたします。

  • 4MHzから1Hzへのカウンタを用いた分周について

    4bitカウンタを従列接続することによって、4MHzの水晶発振器の出力を1Hzまで分周する回路をつくれ という問題がありますが、実現方法がわかりません。 4×10^6個のパルスを分周することになると思いますが、4bitカウンタでは2^16ごと周波数が落ちていくので、1Hzきっちりにはならない気がします。 何か勘違いをしていますでしょうか? よろしくお願いします。

  • b sh スクリプトでの出力結果編集について

    b sh (Bourne Shell)での出力結果を編集する方法を教えてください。 やりたいことは、/sbin/ifconfig から NICの名前、MACアドレス、 IPアドレス等を抜き出したいのですが、やり方がわかりません。 個々に抜き出すのは出来るのですが、以下の表示にしたいと考えてます。 NICname : HWaddr : ip addr 以上宜しくお願いします。

  • 電流および電圧出力タイプのDAコンバータ

    よろしくお願い致します。 現在、制御基板の設計を行っております。 仕様の一つとしてCPLDからのデジタルデータをアナログデータに変換して 出力させたいのですが電圧出力(0~5V)または電流出力(0~20mA)の 両方が出力できるようにしなければなりません。 どのような回路構成にすればよいか悩んでおります。 例えば0~20mA電流出力のDACを用意して、電圧出力にするときは出力段に並列に250Ωの 抵抗を配置して0~5Vに変換するといったやり方でよいのでしょうか? また、なにかオススメのDACなどがあれば教えて頂けないでしょうか? 仕様としては・・・ アナログ出力:8チャンネル CPLD:MAXII デジタルデータ:8~10bit程度を予定 基板の電源電圧:+3.3V、+5.0V となっております。 お手数ですが何卒よろしくお願い致します。

  • PICのPWM出力の分解能の向上

    PICをもちいたPWM出力で10bit以上出したいのですが、どのような方法があるでしょうか? お願いします。

  • H8のITUトグル出力で 0出力で停止したい

    ルネサス製H8/3052Fを使用しています。ITUを通常動作で使用して、GRAコンペアマッチでTIOAC端子からトグル出力を行う際にタイマを停止するとTIOACの出力レベルが 0 で停止してほしいのですが、停止した際に 0/1 どちらの状態になるかコントロールできずに困っています。 試しに、「タイマを停止するときにコンペアマッチで0出力を一度させてから停止する」という方法を使ってみたのですが、結果は変わりませんでした。以下、そのソースコードを記載します。どうやったらタイマ停止後に TIOCAの出力レベルを 0 にできるかアドバイスをいただけますようお願いします。 -------------------------------------------- #define ITU4_setBRA(val) ITU4.BRA = val // コンペアマッチによりBRAの値をGRAに自動転送 void ITU4_init(void){ ITU4.TCR.BIT.CCLR = 1; // GRAのコンペアマッチでTCNTをクリア ITU4.TCR.BIT.CKEG = 0; // 立ち上がりエッジでカウント ITU4.TCR.BIT.TPSC = 3; // φ/8 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 ITU.TFCR.BIT.BFA4 = 1; // BRA4をGRAのバッファレジスタとして使用 ITU4.TCNT = 0; } void ITU4_start(void) { ITU4.TCNT = 0; ITU.TSTR.BIT.STR4 = 1; } void ITU4_stop(void) { int i; // 一度 GRAコンペアマッチで 0 を出力させてから、トグル出力に戻す。 ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 1; // GRAコンペアマッチで0出力 ITU4.GRA = 1; ITU4.BRA = 1; ITU.TSTR.BIT.STR4 = 1; // カウント開始 for(i=0; i<32; i++) ; // 無駄時間ループ ITU.TSTR.BIT.STR4 = 0; // カウント停止 ITU4.TIOR.BIT.IOA = 3; // GRAコンペアマッチでトグル出力 }

  • 3bitのカウンタ回路

    いつもお世話になっています。 今回問題でD-FFを使って同期クリア入力のある3bitカウンタを設計せよと 書いてあったのですがその遷移表がうまくかけません;; クリアが1のときにクロックの立ち上がりでカウンタ出力が0になると 書いていました。 この場合、同期式カウンタでつくればいいのでしょうか? 詳しくは書かれてなかったのですがアップダウンカウンタを想定していいのでしょうか? よろしくお願いします<(_ _)>

  • プリセットダウンカウンタ(ロジックIC)

    74HC193(4bit Presettable U/D counter)を2個用いて,8bitのダウンカウンタを製作したいと考えております. 前提条件としては,1MHzのクロックと任意周波数の入力パルスがあります.(既に製作済み) 実現したい動作としましては,任意周波数の入力パルス(パルス幅は1us程度)があるたびに,一定時間(DIP等でダウンカウンタにプリセット)出力したのち,次のパルスが入るまではLow状態を保つ,といったものです. 現在までに製作したものでは,JK-FFと74HC193の組み合わせによって,入力パルスとダウンカウンタのBorrow信号によってFFをトグルさせるような構造にしてみました. ところが,2つのダウンカウンタのBorrow信号の接続が間違っているためか,Borrow信号の波形が不規則な動きをしてしまいます. ご教授いただきたい内容としまして, 1. 74HC193等のICを複数個用いてダウンカウンタを構成する場合,クロック入力,クリア入力,Borrow出力等の相互接続はどのようにすればよろしいのでしょうか? 2. プリセット値をロードしてダウンカウント(1回目)を行ったあとはロード信号が入れば再びプリセット値からダウンカウントを始めるのでしょうか? 3. 上記に関連しまして,現在のところクリア入力はGNDに落としているのですが,動的に信号を入れてやる必要があるのでしょうか? 複雑,多岐に渡るご質問で大変恐縮ではありますが,何卒ご指導いただければ幸いです.

  • コマンドラインに入力されている文字列の1文字を出力

    ○下記のコードについての質問になります #include <stdio.h> int main( int argc, /*コマンドライン引数*/ char *argv[] /*コマンドライン */ ) { int counter; /*ループカウンタ*/ for( counter = 0 ; counter < argc ; counter++) { printf( "argv[%d]:%s\n" , counter , argv[counter] ); } /*----------------------------------------------------------- printf( "コマンドラインの1文字を抜き取る:%c" , ????????); ------------------------------------------------------------*/ return (0); } ○質問 コマンドラインのプログラムになります。 「--」で囲っている部分になりますが、 コマンドラインに入力されている文字列の1文字だけを出力できるように したいのですが、どうすればこれを実現することができるのでしょうか?? 一例として >command.exe orange ringe ^^^^^^ と、コマンドを打ったときに、「^^」の部分になりますが、 orangeの「a」だけを出力させたい場合を、知りたいと思っております。 以上、宜しくお願いします。