Функциональное программирование с MCU (s)

Функциональные языки , такие как Haskell, LISP или Scheme, позволяют программисту быстро работать, используя функциональное программирование парадигма. У них действительно есть неэффективность , но мое приложение уделяет больше внимания производительности программиста, чем эффективность самой программы.

Я хотел бы использовать функциональное программирование на микроконтроллере для управления машиной и т. д.

Какие существуют ограничения, например минимальные системные ресурсы?
Какие примеры реализации этих языков доступны?

12 голосов | спросил J. Polfer 27 Jpm1000000pmThu, 27 Jan 2011 18:54:50 +030011 2011, 18:54:50

6 ответов


11
  

ARMPIT SCHEME является интерпретатором для   язык схемы (лексически-скопированный   диалект Лиспа), который работает на RISC   микроконтроллеры с сердечником ARM. это   основанный на описании в   Пересмотренный отчет по алгоритмической   Языковая схема (r5rs), с некоторыми   расширения (для ввода-вывода) и некоторые   пропусков (для размещения в памяти MCU).   Он также предназначен для поддержки   многозадачность и многопроцессорность.   Ожидается, что схема подмышки будет хорошо   подходит для образовательных учреждений,   включая студенческие проекты на курсах   по контролю и контрольно-измерительной аппаратуре, или   курсы проектирования капота, где   требуются микроконтроллеры. это   предназначенный для обогащения спектра   интерпретируемых языков, доступных для   MCU (например, BASIC и FORTH) и могут быть   альтернатива байт-коду на основе MCU   переводчики (например, для Схемы или Java)   и на скомпилированные языки (например, C).

http://armpit.sourceforge.net/

Вы говорите:

  

Использование C, C ++, сборка и т. д. довольно неэффективно по сравнению с такими языками, как Haskell, LISP или Scheme

Использование языков высокого уровня - это более эффективное использование времени программиста, но часто может быть менее эффективным использованием вычислительных ресурсов. Для встроенных систем, изготовленных по объему, стоимость и производительность часто являются более приоритетными, чем усилия разработчиков.

ответил Toby Jaffey 27 Jpm1000000pmThu, 27 Jan 2011 19:04:18 +030011 2011, 19:04:18
7

Вы также можете программировать контроллеры AVR с помощью Haskell с использованием Atom /Copilot, например http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/

ответил Peter 11 TueEurope/Moscow2012-12-11T20:20:42+04:00Europe/Moscow12bEurope/MoscowTue, 11 Dec 2012 20:20:42 +0400 2012, 20:20:42
5

C, C ++ и Assembly все очень близки к машинным. Используя более высокий уровень языка, вы добавляете дополнительные накладные расходы в обмен на более быструю /легкую /иную разработку.

ответил pfyon 27 Jpm1000000pmThu, 27 Jan 2011 19:11:48 +030011 2011, 19:11:48
3

Большинство микроконтроллеров по-прежнему являются 8 и 16-разрядными устройствами (хотя это медленно меняется). Два экземпляра языков более высокого уровня (Scheme и Python), упомянутые в других ответах до сих пор, работают на 32-битных ядрах ARM. Меньшие 8 и 16-разрядные устройства (которые могут стоить всего пару долларов) не имеют достаточного количества ОЗУ для поддержки упомянутых языков - обычно у них только несколько КБ ОЗУ.

Кроме того, эти языки более высокого уровня не предназначены для записи обработчиков прерываний с низкой задержкой и т. п. Это не редкость для обработчика прерываний микроконтроллера, вызываемого сотнями или тысячами раз в секунду, и каждый раз, когда требуется выполнить свою задачу в десятки микросекунд или меньше.

ответил tcrosley 27 Jpm1000000pmThu, 27 Jan 2011 20:22:09 +030011 2011, 20:22:09
3

Можно выполнить некоторое функциональное программирование с помощью языка Lua. Действительно, Lua является языком mutli-парадигмы; Wikipedia утверждает, что это «сценарий, императив, функциональный, объектно-ориентированный прототип основанный на языке. Язык не применяет ни одну парадигму, а скорее достаточно гибкий, чтобы позволить программисту реализовать любую парадигму применительно к ситуации. На это повлияла схема.

Функции Lua включают первоклассные функции , лексическое определение и закрытие и сопрограммы , которые полезны для функционального программирования. Вы можете увидеть, как эти функции используются в вики пользователей Lua, где страница, посвященная функциональному программированию . Я также встретил этот проект Google Code , но я его не использовал (он утверждает, что на него повлиял Haskell, другой язык, о котором вы говорили).

eLua - это реализация, которая доступна для нескольких плат разработки для ARM7TMDI, Cortex-M3 , ARM966E-S и AVR32, а также с открытым исходным кодом, поэтому вы можете настроить его для своей собственной платформы. Lua реализован в ANSI C, а весь источник весит менее 200 КБ, поэтому вы можете построить его для большинства платформ с компилятором C. Рекомендуется не менее 128 Кбайт Flash и 32 КБ оперативной памяти. Тем не менее, я работаю над портом PIC32 (все еще на стадии «Get the PIC32 board»).

Самое замечательное в Lua заключается в том, что он был разработан как язык клей, поэтому очень легко писать C-расширения для вещей, которые должны быть быстрыми (например, прерывания и т. д.) и использовать динамические интерпретируемые функции языка для быстрого развития в логике программы.

Lua не является чисто функциональным языком, но в нем вы можете выполнять много функционального программирования, это быстро и мало ( по сравнению с другими языками сценариев ), и вам не нужно перепрограммировать устройство, чтобы опробовать программу. Есть даже интерактивный интерпретатор!

ответил Kevin Vermeer 28 Jpm1000000pmFri, 28 Jan 2011 18:49:25 +030011 2011, 18:49:25
1

«Существуют ли способы функционального программирования с функциональным языком на MCU для решения сложных проблем?»

Да, есть способы. Но недостатком является необходимость 32-разрядного процессора, MMU, 128 МБ ОЗУ, SSD, RTOS и $$$.

Микроконтроллеры отличаются от микропроцессоров. Микроконтроллер может быть только 8-разрядным процессором, 1K RAM, 8K ROM, но он имеет встроенный UART, PWM, ADC и т. Д. И он стоит всего 1,30 доллара.

Таким образом, вы можете использовать все языки высокого уровня, но это намного дороже.

ответил Robert 27 Jpm1000000pmThu, 27 Jan 2011 21:45:13 +030011 2011, 21:45:13

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132