Программирование AVR Как сделать новый проект avr-gcc в AVR Studio 4 Thu, October 10 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Как сделать новый проект 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.

 

 

Комментарии  

 
0 #1 Dominix 17.02.2010 13:50
Пояснение к П.6:
Слева есть окошко AVR_GCC. В нем этот Source Files. Правой кнопкой мыши выбираем Add Existing...
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page