Я очень новичок в программировании Atmegas и AVR, поэтому я надеюсь, что вы простите меня за этот нубский вопрос: у меня есть этот код, который отлично работает на частоте 1 МГц, но если я подключил Atmega к внутренней частоте 8 МГц, изменив частоту F_CPU на 8 МГц кроме того, светодиод мигает слишком быстро, кажется, что компилятор C игнорирует мою новую частоту. Может ли кто-нибудь помочь мне ;)?
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/io.h>
int main(void)
{
while(1)
{
//TODO:: Please write your application code
/* set PC0 on PORTC (digital high) and delay for 500mS */
PORTD &= ~_BV(PD5);
_delay_ms(500);
/* PC0 on PORTC (digital 0) and delay for 500mS */
PORTD |= _BV(PD5);
_delay_ms(500);
}
}
он компилируется с помощью этих команд:
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
БОЛЬШОЕ спасибо за ваше время и помощь;) Delay.h: http://pastebin.com/wzppfma3
F_CPU
, и вы предполагаете, что компилятор игнорируетF_CPU
. Но также может случиться так, что частота вашего процессора не такая, как вы думаете. - person indiv   schedule 13.08.2015_delay_ms()
— это встроенная функция, определенная в заголовке<util/delay.h>
, и ее поведение зависит от значения макросаF_CPU
. - person   schedule 13.08.2015-dF_CPU=8000000UL
? Вы не перепутали с-DF_CPU=8000000UL
который нужно было бы использовать при компиляции исходников, а не для линковки. - person too honest for this site   schedule 14.08.2015_delay_ms()
определено в<util/delay.h>
. Было бы полезно, если бы вы добавили это определение к вопросу. - person user3386109   schedule 14.08.2015_delay_ms()
может дать на любой тактовой частоте. - person Dmitri   schedule 14.08.2015<util/delay.h>
является частью заголовков цепочки инструментов AVR. Это не часть проекта этого пользователя. - person   schedule 14.08.2015