Функциональные языки, такие как Haskell, LISP или Scheme, позволяют программисту быстро работать с использованием парадигмы функционального программирования . У них есть свои недостатки , но мое приложение придает большее значение эффективности работы программиста, чем эффективности самой программы.
Я хотел бы использовать функциональное программирование на микроконтроллере для управления машиной и т. Д.
Какие существуют ограничения, такие как минимальные системные ресурсы?
Какие примеры реализации этих языков доступны?
microcontroller
programming
Дж. Полфер
источник
источник
Ответы:
http://armpit.sourceforge.net/
Ты говоришь:
Использование языков высокого уровня является более эффективным использованием времени программиста, но часто может быть менее эффективным использованием вычислительных ресурсов. Для встраиваемых систем, производимых в больших объемах, стоимость и производительность часто имеют более высокий приоритет, чем усилия по разработке.
источник
Вы также можете запрограммировать контроллеры AVR на Haskell, используя Atom / Copilot, например, http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
источник
C, C ++ и Assembly очень близки к машинному языку. Используя язык более высокого уровня, вы добавляете дополнительные накладные расходы в обмен на более быструю / легкую / и т.д. разработку.
источник
Я недавно программировал ARM-доску на Python, и я думаю, что это здорово. Это плохо для контроля в реальном времени, но я делаю больше вещей, связанных с сетью, что гораздо приятнее на языке высокого уровня, чем на C.
источник
Большинство микроконтроллеров по-прежнему являются 8- и 16-разрядными устройствами (хотя это постепенно меняется). Два экземпляра языков высокого уровня (Scheme и Python), упомянутые в других ответах, до сих пор работают на 32-битных ядрах ARM. Меньшие 8- и 16-разрядные устройства (которые могут стоить всего пару долларов) не имеют достаточно ОЗУ для поддержки упомянутых языков - обычно они имеют только несколько КБ ОЗУ.
Кроме того, эти языки высокого уровня не предназначены для написания обработчиков прерываний с низкой задержкой и тому подобного. Обычно обработчик прерываний микроконтроллера вызывается сотни или тысячи раз в секунду, и каждый раз требуется выполнение своей задачи за десятки микросекунд или меньше.
источник
Возможно сделать функциональное программирование на языке Lua. На самом деле, Lua - это язык многопарадигмы; Википедия утверждает, что это «скриптовый, императивный, функциональный, объектно-ориентированный, основанный на прототипах» язык. Язык не обеспечивает единой парадигмы, но достаточно гибок, чтобы позволить программисту реализовать любую парадигму, применимую к ситуации. Это было под влиянием Схемы.
Возможности Lua включают в себя первоклассные функции , лексическую область видимости, замыкания и сопрограммы , которые полезны для функционального программирования. Вы можете увидеть, как эти функции используются на вики-сайте Lua для пользователей, где есть страница, посвященная функциональному программированию . Я также сталкивался с этим проектом Google Code , но я не использовал его (он утверждает, что находится под влиянием Haskell, другого языка, который вы упомянули).
eLua - это реализация, которая настроена для ряда плат разработки для архитектур ARM7TMDI, Cortex-M3, ARM966E-S и AVR32 и имеет открытый исходный код, так что вы можете настроить ее для своей собственной платформы. Lua реализован на ANSI C, и весь исходный код весит менее 200 КБ, поэтому вы должны иметь возможность собрать его для большинства платформ с компилятором C. Рекомендуется не менее 128 КБ флэш-памяти и 32 КБ ОЗУ. Я работаю над портом PIC32 для него (все еще на стадии «Получить плату PIC32», хотя) в данный момент.
Самое замечательное в Lua состоит в том, что он был разработан как склеивающий язык, поэтому очень легко писать расширения C для вещей, которые должны быть быстрыми (например, прерывания и т. Д.), И использовать динамические, интерпретируемые функции языка для быстрой работы. развитие в логике программы.
Lua не является чисто функциональным языком, но вы можете выполнять в нем много функционального программирования, он быстрый и небольшой ( по сравнению с другими языками сценариев ), и вам не нужно перепрошивать свое устройство, чтобы опробовать программу. Там даже интерактивный переводчик!
источник
«Есть ли способы сделать функциональное программирование с функциональным языком на MCU для решения сложных проблем?»
Да, есть способы. Но недостатком является то, что вам нужен 32-разрядный процессор, MMU, 128 МБ ОЗУ, SSD, RTOS и $$$.
Микроконтроллеры отличаются от микропроцессоров. Микроконтроллер может быть только 8-битным процессором, 1K RAM, 8K ROM, но он имеет встроенный UART, PWM, ADC и т. Д. И стоит всего 1,30 доллара.
Таким образом, вы можете использовать все языки высокого уровня, но это стоит намного дороже.
источник
Эта книга предоставляет некоторый способ сделать программирование с легким ощущением FP. http://www.state-machine.com/psicc2/
Но настоящие FP требуют способности создавать функции во время выполнения и передавать их через вашу программу. Здесь у нас есть проблема: как мы можем представить эту построенную функцию? и как мы можем эффективно выполнить эту функцию? В большой системе мы можем использовать динамическую компиляцию, которая генерирует реальный машинный код в первом приложении функции. На MCU у нас есть только RAM для реализации очень примитивных компиляторов, таких как ядро языка Forth.
Единственный способ, которым вы можете использовать FP или OOP, если предпочитаете, - это метапрограммирование : писать сложные функциональные / OOP- программы, которые генерируют программы для MCU (например, исходный код на C или LLVM IL). В этом варианте вы не ограничены ни парадигмой, ни сложностью методов программирования.
источник