打印
[ZLG-ARM]

请教:GPIO读写问题

[复制链接]
1722|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cd666|  楼主 | 2008-12-1 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的是想将P0.8-P0.15的内容存入一个8字节内.
代码如下:
variable uint8 pin;
pin=0x00;
IO0PIN=0x12345678;
pin=(uint8)IO0PIN>>8;
但pin的内容不能得到我需要的0x56的内容.在AXD里面添加Watch提示Variable removed by compiler(optimization)
请各位指点一下.谢谢

相关帖子

沙发
gooofy| | 2008-12-1 15:53 | 只看该作者

全局变量

把pin改成全局变量

使用特权

评论回复
板凳
cd666|  楼主 | 2008-12-1 16:34 | 只看该作者

还是不行

改成全局变量加了限定词之后,没有提示被优化的提示了.但是PIN还是=0X00.
我的目的就是读P0.8-P0.15引脚的内容,后存到8BIT的数组里,但现在一个字节的内容都搞不定,请谁给一段正确的C代码.

使用特权

评论回复
地板
gooofy| | 2008-12-1 16:36 | 只看该作者

volatile

#include "config.h"

volatile uint8 pin;
int main (void)
{
    IO0DIR=0xFFFFFFFF;
    pin=0x00;
    IO0PIN=0x12345678;
    pin=(uint8)(IO0PIN>>8);
    while(1);
    return 0;
}

使用特权

评论回复
5
cd666|  楼主 | 2008-12-1 17:02 | 只看该作者

还有点不明白

PIN等于0X00我知道是因为类型转换的时候少了一个(),结果导制先将IO0PIN进行了转换 再移位了.
为什么要将PIN设为全局变量呢.

使用特权

评论回复
6
gooofy| | 2008-12-1 17:26 | 只看该作者

不晓得

呵呵
具体原因我也不晓得啊

使用特权

评论回复
7
cd666|  楼主 | 2008-12-1 17:43 | 只看该作者

谢谢,那个高手有空能讲解一下就好了

使用特权

评论回复
8
ZLG_Dengz| | 2008-12-1 23:28 | 只看该作者

RE

   因为编译器认为你的变量并非必要,把它优化了,改成全局变量,编译器就不会认为其他地方可能使用这个变量,而不会将其移除。 
   你也可以使用volatile来声明一个不用优化的变量,这样也不会被编译器移除。
   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

47

主题

153

帖子

0

粉丝