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

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



 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()は空でした。ここを作りこめばよいような気がしてきました。
 
 如何でしょうかね?
 
以上

 
2010年3月13日10:49 koizumi yoshiyuki <koizumiyoshiyuki@gmail.com>:
始めまして、koisanと申します。
Cortex-M3を使ってTOPPERS/ASPにトライしています。ビルドが通って動き出しましたが、良くわからないことが2,3在ります。小生のやっていることが正しいのかサポートが頂ければと思いメールを書きました。もしかしたら既に議論されているのかも知れませんが、ログを見つけることが出来ませんでした。
 
1. renameが上手く行かない
 オリジナルのままでは名前の問題でデバッグが面倒なのでkernl_rename.hでの名前の変更を削除しました。
 しかし、syslog.cで名前の誤りでコンパイルエラーになります。_kernel_urrent_timeが使われていますが、current_timeが正しいと思います。
 修正して先に進めています。
 
2 キー入力が出来ない
 main_task()のdoループでキー入力しても、SVC_PERROR()の次に進みません。
 A.キー入力の割り込みが動作し、セマフォ待ちのmain_task()の待ちを解除しようとしますが、この時p_schedtskはlogtask_mainを指しています。p_runtskはtask(1)です。
 B.割り込みが発生した時のタスクは(intptr_t)(1), (task)です。よってキー割り込みの処理はOKで、待ちタスクを起動するmake_runnable()の if (p_schedtsk == (TCB *) NULL || pri < p_schedtsk->priority) {の条件が成立しないので、セマフォ待ちのmain_task()を起動できないと思っています。
 C.netで調べると、私以外にもキー入力が出来ない問題に遭遇している方がいるようです。OSのタスク起動関連に問題が有るか、私の環境が不足していると思っています。
 私はA.になっていることが変だと思っていますが、TOPPERSのDispachは理解できていません。
 
3 起動ログを見ると文字化けがあります
 2と関係が有るのかの知れませんが、起動ログに文字抜けがあります。私のログは以下の通りです。メッセージが重なり、2回表示されいるような気がします。

TOPPERS/ASP Kernel Release 1.3.2 for CQ-STARM(STM32F103) (Mar 12 2010, 20:37:33)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN
System logging task is started on port 1.
Systemample program starts (exinf = 0).
 logging task is started on port 1.
Sampleask is running (001).
e program starts (exinf = 0).
task1 is running (002).
task1 is running (003).
task1 is running (003).
 
 何が正しいのか判っていませんが、何か変な感じです。
 
 尚、ソースはTOPPERS/ASMの個別パッケージをダウンロードし、ARM_GCCとCQ-STARM(STM32F103)を使っています。
 
 以上