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设置,让编译器减少对代码的优化
开始怀疑是没有进中断,从网上找了别的程序对照着修改,把所有模块都去掉,全都写进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设置,让编译器减少对代码的优化
相关文章推荐
- arm处理器裸机开发实战——学习笔记1
- arm处理器裸机开发实战——学习笔记1
- arm处理器裸机开发实战学习笔记1------流水灯实验错误纠正
- java开发实战学习笔记1
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.5 Bean的生命周期
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 ApplicationContext和BeanFactory区别
- 第10课:底实战详解使用Java开发Spark程序学习笔记(二)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 ApplicationContext和BeanFactory区别
- asp.net4.0网站开发与项目实战—学习笔记1
- 斯坦福大学iOS应用开发教程学习笔记(第二课) 计算器实现(mvc实战)
- Spring boot入门实例 简易登录(精通Spring+4.x++企业应用开发实战 学习笔记二)
- 第58课:使用Java和Scala在IDE中开发DataFrame实战学习笔记
- Python开发实战学习笔记(持续更新)
- 第10课:底实战详解使用Java开发Spark程序学习笔记
- Spring 入门实例 简易登录系统(精通Spring+4.x++企业应用开发实战 学习笔记一)
- 实战开发 C# 索引器学习笔记
- 《Spring 3.x 企业应用开发实战》学习笔记 第四章
- 《Spring 3.x 企业应用开发实战》学习笔记 第四章
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制