AVR/Atmel Studio延时函数没有被调用的问题
2012-09-20 11:25
218 查看
最近刚接触Atmel Studio,有很多东西不熟悉。弄了个范例程序,想自己改个跑马灯的程序,需要用到延时,可是延时一做成函数就有问题,根本没有延时的效果,把代码放到主函数里却没有问题。使用avr simulator软件仿真试试,发现延时函数根本没有被调用,可是函数明明声明得没有问题啊。
网上一查发现是GCC编译器优化导致的。这下我明白了,因为GCC编译器会误认为这是没有用的的一段程序,因为他不起任何实际计算效果,目的正是为了占用时间,在进行速度优化的时候便将其省掉了。
解决方法很简单,只要将GCC编译的优化选项关掉即可,或者在延时函数的变量前加volatile。
网上一查发现是GCC编译器优化导致的。这下我明白了,因为GCC编译器会误认为这是没有用的的一段程序,因为他不起任何实际计算效果,目的正是为了占用时间,在进行速度优化的时候便将其省掉了。
解决方法很简单,只要将GCC编译的优化选项关掉即可,或者在延时函数的变量前加volatile。
void Delayabc(uint8_t d) { volatile uint8_t a,b,c; a = 200; while (a--) { b = 200; while (b--) { c = 200; while (c--) { while (d--); } } } }
相关文章推荐
- 关于Linux下I2C驱动的Probe方式没有自动生成i2c_client且没有自动调用i2c_driver的.probe指向的函数的问题解决
- 通过回调函数 调用parent窗体 关闭子窗体 因为没有运行完需要的函数 回调关闭会出错 需要延时执行
- 关于函数字符数组调用的问题(没有搞清指针的概念)
- 使用函数的递归调用来解决Hanoi(汉诺)塔问题。
- android-studio下ndk的配置和简单JNI调用遇到的问题
- 解决:对 PInvoke 函数的调用导致堆栈不对称问题
- 调用DLL找不到函数名或者函数乱码问题
- 浅谈C++中内存分配、函数调用和返回值问题
- 对 PInvoke 函数的调用导致堆栈不对称问题
- C++从虚函数表的底层来看虚函数调用问题
- 关于基类构造函数调用虚函数实际调用的不是派生类的问题的原因
- C#调用C++函数入口点的问题 z
- c++中如何解决函数调用二维数组的问题。
- PHP中exec、system等函数调用linux命令问题
- C#关于静态函数与普通函数之间的调用问题,以及可变参数的使用
- 关于wxpython或者wxwidgets中EVT_PAINT没有被调用问题
- 用cocos2d-android开发android游戏时调用box2d中的native本地函数问题
- 同一个C语言工程不同C文件之间的函数互相调用问题(一)
- 绑定服务遇到的问题,绑定后无法调用其中的数据和函数
- C++中内存分配、函数调用和返回值问题