您的位置:首页 > 其它

arm处理器裸机开发实战——学习笔记2

2013-01-07 23:10 232 查看
做到中断控制系统这个实验,用定时器0控制led的闪灯,现象是没有闪灯

开始怀疑是没有进中断,从网上找了别的程序对照着修改,把所有模块都去掉,全都写进main文件里,定义flag为全局变量,烧进nand里还是不行,然后把闪灯的程序放到中断子程序里,烧进板子就可以运行了,这说明程序可以正常进中断,但是进去之后没有把标志位flag置位,或者是flag没能传递进主函数里,为了这个问题又想用AXD在线调试,结果设置AXD的时候又出现了不少麻烦

最后经过群里的帮助找到了问题,中断处理函数不能传递变量,果然是flag没有传进主函数里,解决办法有两个,一个是把闪灯程序直接放进中断子程序,另一个办法是把flag设置成volatile int flag,问题的原因是编译器编译代码时为了减少存储器的读写时间,会把flag这个变量优化掉,也就是flag的值在主函数中无法改变,加上volatile后就阻止了编译器对这个变量的优化,flag在中断子程序中取反之后就可以
传递进主函数里了

修改后的定时器0闪灯程序:http://download.csdn.net/detail/long434811/4971478



补充一下,还可以修改ads设置,让编译器减少对代码的优化

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐