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


Новости

2022.10.09

SD переименован в Радок.

Добавлена поддержка просмотра tiff-файлов, автообновления с описанием изменений в новой версии и отправка лог файлов при сбоях ПО.

Смотреть

2021.07.11

 САНПРТО было обновлено:

+ авторасстановка КТ по азимутам;

+ словесное описание расположения зданий.

Смотреть

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 для хранения данных на вашем компьютере.

Вы согласны?