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

杉本明加 asuka.choronos @ gmail.com
2012年 1月 17日 (火) 16:58:50 JST


宮川さん、こいさんさん

杉本です。

宮川さんにご紹介いただいたやり方ですが、どこかの書籍で
読んだ記憶があり、その時はよく考えるなぁと思ったものでした。


bitmap_searchはASPとアルゴリズムを共通にしたいため
現在の実装となっています。また、ソースコードの可読性も
考えると現状のコードのままにしたいと考えています。
(タスク優先度16の場合については次期リリースに含みます)

ただ一方で、メモリ使用量が減らせる実装は取り入れたいと
思う部分があり、他の実装を取り入れることでROMが減りそうで
あれば他の実装コードを参考としてパッケージに含めるのはありとも思っています。

以上、よろしくお願いします。


2012年1月17日11:10 Miyagawa <miyagawa @ sanritz.co.jp>:
> 宮川です。
>
> 余計な突っ込みかも知れませんが、、、
>
>> 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]);
>> }
>
> n <= 3 ? は置いといて、
>
> 良く知られた方法としては、こんな手もあります。(16bit)
>
>  x = (x & (-x)) - 1
>  x = (x & 0x5555) + ( (x >> 1) & 0x5555)
>  x = (x & 0x3333) + ( (x >> 2) & 0x3333)
>  x = (x & 0xffff) + ( (x >> 4) & 0xffff)
>  x = (x & 0x00ff) + ( (x >> 8) & 0x00ff)
>
> 固定時間だし、シフトと足し算だけなのでそれなりに速いと思います。
>
> --------------
>