Вот появилось желание написать небольшой проектик для себя с применением микроконтроллера. В CodeVisionAVR команды не подсвечиваются по Ctrl+Пробел, да и Си что-то начал забывать, вспоминать - лень... Конечно, вспомнить Си - это 10-30 минут, но лень... Поэтому, было решено начать проект в родной IDE Lazarus, она же кросс-компилируемая! Правда, понять, как включить avr в Lazarus, чтоб компилировался hex-файл ушло 3 дня :), поэтому пишу здесь, чтоб другие не мучались, а сразу пользовались.


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

  1. Итак, скачиваем отсюда и запускаем последний релиз замечательной программки fpcupdeluxe нужной разрядности и соответствующей ОСи;

  2. Определяем директорию, куда будут скачаны исходники и собраны бинарные файлы (напр., c:\fpcupdeluxe);

  3. На вкладке "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

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

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


Упрощение установки компилятора

Как то 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)


  1. easimonenko
    19.12.2022 15:46
    +5

    Интересно, ещё не видел, чтобы программировали микроконтроллеры на Pascal! Но можно кое-что улучшить по тексту: 1) Эта статья категории туториал (нужно выбрать в редакторе статьи ). 2) Неплохо бы в начале статьи обозначить пререквизиты (какое ПО, ОС, среда, контроллер).


    1. Javian
      19.12.2022 16:00
      +4

      А ведь идея супер. Паскаль учат в школе и какие-то знания всплывут, когда человек заинтересуется какой-то Ардуино самоделкой. Но там в коде с паскалем мало общего.

      И вообще в школе было бы более наглядным изучение компьютеров при демонстрации выполнения кода на светодиодах Ардуино платы.


      1. easimonenko
        19.12.2022 16:03
        +1

        Наверное что-то в этом есть. Но мне интересно стало, насколько развито программирование контроллеров на Pascal?


        1. Javian
          19.12.2022 16:26
          +1

          Явно всё останавливается на использовании библиотек, если будет подключено к выводам что-то сложнее светодиодов


          1. defecator
            19.12.2022 17:02
            +2

            Есть прекрасный компилятор Pascal с огромной тучей библиотек

            https://www.mikroe.com/mikropascal-avr


            1. DanilinS
              19.12.2022 21:38

              Согласен. Вещь интересная. Я правда пользователь "mikropascal for stm32". Написал достаточно много.


            1. dalfy Автор
              21.12.2022 19:10

              Я выбрал Lazarus из-за того, что он бесплатный, а библиотеки напишется, если им начнут пользоваться


          1. easimonenko
            19.12.2022 17:03
            +3

            Поискал на GitHub, нашелся один человек, явно увлекающийся Pascal на AVR.


            1. dalfy Автор
              21.12.2022 19:11

              Благодарю, не нашёл когда искал. Я только начинаю с ним разбираться


    1. pharo
      19.12.2022 16:48
      +4

      Интересно, ещё не видел, чтобы программировали микроконтроллеры на Pascal

      Не в качестве рекламы, но есть к примеру mikroPascal PRO for AVR

      P.S. Также контроллеры можно и много ещё на чём программировать — Basic, Forth, Lisp…
      Некоторый топик Lazarus+Arduino
      Кроме того, были и пробы «программирования» AVR в HiAsm Пакет AVR (а сама Hiasm написана на Pascal)


      1. easimonenko
        19.12.2022 17:05
        +2

        Ну, да. Вот например http://www.ulisp.com/ Настоящий, но урезанный интерпретатор Lisp для Arduino на AVR и ARM.


      1. dalfy Автор
        21.12.2022 19:15

        Lazarus бесплатен. А Hiasm я видел, сейчас он уже стал большим и в нём опять нужно разбираться, запоминать свои нюансы...


  1. easimonenko
    19.12.2022 15:47
    +1

    В итоге не увидел: Ваше резюме по итогу? Стоило ли оно того? Или чисто Just for Fun?


    1. dalfy Автор
      21.12.2022 19:19

      Пока просто для удовольствия, пока библиотеки не появиться мало-мальски пригодные для быстрого проектирования.


  1. mrkaban
    20.12.2022 09:04

    ух, IDE Lazarus... помню, несколько программ в этой среде разработки написал и в итоге переписал на другом языке. Причина? Решил поставить новую версию лазаруса, поставил, добавил нужные плагины, нажал пересобрать IDE и ОП! Она не запускается. Удовольствие... сплошное...


  1. sami777
    20.12.2022 11:45

    Прикольно! Не знал, что протеусу можно хексы скармливать. Раньше только ельфы в него грузил.


    1. dalfy Автор
      21.12.2022 19:17

      Да уж лет 7 как можно