历史上的今天
今天是:2025年04月18日(星期五)
2020年04月18日 | AVR/Atmel Studio延时函数没有被调用的问题
2020-04-18 来源:eefocus
最近刚接触Atmel Studio,有很多东西不熟悉。弄了个范例程序,想自己改个跑马灯的程序,需要用到延时,可是延时一做成函数就有问题,根本没有延时的效果,把代码放到主函数里却没有问题。使用avr simulator软件仿真试试,发现延时函数根本没有被调用,可是函数明明声明得没有问题啊。
网上一查发现是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--);
}
}
}
}
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:13 编辑 今天是来到长沙的第二天,参赛队可以在那里进行现场调试,我们的是上午九点到就点半,下午两点到两点半。 早上七点钟起来,吃完早餐后,坐公车到湖南大学~ 提前 九点钟进入场地调试,呵呵~ 迫不 ...… 查看全部问答> |
|
瘋狂的出jffs2_scan_eraseblock錯誤。 我使用的是 8M Nor Flash 但是 沒有分區,請問 分區的作用是什麽? 這個問題最可能的原因是什麽,仰仗各位的經驗了。… 查看全部问答> |
|
请教一下EVC的调试方法 如何使用模拟机,我的模拟机为什么总提示我连不上,我的程序使用我的SDK在目标机上都成功执行了? 我可以在模拟机上单步调试我的程序吗? 我可以在目标机上单步调试我的程序吗?… 查看全部问答> |
|
南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 南京招聘:有嵌入式及硬件基础知识的Delphi BCB程序员,从事监控主站开发 要求: 1:熟悉Delphi开发环境。 2:熟练使用SQL-Server编程语言 3:了解一定的硬件知识和 ...… 查看全部问答> |
|
MSP430F1232 只能用TI GANG430 编程器烧写程序,用利尔达 USB仿真器及自己制作的 JTAG 编程器不能 仿真 , 只能用TI GANG430 编程器烧写程序一次而且并没有烧断熔丝,以后再刷就得用BSL.… 查看全部问答> |
|
1 在WWDG工作时 假如窗口值为0x50 是不是只有在计数值在0x50~0x40之间重新刷入计数值才能不引起mcu复位??? 2 还有在RCC配置里有一条RCC_GetFlagStatus(RCC_FLAG_WWDGRST)/检验WWDG复位标志位是否职位是什么意思? 是指MCU本次复位是由W ...… 查看全部问答> |




