Ваш браузер устарел. Рекомендуем обновить его до последней версии.


Новости

2023.06.21

Обновление Радок.

Добавлена возможность сохранять открытые на редактирование документы при закрытии ПО.

Смотреть

2023.07.07

 СанПРТО 9.0 стало бесплатным, но Вы всегда можете поддержать проект по ссылке "Магазин".

2023.07.21 СанПРТО 9.1 при повторном запросе в модуле РПН данные начинаются с первой строки таблицы.

Смотреть

2018

 Запустился новый проект по гибридному усилителю звуковой мощности

Смотреть

Кросс- компилятор Lazarus для AVR

Кросс- компилятор Lazarus для AVR

Опубликовано 13.12.2022

   Как программировать avr в IDE Lazarus, чтоб компилировался hex-файл? У меня ушло много времени на понимание поэтому пишу здесь, чтоб другие не мучались, а сразу пользовались.

     Использование кросс-компиляции было основано на этой статье, в дальнейшем выкинуто всё лишнее (с моей точки зрения). Показываю как это заработало у меня.

     Итак, для программирования микроконтроллеров (avr, arm и др.) на Lazarus необходимо скачать дополнительные ppu-файлы и другие вспомогательные модули. Это можно сделать несколькими способами:

Настройка целевой платформы в IDE Lazarus

1. Для настройки целевой платформы, для которого будет генериться hex-файл, необходимо указать ОС на которой будет выполняться код - embeddedсемейство процессоров - avr и целевой процессор (субархитектура) - avr5, совместимы с теми, которые используются GCC (например, ATmega328p относится к avr5): 

 

2. А так же выбрать конкретный процессор для программирования в "Параметры пользователя":

 

3. Для компиляции проекта нужно указать путь к компилятору. Открываем Параметры проекта --> Команды компилятора--> Команда --> C:\fpcupdeluxe\fpc\bin\i386-win32\ppcrossavr.exe:


5. Для того, чтобы Lazarus мог найти компилятор и дополнительные файлы необходимо один раз указать пути. Это можно сделать поправив в блокноте файл Lazarus "c:\lazarus\fpc\3.2.2\bin\i386-win32\fpc.cfg" (в конце файла):

#IFDEF EMBEDDED

#IFDEF CPUAVR
-FDC:\fpcupdeluxe\cross\bin\avr-embedded\
-XPavr-embedded-
-FlC:\fpcupdeluxe\cross\lib\avr-embedded\$fpcsubarch\

-Fuc:\fpcupdeluxe\fpc\bin\i386-win32\
-FuC:\fpcupdeluxe\fpc\units\avr-embedded\$fpcsubarch\
-FuC:\fpcupdeluxe\fpc\units\avr-embedded\$fpcsubarch\*
-FuC:\fpcupdeluxe\fpc\units\avr-embedded\$fpcsubarch\rtl
-FuC:\fpcupdeluxe\fpcsrc\rtl\units\avr-embedded

-Fic:\fpcupdeluxe\fpcsrc\rtl\inc\
#ENDIF CPUAVR
#ENDIF EMBEDDED

 

Тестирование

program Timers;
{$mode objfpc}{$H-}
{$goto on}

uses
  uInterrupts, me_avr;

//=== Entry point =============================================================  

begin
 DDRC := $FF; 		// настраиваем все линии порта C на вывод
 //PORTC := $00;		// выводим лог. 0 на все линии порта C

  //=== Main loop =========================================
  while True do
  begin
        PORTC := $FF;		// выводим лог. 1 на все линии порта C
        Delay(255);	  // задержка 1000 мс = 1 с
        delay(255);
        PORTC := $00;		// выводим лог. 0 на все линии порта C
        delay(255);	  // задержка 1000 мс = 1 с
  end;//Main loop
end. 

Процедура задержки "me_avr" (надо нормально написать):

unit me_avr;

{$mode objfpc}{$H-}
{$goto on}

interface

procedure Delay(MS: Byte); assembler;

implementation

procedure Delay(MS: Byte); assembler;
label __delay0;
asm
         PUSH    r31
         mov     r31, MS
__delay0:
         DEC     r31
         BRNE    __delay0
         pop     r31
end;
end.

Компиляция Ctrl+F9 (F9 не работает) заняла 0,1 сек в результате чего появились 3 файла: hex, bin и elf. Загружаем hex-файл в модель и видим, что прошивка работает:

 

(не равномерность мигания из-за подтормаживания компа)

 

Спасибо за внимание.

Политика cookie

Этот сайт использует файлы cookie для хранения данных на вашем компьютере.

Вы согласны?