Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Atmega@8MHZ延迟8倍至快速_C_Avr_Atmega_Avr Gcc_Avrdude - Fatal编程技术网

C Atmega@8MHZ延迟8倍至快速

C Atmega@8MHZ延迟8倍至快速,c,avr,atmega,avr-gcc,avrdude,C,Avr,Atmega,Avr Gcc,Avrdude,我对Atmegas ant AVR编程非常陌生,所以我希望你能原谅我这个noob问题:我有这段代码,它在1MHZ下运行得非常好,但是如果我将Atmega融合到内部8MHz,同时将F_CPU频率也更改为8MHz,LED闪烁的速度会非常快,似乎C编译器忽略了我的新频率。有人能帮我吗 非常感谢您的时间和帮助;) Delay.h:您应该将AVR的内部保险丝更改为8MHz,仅在代码中写入是不够的,请将lfuse设置为0xE4以使AVR在8MHz下工作问题是,延迟ms的最大ms值取决于您的F\U CPU频率

我对Atmegas ant AVR编程非常陌生,所以我希望你能原谅我这个noob问题:我有这段代码,它在1MHZ下运行得非常好,但是如果我将Atmega融合到内部8MHz,同时将F_CPU频率也更改为8MHz,LED闪烁的速度会非常快,似乎C编译器忽略了我的新频率。有人能帮我吗

非常感谢您的时间和帮助;)
Delay.h:

您应该将AVR的内部保险丝更改为8MHz,仅在代码中写入是不够的,请将lfuse设置为0xE4以使AVR在8MHz下工作

问题是,延迟ms的最大ms值取决于您的F\U CPU频率。根据文件,此最大值为:

262.14 ms/F_CPU(以MHz为单位)

对于您的8兆赫,其最大值为32毫秒。因此,编写这样的循环以获得500毫秒的延迟:

for (uint8_t i=0; i<50; i++) _delay_ms(10);

用于(uint8_t i=0;i你改变了两件事:CPU频率和
F_CPU
,你假设编译器忽略了
F_CPU
。但也可能是你的CPU频率不是你想象的那样。编译器本身肯定会忽略宏。这是因为它不知道时钟和底层系统。如果我们的延迟函数不符合定义,您应该检查它们。您超过了
\u delay_ms()
在任一时钟频率下所能提供的最大延迟。在8MHz下,最大延迟约为32.768ms@user3386109
是AVR工具链标题的一部分。它不是此用户项目的一部分。谢谢:)这是解决方案;)根据文档
\u delay\u ms
如果请求的延迟大于最大值,则切换到较低的分辨率,然后支持高达6的延迟。与CPU时钟频率无关的秒数@朱利安:这一定是我4年前发布的一个新功能,尽管看起来它的最大时间限制为6.5535秒。
avr-gcc -g -Os -mmcu=atmega8  -c test.c 
avr-gcc -g -mmcu=atmega8 -dF_CPU=8000000UL -o flash.elf test.o
avr-objcopy -j .text -j .data -O ihex flash.elf flash.hex
for (uint8_t i=0; i<50; i++) _delay_ms(10);