打印
[ARM入门]

ADS中中断里供其他文件使用的全局变量不加volatile就不对?

[复制链接]
1056|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zdhlixiang2006|  楼主 | 2013-11-29 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
抱着对linux的向往,咬咬牙,买了一套天嵌的2440开发板,没想到送的资料几乎都看不懂,包括裸机例程。没办法,后来发现一本书《ARM处理器裸机开发实战-机制而非策略》对裸机讲的特别好,自己跟着学也觉得感觉非常好,在定时器系统那章的例程中,是用TIMER0定时1S中断来让LED闪烁,程序我看了没有问题,然后照着敲了一遍,编译-下载 发现开发板没有任何反应,我以为是自己哪里敲错了,仔细检查了一遍没有发现错误。讲作者光盘例程直接下载后也是没反应,我开始怀疑代码问题了。该例程的原理是,在中断函数中取反一个全局变量flag,主函数中就轮询该变量状态,1就点亮,0就灭掉。该变量原先的定义是:unsigned int flag = 0; 我试着将其修改为  volatile unsigned int flag = 0;  然后LED就闪烁起来了,时间也差不多1S,我想了好几天了,以前用MDK开发ARM7时候没有遇到过这种问题,按理说,在这种情况下使用volatile会避免在某些时候出错,但是绝大部分运行时候应该是没有问题的,怎么解释?

相关帖子

沙发
zdhlixiang2006|  楼主 | 2013-11-29 19:25 | 只看该作者
连上J-LINK仿真也没发现什么问题

使用特权

评论回复
板凳
戈卫东| | 2013-11-29 21:35 | 只看该作者
如果是在main和ISR都要访问的变量,必须要有volatile属性. 否则变量变化时,在main这边不会重新加载到寄存器,变化无法检测到.

使用特权

评论回复
地板
zdhlixiang2006|  楼主 | 2013-11-29 21:47 | 只看该作者
戈卫东 发表于 2013-11-29 21:35
如果是在main和ISR都要访问的变量,必须要有volatile属性. 否则变量变化时,在main这边不会重新加载到寄存器, ...

这是ADS的特性吗?以前虽说也知道这点,但是在MDK下不用也可以的啊

使用特权

评论回复
5
戈卫东| | 2013-11-29 21:56 | 只看该作者
跟什么工具没有关系.
这是基本常识吧,要不你再找本C语言的书看看?

使用特权

评论回复
6
zdhlixiang2006|  楼主 | 2013-12-4 20:35 | 只看该作者
戈卫东 发表于 2013-11-29 21:56
跟什么工具没有关系.
这是基本常识吧,要不你再找本C语言的书看看?

好吧,今天才想起结贴,这个问题暂时放一放,好了,不过我真的觉得这个地方很蹊跷,在MDK中不加是完全没有问题的。我确定一定以及肯定

使用特权

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

本版积分规则

个人签名:沐浴着XX的春风,义无反顾游荡在马勒戈壁

21

主题

523

帖子

2

粉丝