Haskell, LISP 또는 Scheme과 같은 기능적 언어를 통해 프로그래머는 기능적 프로그래밍 패러다임을 사용하여 빠르게 작업 할 수 있습니다. 그들은 비효율적 이지만 내 응용 프로그램은 프로그램 자체의 효율성보다 프로그래머 효율성에 중점을 둡니다.
기계 제어 등을 위해 마이크로 컨트롤러에서 기능 프로그래밍을 사용하고 싶습니다.
최소 시스템 리소스와 같은 제한 사항은 무엇입니까?
이러한 언어의 구현 예는 무엇입니까?
Haskell, LISP 또는 Scheme과 같은 기능적 언어를 통해 프로그래머는 기능적 프로그래밍 패러다임을 사용하여 빠르게 작업 할 수 있습니다. 그들은 비효율적 이지만 내 응용 프로그램은 프로그램 자체의 효율성보다 프로그래머 효율성에 중점을 둡니다.
기계 제어 등을 위해 마이크로 컨트롤러에서 기능 프로그래밍을 사용하고 싶습니다.
최소 시스템 리소스와 같은 제한 사항은 무엇입니까?
이러한 언어의 구현 예는 무엇입니까?
답변:
ARMPIT SCHEME는 ARM 코어를 사용하는 RISC 마이크로 컨트롤러에서 실행되는 Scheme 언어 (Lysp의 어휘 범위 언어)에 대한 인터프리터입니다. 이 지침은 알고리즘 언어 체계 (r5rs) 개정 보고서의 설명을 기반으로하며 일부 확장 (I / O 용) 및 일부 생략 (MCU 메모리에 적합)이 있습니다. 또한 멀티 태스킹 및 멀티 프로세싱을 지원하도록 설계되었습니다. Armpit Scheme은 제어 및 계측 과정의 학생 프로젝트 또는 마이크로 컨트롤러가 필요한 캡 스톤 설계 과정을 포함하여 교육 환경에 적합 할 것으로 예상됩니다. 이는 MCU (예 : BASIC 및 FORTH)에 사용할 수있는 다양한 해석 언어를 풍부하게하며 MCU 기반 바이트 코드 해석기 (예 : Scheme 또는 Java) 및 컴파일 된 언어 (예 : C)의 대안이 될 수 있습니다.
http://armpit.sourceforge.net/
당신은 말합니다 :
C, C ++, 어셈블리 등을 사용하는 것은 Haskell, LISP 또는 Scheme과 같은 언어에 비해 매우 비효율적입니다.
고급 언어를 사용하는 것이 프로그래머 시간을보다 효율적으로 사용하지만 컴퓨팅 리소스를 덜 효율적으로 사용하는 경우가 종종 있습니다. 대량으로 제조 된 임베디드 시스템의 경우 비용과 성능이 개발 노력보다 우선 순위가 높습니다.
Atom / Copilot을 사용하여 Haskell로 AVR 컨트롤러를 프로그래밍 할 수도 있습니다 (예 : http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
C, C ++ 및 Assembly는 모두 기계어에 매우 가깝습니다. 더 높은 수준의 언어를 사용하면 더 빠르고 쉬운 개발 등의 대가로 추가 오버 헤드가 추가됩니다.
대부분의 마이크로 컨트롤러는 여전히 8 비트 및 16 비트 디바이스입니다 (이는 느리게 변경되지만). 지금까지 다른 답변에서 언급 한 두 가지 고급 언어 인스턴스 (Scheme 및 Python)는 모두 32 비트 ARM 코어에서 실행됩니다. 더 작은 8 비트 및 16 비트 장치 (몇 달러 정도만들 수 있음)에는 언급 된 언어를 지원하기에 충분한 RAM이 없으며 일반적으로 몇 KB의 RAM 만 있습니다.
또한 이러한 고급 언어는 지연 시간이 짧은 인터럽트 처리기 등을 작성하도록 설계되지 않았습니다. 마이크로 컨트롤러 인터럽트 핸들러가 초당 수백 또는 수천 번 호출되는 것은 드문 일이 아니며 매번 수십 마이크로 초 이하로 작업을 수행하는 데 필요합니다.
Lua 언어로 일부 기능 프로그래밍을 수행 할 수 있습니다. 실제로 루아는 다중 패러다임 언어입니다. Wikipedia 는이 언어가 '스크립팅, 명령형, 기능성, 객체 지향, 프로토 타입 기반'언어라고 주장합니다. 이 언어는 단일 패러다임을 강요하지 않지만 프로그래머가 상황에 적용 가능한 패러다임을 구현할 수있을 정도로 유연합니다. Scheme의 영향을 받았습니다.
Lua의 기능에는 기능 프로그래밍에 유용한 일류 함수 , 어휘 범위 및 클로저 및 코 루틴 이 포함됩니다. 기능 프로그래밍 전용 페이지 가 있는 Lua 사용자 위키에서 이러한 기능이 어떻게 사용되는지 확인할 수 있습니다 . 나는 또한 이 Google 코드 프로젝트 를 보았지만 그것을 사용하지 않았습니다 (당신이 언급 한 다른 언어 인 Haskell의 영향을 받았다고 주장합니다).
eLua 는 ARM7TMDI, Cortex-M3, ARM966E-S 및 AVR32 아키텍처를위한 여러 개발 보드 용으로 구성 할 수있는 구현이며, 오픈 소스이므로 자신의 플랫폼에 맞게 구성 할 수 있습니다. Lua는 ANSI C로 구현되며 전체 소스의 무게는 200kB 미만이므로 C 컴파일러를 사용하여 대부분의 플랫폼에서 빌드 할 수 있습니다. 최소 128k 플래시 및 32k RAM이 권장됩니다. 현재 PIC32 포트에서 작업 중입니다 (여전히 'PIC32 보드 가져 오기'단계).
Lua의 가장 큰 장점은 접착제 언어로 설계되었으므로 인터럽트 등의 빠른 속도를 필요로하는 항목에 대해 C 확장을 작성하고 언어의 동적이고 해석 된 기능을 사용하여 빠르게 수행 할 수 있다는 점입니다. 프로그램 로직 개발.
Lua는 순전히 기능적인 언어는 아니지만 많은 기능적 프로그래밍을 수행 할 수 있으며 빠르고 다른 (스크립팅 언어와 비교하여) 작 으며 프로그램을 시험하기 위해 장치를 다시 플래시 할 필요가 없습니다. 대화식 통역사도 있습니다!
"어려운 문제를 해결하기 위해 MCU에서 기능 언어로 기능 프로그래밍을 수행하는 방법이 있습니까?"
네, 방법이 있습니다. 그러나 단점은 32 비트 프로세서, MMU, 128MB RAM, SSD, RTOS 및 $$$가 필요하다는 것입니다.
마이크로 컨트롤러는 마이크로 프로세서와 다릅니다. 마이크로 컨트롤러는 8 비트 CPU, 1K RAM, 8K ROM 일 수 있지만 UART, PWM, ADC 등이 내장되어 있으며 1.30 달러에 불과합니다.
따라서 모든 고급 언어를 실행할 수 있지만 비용이 많이 듭니다.
이 책은 가벼운 느낌의 FP로 프로그래밍하는 방법을 제공합니다. http://www.state-machine.com/psicc2/
그러나 실제 FP는 런타임에 함수를 구성하여 프로그램 전체에 전달할 수 있어야합니다. 여기에 문제가 있습니다 :이 생성 된 함수를 어떻게 표현할 수 있습니까? 어떻게이 기능을 효과적으로 실행할 수 있습니까? 대규모 시스템에서는 첫 번째 함수 애플리케이션에서 실제 머신 코드를 생성하는 동적 컴파일을 사용할 수 있습니다. MCU에는 Forth 언어 코어와 같은 매우 원시적 인 컴파일러를 구현할 수있는 RAM 만 있습니다.
당신이이입니다 선호하는 경우 유일한 방법은 당신이 FP 또는 OOP를 사용할 수있는 메타 프로그래밍 : 쓰기 복잡한 기능 /의 OOP의 MCU를위한 프로그램 생성 프로그램 (예를 들어 C 소스 코드, 또는 LLVM IL)를. 이 변형에서는 패러다임 또는 프로그래밍 방법의 복잡성에 의해 제한되지 않습니다.