(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)
>
> 固定時間だし、シフトと足し算だけなのでそれなりに速いと思います。
>
> --------------
>