Języki funkcjonalne, takie jak Haskell, LISP lub Scheme, umożliwiają programistom szybką pracę przy użyciu funkcjonalnego paradygmatu programowania . Mają swoje nieefektywności , ale moja aplikacja kładzie większy nacisk na wydajność programisty niż na wydajność samego programu.
Chciałbym użyć programowania funkcjonalnego na mikrokontrolerze do sterowania maszyną itp.
Jakie są ograniczenia, takie jak minimalne zasoby systemowe?
Jakie przykładowe implementacje tych języków są dostępne?
microcontroller
programming
J. Polfer
źródło
źródło
Odpowiedzi:
http://armpit.sourceforge.net/
Mówisz:
Używanie języków wysokiego poziomu jest bardziej wydajnym wykorzystaniem czasu programisty, ale często może być mniej wydajnym wykorzystaniem zasobów obliczeniowych. W przypadku systemów wbudowanych produkowanych w dużych ilościach koszt i wydajność mają często wyższy priorytet niż prace rozwojowe.
źródło
Możesz także programować kontrolery AVR za pomocą Haskell za pomocą Atom / Copilot, na przykład http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
źródło
C, C ++ i asembler są bardzo zbliżone do języka maszynowego. Używając języka wyższego poziomu, dodajesz dodatkowy narzut w zamian za szybszy / łatwiejszy / itp. Rozwój.
źródło
Ostatnio programowałem tablicę ARM w Pythonie i myślę, że jest świetna. Nie nadaje się do kontroli w czasie rzeczywistym, ale robię więcej rzeczy związanych z siecią, co jest o wiele przyjemniejsze w języku wysokiego poziomu niż w C.
źródło
Większość mikrokontrolerów to nadal urządzenia 8 i 16-bitowe (choć powoli się to zmienia). Dwa wystąpienia języków wyższego poziomu (Schemat i Python) wspomniane w innych odpowiedziach do tej pory działają na 32-bitowych rdzeniach ARM. Mniejsze 8 i 16-bitowe urządzenia (które mogą kosztować tylko kilka dolarów) nie mają wystarczającej ilości pamięci RAM do obsługi wymienionych języków - zazwyczaj mają tylko kilka KB pamięci RAM.
Ponadto te języki wyższego poziomu nie są przeznaczone do pisania programów obsługi przerwań o niskim opóźnieniu i tym podobnych. Nie jest niczym niezwykłym, że moduł obsługi przerwań mikrokontrolera jest wywoływany setki lub tysiące razy na sekundę i za każdym razem wymagany do wykonania swojego zadania w dziesiątkach mikrosekund lub mniej.
źródło
Możliwe jest programowanie funkcjonalne w języku Lua. Naprawdę, Lua jest językiem paradygmatu; Wikipedia twierdzi, że jest to język „skryptowy, imperatywny, funkcjonalny, obiektowy, oparty na prototypach”. Język nie wymusza pojedynczego paradygmatu, ale jest wystarczająco elastyczny, aby pozwolić programiście na wdrożenie dowolnego paradygmatu mającego zastosowanie w danej sytuacji. Wpływ na to miał Schemat.
Funkcje Luy obejmują najwyższej klasy funkcje , zakresy leksykalne oraz zamknięcia i coroutines , które są przydatne do programowania funkcjonalnego. Możesz zobaczyć, jak te funkcje są używane na wiki użytkowników Lua, która ma stronę poświęconą programowaniu funkcjonalnemu . Natknąłem się również na ten projekt Google Code , ale go nie użyłem (twierdzi, że ma na niego wpływ Haskell, inny język, o którym wspomniałeś).
eLua jest implementacją dostępną skonfigurowaną dla wielu płyt programistycznych dla architektur ARM7TMDI, Cortex-M3, ARM966E-S i AVR32, i jest open source, dzięki czemu możesz skonfigurować ją dla własnej platformy. Lua jest zaimplementowana w ANSI C, a całe źródło waży poniżej 200kB, więc powinieneś być w stanie zbudować ją dla większości platform z kompilatorem C. Zalecane jest co najmniej 128 kB Flasha i 32 kB RAM. Obecnie pracuję nad portem PIC32 (wciąż na etapie „Pobierz kartę PIC32”).
Wspaniałą rzeczą w Lua jest to, że został zaprojektowany jako język kleju, więc bardzo łatwo jest pisać rozszerzenia C dla rzeczy, które muszą być szybkie (takie jak przerwania itp.), I używać dynamicznych, interpretowanych funkcji języka, aby robić szybkie rozwój w logice programu.
Lua nie jest językiem czysto funkcjonalnym, ale można w nim wykonać wiele funkcjonalnych programów, jest szybki i mały (w porównaniu do innych języków skryptowych ) i nie trzeba ponownie instalować urządzenia, aby wypróbować program. Jest nawet interaktywny tłumacz!
źródło
„Czy istnieją sposoby programowania funkcjonalnego za pomocą funkcjonalnego języka na MCU, aby rozwiązać trudne problemy?”
Tak, są sposoby. Ale wadą jest to, że potrzebujesz procesora 32-bitowego, MMU, 128 MB RAM, SSD, RTOS i $$$.
Mikrokontrolery różnią się od mikroprocesorów. Mikrokontroler może być tylko 8-bitowym procesorem, 1K RAM, 8K ROM, ale ma wbudowane UART, PWM, ADC itp. I kosztuje tylko 1,30 USD.
Możesz mieć uruchomione wszystkie języki wysokiego poziomu, ale zrobienie tego kosztuje o wiele więcej.
źródło
Ta książka zapewnia programowanie z lekkim wyczuciem FP. http://www.state-machine.com/psicc2/
Ale prawdziwe FP wymagają umiejętności konstruowania funkcji w czasie wykonywania i przekazywania ich w całym programie. Mamy tutaj problem: jak możemy przedstawić tę skonstruowaną funkcję? i jak możemy skutecznie wykonać tę funkcję? W dużym systemie możemy użyć kompilacji dynamicznej, która generuje prawdziwy kod maszynowy w aplikacji pierwszej funkcji. Na MCU mamy tylko pamięć RAM do implementacji bardzo prymitywnych kompilatorów, takich jak rdzeń języka Forth.
Jedynym sposobem na użycie FP lub OOP, jeśli wolisz, jest metaprogramowanie : pisanie złożonych programów funkcjonalnych / OOP , które generują programy dla MCU (na przykład kod źródłowy C lub LLVM IL). W tym wariancie nie ogranicza Cię złożoność paradygmatu ani metod programowania.
źródło