首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

很简单的一段代码。搞不懂了。望指点,该怎么解决

2012-02-08 
很简单的一段代码。。搞不懂了。。望指点 问一下我想把控制GPIO的32位地址每一位分别置1.代码有什么问题吗。。望

很简单的一段代码。。搞不懂了。。望指点

问一下   我想把   控制   GPIO   的   32位   地址   每一位分别置   1.   代码有什么问题吗。。
望高手指点:


for(int   i=0;i <32;i++)
{
                if(i   ==   0)   *gpio_pt=0x00000001;
                else
                                {
*gpio_pt=(*gpio_pt) < <1;
                                  }    
}

[解决办法]
干吗作的这么复杂?
for(int i=0;i <32;i++)
{
*gpio_pt = 1 < <i;
}//循环结束后时0x80000000,不是0xffffffff
另外,使用gpio的变量时需要小心编译器的优化。

[解决办法]
//if you want *gpio_pt be 0 first;
*gpio_pt = 0;
for(int i=0;i <32;i++)
//*gpio_pt每次自身加上(1 < <i);
*gpio_pt |= 1 < <i;
[解决办法]
for(int i=0;i <32;i++)
{
if(i == 0) *gpio_pt=0x00000001;
else
{
*gpio_pt=(*gpio_pt) < <1;
}
}
代码的结果是:
i *gpio_pt value you want
0 0x00000001 0x00000001
1 0x00000002//*gpio_pt=( 0x00000001) < <1; 0x00000003//*gpio_pt= 0x00000002+0x00000001
2 0x00000004//*gpio_pt=( 0x00000002) < <1; 0x00000007//*gpio_pt= 0x00000004+0x00000003
3 0x00000008//*gpio_pt=( 0x00000004) < <1; 0x0000000f//*gpio_pt= 0x00000008 +0x00000007
...
结果是每次给高一bit位置1,其它位清0。
如果要结果是每次给高一bit位置1,其它位保留不变。那就:
for(int i=0;i <32;i++)
{
if(i == 0) *gpio_pt=0x00000001;
else
{
*gpio_pt|=(*gpio_pt) < <1;
}
}

热点排行