Здесь описан процесс по шагам для создания проекта на основе свободного компилятора AVR GCC.
1. Запустите AVR Studio, в стартовом визарде нажмите большую кнопку New Project, выберите AVR GCC, введите имя проекта (Project name:, выберите имя проекта так, чтобы было понятно, что за проект), выберите папку для размещения проекта (Location:), нажмите кнопку Next.
2. Выберите платформу для отладки (Debug platform:), тип микроконтроллера (Device:), нажмите кнопку Finish.
3. Введите текст программы в главный C-файл проекта (его имя совпадает с названием, которое Вы дали проекту), что-то типа:
int main (void)
{
while (1)
{
}
return 0;
}
4. Если Вы хотите, чтобы автоматически подхватывались операторы include "имя_файла.h", то вы должны указать все папки, где нужно искать эти include-файлы, в настройках проекта - меню Project -> Configuration Options -> нажмите кнопку слева "Include Directories", нажмите New (Insert), укажите путь к папке (можно воспользоваться кнопкой браузинга ...).
5. Файлы проекта, которые вызываются операторами include, должны быть вручную добавлены в Header Files среды разработки, иначе она их "не видит" - файлы эти компилируются, но изменения, сделанные текстовым редактором в них, не учитываются, пока включаемые файлы не сохранить.
6. Если во включаемых файлах объявляются функции, определенные в других C-файлах, то эти C-файлы нужно добавить в Source Files, чтобы они тоже компилировались.
7. Тип процессора (например, ATMega16) указывается в меню Project -> Configuration Options -> кнопка General -> выпадающий список Device: atmega16. При этом в зависимости от выбора компилятору передается информация от типе процессора с помощью опции -mmcu=тип_микроконтроллера (в нашем примере -mmcu=atmega16). Символьная информация о именах регистров (которая своя для каждого типа процессора) обеспечивается файлом-селектором avr/io.h, который исходя из типа процессора загружает нужный include-файл. В нашем примере загрузится файл avr/iom16.h, причем этот файл напрямую (без avr/io.h) включать нельзя.
8. В отличие от переменных, для функций в заголовках применяют простое предварительное объявление внешней функции без extern:
extern void adcInit (void); // НЕПРАВИЛЬНО
void adcInit (void); // ПРАВИЛЬНО
9. Генерация блокирующих задержек может быть осуществлена с помощью функций, определенных в заголовке delay.h.
#include < util/delay.h >
_delay_ms(1); // миллисекундная задержка
_delay_us(1); //микросекундная задержка
Для корректной работы подпрограмм задержки должна быть выставлена тактовая частота микроконтроллера в свойствах проекта (Project -> Configuration Options -> кнопка General -> указываем в окне ввода Frequency: частоту в герцах). При этом к компилятору передается опция -DF_CPU=тактовая_в_герцахUL, она создает макроопределение F_CPU, использующееся при генерации задержки.
10. Использование inline-инструкций ассемблера:
11. Работа с таймером WatchDog (WDT):
#include < avr/wdt.h >
wdt_enable(WDTO_1S); //Настройка WDT на 1 секунду.
...
wdt_reset(); //Сброс WDT (для предотвращения перезагрузки)
// в основном цикле программы.
12. Проверка бит (на примере бита ADSC регистра ADCSRA):
if (bit_is_clear(ADCSRA, ADSC))
{
result = ADCL;
result += ((uint16_t)ADCH) << 8;
ADCSRA |= (1 << ADSC);
}
В свежих версиях gcc (WINAVR) функция bit_is_clear может отсутствовать [1]. Используйте вместо неё следующую конструкцию:
if (!(ADCSRA & (1 << ADSC)))
{
result = ADCL;
result += ((uint16_t)ADCH) << 8;
ADCSRA |= (1 << ADSC);
}
Вызов функции bit_is_set(ADCSRA, ADSC) может быть заменена на (ADCSRA & (1
13. В AVR GCC встроена поддержка битовых констант, что довольно удобно:
void ON_LED (void)
{
DDRB |= 0b00000001;
PORTB |= 0b00000001;
}
void OFF_LED (void)
{
DDRB |= 0b00000001;
PORTB &= ~(0b00000001);
}
Однако увлекаться битовыми константами не советую, так как при портировании кода на другие компиляторы и платформы возникнут проблемы.
[Ссылки]
1. AVR GCC - операции с битами inp, outp, sbi, cbi, bit_is_set и bit_is_clear.
|
Комментарии
Слева есть окошко AVR_GCC. В нем этот Source Files. Правой кнопкой мыши выбираем Add Existing...
RSS лента комментариев этой записи