[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 3092) Re: Cortex-M3でTOPPERS/ASPにトライしています。文字入力が出来ません。



小南と申します。

2010/3/15 koizumi yoshiyuki <koizumiyoshiyuki@gmail.com>:
>  koisanです。
>  キー入力が出来ない件のその後の解析状況です。
>  デバッグを行なっています。タイマ割り込みが入ってしまい、動作が良く分からいのでtask()のwhile
> (1)の無限ループに入る前に、systick割り込みをマスクして動作を単純にしてみました。(このデバッグの為の修正がほかの悪さをしてしまうかは良く分かっていません)
>  すると、キー入力の割り込み処理で、main_taskが待ちになっているセマフォ待ちを解除しディスパッチするためにp_schedtskにmain_taskを設定し、reqflgをtrueにします。しかし、ディスパッチが呼び出されないため、タスクスイッチが行われません。ディスパッチはどこで行われるのでしょうか?
>  割り込みキー入力割り込みを抜けるときに行うべきのような気がします。
>
>  小生、TOPPERS/ASPのARM
> Cortex-M3アーキテクチャ・GCC依存部パッケージ(担当:(株)未来技術研究所)版を使っていますが、この処理が組み込まれていないことになります。
>  i_begin_int()とi_end_int()は空でした。ここを作りこめばよいような気がしてきました。
>
>  如何でしょうかね?
>

私はARMコア系のハードを持っておらず、すぐに確認できる開発環境も手元にないため、以下は参考意見としてお読みください。

TOPPERS/ASPでは(TOPPERS/JSPの頃でも)割込みハンドラ(そこから呼び出される割込みサービスルーチン(ISR)も含む)の処理中にタスク切り替えの必要が発生した場合(タスク切り替えを伴うサービスコールの呼び出しや待ち解除の発生など)は、割込みハンドラの出口処理で判別して、ディスパッチ処理を呼び出します。

ここは割込みハンドラの出口処理はターゲット依存部になりますので、各ターゲット依存部で記述することになります。
少なくとも、私がよく見ているSH-3やH8系のターゲット依存部はそのように記述されています。

この辺りの詳しい解説はNEP(エヌイーピー)ブログの「リアルタイムOSの内部構造を見てみよう!」

 http://www.nces.is.nagoya-u.ac.jp/NEXCESS/blog/

にあります。
TOPPERS/ASPの共通部分とターゲット依存部(SH-3)での割込みハンドラの処理内容とか、サービスコールの処理内容、内部データ構造などが詳しく解説されています。

ちなみにNEP(エヌイーピー)とは名古屋大学大学院情報科学研究科付属 組込みシステム研究センター(NCES)の教育プログラム(NCES
Education Program)のことです。

 http://www.nces.is.nagoya-u.ac.jp/NEP/

#以前はNEXCESSといっていましたが、去年からNEPになりました。