4 октября 2012 г.

Примеры программ для RL78 и GCC

Часто, когда сталкиваешься с новым МК, возникают затруднения в самом начале (с базовыми модулями). Чаще всего, такое случается из-за не очень внимательного чтения документации, непривычной организации той самой документации или из-за банальных опечаток в программе. Особенно сложно бороться с такими ситуациями в отсутствие отладчика.

Дабы облегчить начало работы с МК RL78, создал пару примеров работы. Они не претендуют на полноту и универсальность, но помогут поморгать светодиодом, запустить прерывания и вывести строку на UART.

Примеры расположены на github: https://github.com/msalov/rl78-samples-R5F100SLAFB

Приветствуются отзывы, пожелания и исправления. Всё это можно оставлять здесь (в комментариях) или в виде issues на github: https://github.com/msalov/rl78-samples-R5F100SLAFB/issues

6 комментариев:

  1. Здравствуйте!
    А нет ли у Вас примеров для работы с этими процессорами на ассемблере?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте!

      Есть очень простой пример мигания светодиодом для RL78/G10 на ассемблере: https://gist.github.com/msalau/b5ad45e1441d97d277f50dadd279124e

      Могу ещё покопаться, может что найдётся посложнее для полноты картины.

      Удалить
    2. Спасибо огромное за отклик!
      Позвольте пару вопросов как более опытному:
      После компиляции получиться out файл. Для компоновщика нужно что-нибудь писать? (я планирую начать с изучения GCC)
      Программка коротенькая:)Стек и периферия в каком порядке должна инициализацию проходить?
      Буду рад, если выложите программу подлиннее-посерьёзнее:)

      Удалить
    3. По ссылке найдёте довольно аскетичный пример на ассемблере для RL78G/10
      https://github.com/msalau/rl78g10-soft-start

      Обычно порядок инициализации таков:
      1. Стек
      2. Глобальные и статические переменные
      3. Периферия.

      1 и 2 делается в так называемом стартап коде, он обычно находится в файлах startup.S или crt0.S. В самом конце стартап код вызывает функцию main в которой вы делаете что вашей душе угодно, т.е. настраиваете периферию и так далее.

      В проекте по ссылке 2 файла на ассемблере, они компилируются раздельно а потом компонуются. Компоновщику надо знать где и какая память есть у микроконтроллера, для этих целей служит специальный скрипт, который у меня в проекте называется rl78-R5F10Y16ASP.ld

      Сборка:
      rl78-elf-gcc -c -o main.o main.S
      rl78-elf-gcc -c -o crt0.o crt0.S
      Компоновка:
      rl78-elf-gcc -T rl78-R5F10Y16ASP.ld -nostartfiles -nostdlib -o soft-start.elf main.o crt0.o

      Создание образа для программатора:
      rl78-elf-objcopy -O srec soft-start.elf soft-start.mot

      Удалить
    4. Спасибо большое ещё раз! Уже скачал.
      Ещё, если Вас не затруднит, поясните, чем MOT файл отличается от BIN?

      Удалить
    5. BIN - это содержимое памяти, а MOT - это контейнер для BIN, более пригодный для передачи и хранения. Их содержимое ничем не отличается, отличается лишь форма хранения. Описание MOT (Motorola S-record) - https://en.wikipedia.org/wiki/SREC_%28file_format%29

      Удалить