很简单的一段代码。。搞不懂了。。望指点
问一下 我想把 控制 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;
}
}