Вот появилось желание написать небольшой проектик для себя с применением микроконтроллера. В CodeVisionAVR команды не подсвечиваются по Ctrl+Пробел, да и Си что-то начал забывать, вспоминать - лень... Конечно, вспомнить Си - это 10-30 минут, но лень... Поэтому, было решено начать проект в родной IDE Lazarus, она же кросс-компилируемая! Правда, понять, как включить avr в Lazarus, чтоб компилировался hex-файл ушло 3 дня :), поэтому пишу здесь, чтоб другие не мучались, а сразу пользовались.
Использование кросс-компиляции было основано на этой статье, в дальнейшем выкинуто всё лишнее (с моей точки зрения). Показываю как это заработало у меня.
Итак, скачиваем отсюда и запускаем последний релиз замечательной программки fpcupdeluxe нужной разрядности и соответствующей ОСи;
Определяем директорию, куда будут скачаны исходники и собраны бинарные файлы (напр., c:\fpcupdeluxe);
На вкладке "cross" и дополнительно по кнопке "Setup+" устанавливаем CPU - "AVR" и OS - "embedded". Устанавливаем - "Install compiler" (в каталоге появится папка "cross" с подпапками "bin" и "lib").
4. В процессе закачки и последующей сборки fpcupdeluxe ругнется на отсутствие утилит для сборки кросс-компилятора и предложит их скачать ("The building of a crosscompiler failed due to missing cross-tools. Fpcupdeluxe can try to download them if available! Do you want to continue?")
Соглашаемся и повторяем процесс сборки.
5. Для возможности компиляции hex-файлов скачиваем ppu микроконтроллеров, на вкладке "subarch" для каждого целевого процессора (в каталоге "fpc" появится папка "units"). Микроконтроллеры разделены на целевые процессоры, например ATmega8 находится в папке avr4, а ATmega328p находится в папке avr5.
6. Настраиваем IDE Lazarus. Для указания путей к бинарникам открываем настройки Tools --> Options --> Environment --> Files: для Compiler executable выбрать C:\fpcupdeluxe\fpc\bin\x86_64-win64\ppcross386.exe (предупреждение игнорировать):
Настройка целевой платформы в IDE Lazarus
Для настройки целевой платформы, для которого будет генериться hex-файл, необходимо указать ОС на которой будет выполняться код - embedded; семейство процессоров - avr и целевой процессор можно определить по папке (в общей папке "units") в которой находится требуемый микроконтроллер, например, ATmega328p находится в папке avr5, значит, целевой процессор выбираем avr5:
А так же выбрать конкретный процессор для программирования в "Параметры пользователя":
Упрощение установки компилятора
Как то 830 Мб в папке fpcupdeluxe меня напрягло и я решил сделать отдельную установочную папку размером в 50 Мб (3 Мб в архиве). В параметрах IDE нужно указать распакованную папку:
Если Вы распаковали в другую папку, то нужно поправить в блокноте файл "fpc.cfg", который лежит в корне AVR:
Тестирование
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-файл в модель и видим, что прошивка работает:
Спасибо за внимание.
Комментарии (17)
easimonenko
19.12.2022 15:47+1В итоге не увидел: Ваше резюме по итогу? Стоило ли оно того? Или чисто Just for Fun?
dalfy Автор
21.12.2022 19:19Пока просто для удовольствия, пока библиотеки не появиться мало-мальски пригодные для быстрого проектирования.
mrkaban
20.12.2022 09:04ух, IDE Lazarus... помню, несколько программ в этой среде разработки написал и в итоге переписал на другом языке. Причина? Решил поставить новую версию лазаруса, поставил, добавил нужные плагины, нажал пересобрать IDE и ОП! Она не запускается. Удовольствие... сплошное...
easimonenko
Интересно, ещё не видел, чтобы программировали микроконтроллеры на Pascal! Но можно кое-что улучшить по тексту: 1) Эта статья категории туториал (нужно выбрать в редакторе статьи ). 2) Неплохо бы в начале статьи обозначить пререквизиты (какое ПО, ОС, среда, контроллер).
Javian
А ведь идея супер. Паскаль учат в школе и какие-то знания всплывут, когда человек заинтересуется какой-то Ардуино самоделкой. Но там в коде с паскалем мало общего.
И вообще в школе было бы более наглядным изучение компьютеров при демонстрации выполнения кода на светодиодах Ардуино платы.
easimonenko
Наверное что-то в этом есть. Но мне интересно стало, насколько развито программирование контроллеров на Pascal?
Javian
Явно всё останавливается на использовании библиотек, если будет подключено к выводам что-то сложнее светодиодов
defecator
Есть прекрасный компилятор Pascal с огромной тучей библиотек
https://www.mikroe.com/mikropascal-avr
DanilinS
Согласен. Вещь интересная. Я правда пользователь "mikropascal for stm32". Написал достаточно много.
dalfy Автор
Я выбрал Lazarus из-за того, что он бесплатный, а библиотеки напишется, если им начнут пользоваться
easimonenko
Поискал на GitHub, нашелся один человек, явно увлекающийся Pascal на AVR.
dalfy Автор
Благодарю, не нашёл когда искал. Я только начинаю с ним разбираться
pharo
Не в качестве рекламы, но есть к примеру mikroPascal PRO for AVR
P.S. Также контроллеры можно и много ещё на чём программировать — Basic, Forth, Lisp…
Некоторый топик Lazarus+Arduino
Кроме того, были и пробы «программирования» AVR в HiAsm Пакет AVR (а сама Hiasm написана на Pascal)
easimonenko
Ну, да. Вот например http://www.ulisp.com/ Настоящий, но урезанный интерпретатор Lisp для Arduino на AVR и ARM.
dalfy Автор
Lazarus бесплатен. А Hiasm я видел, сейчас он уже стал большим и в нём опять нужно разбираться, запоминать свои нюансы...