(toppers-users 3815) Re: TOPPERS/SSPの起動終了処理について

杉本明加 asuka.choronos @ gmail.com
2012年 1月 22日 (日) 21:42:08 JST


こいさんさん

杉本です.
(一部回答の順番は変えています)

>> 1 start.sのsta_kerの呼び出しは bl ではなく b でよさそうです。
>>   sta_kerは戻りのない関数だと思います。
>> 2 であるなら b でよければ、その後の b   l_end は不要だと思います。

bでも問題ないかと思います.
ただCortex-M3だと命令長は固定なのでメモリ節約には
なりませんね.
ただb命令にすればその後の無限ループが不要になるのでトータルでは2byte得でしょうか.

スタートアップに関してはこう書く癖があって,万が一処理が戻ってきて
しまった場合のガードになるためです.一般的な書き方かどうかは
わかりませんが.

>> 4 であるなら startup.cのsta_ker(void)の最後の assert(false); は不要ではないか。

start_dispatchがターゲット依存部で実装することになっているので,
実装ミスがあった時を考えてassertを入れています.
assertに関してはリリースビルド時には削除されるので特に性能への影響はありません.

>> 3 であるなら kernel_impl.hのextern void sta_ker(void) ;は NoReturn をつけたい。
>>
>>  task.cの dispatcher() は戻りのない関数です。
>> 5 task.hの extern void dispatcher(void) ; は NoReturn をつけたい。

NoReturnにすることでROMが減らせる場合もあるので検討します.

dispatcherには開発途中までNoReturnがついていたのですが,単体テストを
通す際にテストドライバに制御が戻らないことに気付いて悩んだ末に削除しました.
今考えると単体テスト時のマクロ設定を変えれば削除せずに済んだと気づきました.

以上,よろしくお願いします.

2012年1月22日20:06 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
>  すみません、情報不足ですね。
>
>  ターゲットはcq_starmです。
>  説明の順番は5が先ですね。
>
>  終了処理の呼び出しも、同じようなところがありそうです。まだ、詳しく見ていません。
>
>  以上
> 2012年1月22日18:41 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
>>
>>  こいさんです
>>
>>  SSPの起動回りに気になる記述があるので伺います。
>>
>> 1 start.sのsta_kerの呼び出しは bl ではなく b でよさそうです。
>>   sta_kerは戻りのない関数だと思います。
>>
>> 2 であるなら b でよければ、その後の b   l_end は不要だと思います。
>>
>> 3 であるなら kernel_impl.hのextern void sta_ker(void) ;は NoReturn をつけたい。
>>
>> 4 であるなら startup.cのsta_ker(void)の最後の assert(false); は不要ではないか。
>>
>>  task.cの dispatcher() は戻りのない関数です。
>> 5 task.hの extern void dispatcher(void) ; は NoReturn をつけたい。
>>
>>  重箱の角問題かも知れませんが、論理構造が見えなくなってしまうので気になっています。
>>
>>  以上
>>
>>
>>
>> 7 task.cの dispatcher() は戻りのない関数です。
>>  start_dispatchを呼び出す
>
>