(toppers-users 3729) Re: SSPの制約タスクの待ちについて

koizumi yoshiyuki koizumiyoshiyuki @ gmail.com
2012年 1月 17日 (火) 09:36:31 JST


杉本さま

待ちの定義に合っているかの話ではなく、スタックサイズをどう記述しなければならないのかといた、基本的な話のつもりです。
制約タスクの目標の一つが待ちをなくすことでスタックの統合が可能になり、メモリサイズを削減、のような記述を見たことがあります(TOPPERSではなかった記憶)。

SSPは従来の制約スタックの上位互換なので、スタックサイズの制限が緩くても、よいのかとは思いますが気になってしまいました。


別件ですが、

TOPPERS/SSPカーネルの仕様概要に「最大で登録できるタスク数は16である」と有りますが、タスク番号の変換処理のbitmap_search()は0-7までしか変換できないと思います。
4bitごとに処理しているので、ifの処理がMAX3回る必要があると思います。下記でよいでしょうかね。

Inline uint_t
bitmap_search(uint_t bitmap)
{
 uint_t n;
 for(n = 0U; n < 3; n++){
  if ((bitmap & 0x0fU) == 0U) {
   bitmap >>= 4U;
  }else{
   break;
  }
 }
 return (n*4U + bitmap_search_table[(bitmap & 0x0fU) - 1U]);
}
おまけ、bitmap_search_tableの記述をbitmap-1しなくても良い作りも有ると思います。このほうが1命令早いかな。
(又、単純なuint_t bitmap_searchなら8回まわって、1のBitなしエラーを追加した方が関数としては一般的かな)


SSPは仕様書が出るまで待ちましょうかね。

以上
2012年1月16日22:47 杉本明加 <asuka.choronos @ gmail.com>:

> こいさんさん
>
> 杉本です.
>
> 制約タスクの仕様はμITRON4.0と同等です.
>
> >
>  と有ります。sample1でtask()が動作している時に、周期ハンドラのcyclic_handler()からmain_taskタスクが起動され、taskの動作中にmain_taskタスクが動作してます。これはtaskが待たされていることにはならないのでしょうか。(私は、待たされていると思います)
>
> TOPPERS新世代カーネル仕様(及び基となっているμITRON4.0仕様)では,これは
> 待ち状態に該当しません.挙げていただいた例ではtaskは実行可能状態であり
> 待ち状態ではありません.taskは実行可能ではありますが,より優先度の高いmain_taskが
> 実行可能状態であるため実行できないだけです.
>
> いわゆる待ち状態は,タスクが実行できない条件(何らかのイベントを待っている)であることを
> 指します.ASPのサンプルのmain_taskですとシリアルドライバからの受信が
> 来ないためにCPUが割り付けられることがありません.
>
> タスクが動作しないという事象は同じですが,その理由が異なります.
> このあたりはタスク状態遷移について熟読いただくとよいと思います.
>
> >  優先度の高いタスクが優先度低いタスク動作中に動作することになると、制約タスクのスタックは  【補足説明】 の
> > 「各タスクのスタックサイズの最大値」ではスタック不足が発生してしまうと思いますが、如何でしょうか。
> >
>
> SSPのスタックはシステム全体で共有しており,各タスクと割込みハンドラが使用する
> スタックの最大値を求めて確保しています.
>
>
> SSPの仕様はTOPPERS統合仕様書にマージ作業を終えて確認中ですので
> 近いうちに公開になるかと思います.それまでお待ちください.
> といっても多くの部分はμITRON4.0仕様と互換になっていますので,基本的な部分は
> そちらでまず確認頂ければ幸いです.
>
> 以上,よろしくお願いします.
>
> 2012年1月16日20:34 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
> >  こいさんです
> >
> >  SSPの制約タスクの仕様ですが、μITRON4.0仕様5.2.1 制約タスク が原典で良いのでしょうか。
> >
> >  であるなら、制約タスクは
> >
> > * 待ち状態に入ることができない.
> >
> >
>  と有ります。sample1でtask()が動作している時に、周期ハンドラのcyclic_handler()からmain_taskタスクが起動され、taskの動作中にmain_taskタスクが動作してます。これはtaskが待たされていることにはならないのでしょうか。(私は、待たされていると思います)
> >
> >  優先度の高いタスクが優先度低いタスク動作中に動作することになると、制約タスクのスタックは  【補足説明】 の
> > 「各タスクのスタックサイズの最大値」ではスタック不足が発生してしまうと思いますが、如何でしょうか。
> >
> >  SSPの仕様書の類がまだ非公開(?)なので、理解できずにいます。
> >
> >  何かヒントになる情報が入手できないでしょうか。
> >
> >  以上
> >
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20120117/61d7fe3f/attachment.html>