Как сделать новый проект avr-gcc в AVR Studio 4 |
![]() |
Добавил(а) microsin |
Здесь описан процесс по шагам для создания проекта на основе свободного компилятора 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-инструкций ассемблера: asm volatile ("nop"); 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.
|