(toppers-users 3730) Re: SSPの制約タスクの待ちについて
Miyagawa
miyagawa @ sanritz.co.jp
2012年 1月 17日 (火) 11:10:37 JST
宮川です。
余計な突っ込みかも知れませんが、、、
> 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)
固定時間だし、シフトと足し算だけなのでそれなりに速いと思います。
--------------