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