Об эти выходные
Говорят, что верблюд это скаковая лошадь, которую дизайнил комитет.
В языке Ада, точнее, в стандартной библиотеке, существует важная часть, которую дизайнят вот совсем комитетом - это embedded для bare bone boards. Ограниченные ресурсы разных платформ каждая по-своему отсекает те или иные воможности языка, где-то и строки в heap это перебор, а где-то -- исключения. Поэтому тот самый комитет для embedded постарался собрать общий знаменатель, который бы одинаково хорошо подходил под усредненные задачи. Этот знаменатель называется "профили", и он описывает, что можно, а что нельзя из языка использовать на данной платформе.
Раньше эти профили назывались креативно, например, zero-footprint, Ravenscar, Jorvik, с недавнего времени чуть более скучно: embedded, light, light-tasking, но всё равно комитет не может угадать с запросами для всех - одним нужно что-то типа turbopascal на микроконтроллере, другому -- полновесный рантайм с задачами (потоками). Собственно, потоки и коммуникация между ними это одна самых сложных задач в смысле жырности потребного рантайма.
Ну а там, где подходящего профиля нет, а реализовывать весь профиль неохота, приходится закатить рукава и писать с нуля каждый раз. Один из таких повторно пригодных легковесных рантаймов, но с поддержкой задач/потоков и целиком на Ada, начал писать Вадим https://github.com/godunko, а я взялся портировать её на доску STM32F4 DISCO, которая была под рукой, потому как она достаточно популярная.
Это был мой первый опыт работы с crates в Alire в таком объеме, поэтому времени потрачено было больше, чем нужно, однако всё завелось, светодиод (из примеров) замигал успешно. В целом могу сказать, что ARM Cortex-M и Ада прямо-таки созданы друг для друга. Минимальный рантайм, который инициализирует ядро и периферию + код с планировщиком, где одна задача зажигает диод, а вторая его гасит, занял в прошивке около 2кб.
В итоге я отправил пулл-реквесты, а Вадим их принял, так что в коллекцию добавилась поддержка DISCO. Код можно увидеть тут (это планировщик и те самые примеры) и тут (это рантайм + инициализации). Отдельно в Alire довелось отправить issue по обнаруженному расхождению в поведениях для удаленных и локальных репозиториев.
У самого Вадима основная плата это Cortex-M3, на ней он строит шестинога, подкрепляя обратную кинематику расчетами в Octave.
Говорят, что верблюд это скаковая лошадь, которую дизайнил комитет.
В языке Ада, точнее, в стандартной библиотеке, существует важная часть, которую дизайнят вот совсем комитетом - это embedded для bare bone boards. Ограниченные ресурсы разных платформ каждая по-своему отсекает те или иные воможности языка, где-то и строки в heap это перебор, а где-то -- исключения. Поэтому тот самый комитет для embedded постарался собрать общий знаменатель, который бы одинаково хорошо подходил под усредненные задачи. Этот знаменатель называется "профили", и он описывает, что можно, а что нельзя из языка использовать на данной платформе.
Раньше эти профили назывались креативно, например, zero-footprint, Ravenscar, Jorvik, с недавнего времени чуть более скучно: embedded, light, light-tasking, но всё равно комитет не может угадать с запросами для всех - одним нужно что-то типа turbopascal на микроконтроллере, другому -- полновесный рантайм с задачами (потоками). Собственно, потоки и коммуникация между ними это одна самых сложных задач в смысле жырности потребного рантайма.
Ну а там, где подходящего профиля нет, а реализовывать весь профиль неохота, приходится закатить рукава и писать с нуля каждый раз. Один из таких повторно пригодных легковесных рантаймов, но с поддержкой задач/потоков и целиком на Ada, начал писать Вадим https://github.com/godunko, а я взялся портировать её на доску STM32F4 DISCO, которая была под рукой, потому как она достаточно популярная.
Это был мой первый опыт работы с crates в Alire в таком объеме, поэтому времени потрачено было больше, чем нужно, однако всё завелось, светодиод (из примеров) замигал успешно. В целом могу сказать, что ARM Cortex-M и Ада прямо-таки созданы друг для друга. Минимальный рантайм, который инициализирует ядро и периферию + код с планировщиком, где одна задача зажигает диод, а вторая его гасит, занял в прошивке около 2кб.
В итоге я отправил пулл-реквесты, а Вадим их принял, так что в коллекцию добавилась поддержка DISCO. Код можно увидеть тут (это планировщик и те самые примеры) и тут (это рантайм + инициализации). Отдельно в Alire довелось отправить issue по обнаруженному расхождению в поведениях для удаленных и локальных репозиториев.
У самого Вадима основная плата это Cortex-M3, на ней он строит шестинога, подкрепляя обратную кинематику расчетами в Octave.