(toppers-users 3746) Re: SSPの制約タスクの待ちについて
Hiroaki TAKADA
hiro @ ertl.jp
2012年 1月 17日 (火) 23:11:52 JST
杉本さん
> bitmap_searchはASPとアルゴリズムを共通にしたいため
> 現在の実装となっています。また、ソースコードの可読性も
現状、ASPカーネルのアルゴリズムとは違っていますよね? 16段階にする際に、
全く同じにしてしまってはどうでしょうか?
高田広章
名古屋大学
(12/01/17 16:58), 杉本明加 wrote:
> 宮川さん、こいさんさん
>
> 杉本です。
>
> 宮川さんにご紹介いただいたやり方ですが、どこかの書籍で
> 読んだ記憶があり、その時はよく考えるなぁと思ったものでした。
>
>
> 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)
>>
>> 固定時間だし、シフトと足し算だけなのでそれなりに速いと思います。
>>
>> --------------
>>