Bahasa fungsional seperti Haskell, LISP, atau Skema memungkinkan seorang programmer untuk bekerja dengan cepat menggunakan paradigma pemrograman fungsional . Mereka memang memiliki inefisiensi , tetapi aplikasi saya lebih menekankan efisiensi pemrogram daripada efisiensi program itu sendiri.
Saya ingin menggunakan pemrograman fungsional pada mikrokontroler untuk melakukan kontrol mesin, dll.
Keterbatasan apa yang ada, seperti sumber daya sistem minimum?
Contoh implementasi apa dari bahasa-bahasa ini yang tersedia?
microcontroller
programming
J. Polfer
sumber
sumber
Jawaban:
http://armpit.sourceforge.net/
Kamu bilang:
Menggunakan bahasa tingkat tinggi adalah penggunaan waktu programmer yang lebih efisien, tetapi seringkali bisa menjadi penggunaan sumber daya komputasi yang kurang efisien. Untuk sistem tertanam yang diproduksi dalam volume, biaya dan kinerja sering kali lebih diprioritaskan daripada upaya pengembangan.
sumber
Anda juga dapat memprogram pengontrol AVR dengan Haskell menggunakan Atom / Copilot, misalnya http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
sumber
C, C ++, dan Assembly semuanya sangat dekat dengan bahasa mesin. Dengan menggunakan bahasa tingkat yang lebih tinggi, Anda menambahkan overhead tambahan sebagai imbalan untuk pengembangan yang lebih cepat / mudah / dll.
sumber
Saya telah memprogram papan ARM dengan Python baru-baru ini, dan saya pikir itu hebat. Ini tidak baik untuk kontrol waktu nyata, tetapi saya melakukan lebih banyak hal yang berhubungan dengan web, yang jauh lebih menyenangkan dalam bahasa tingkat tinggi daripada dalam C.
sumber
Mayoritas mikrokontroler masih perangkat 8 dan 16-bit (meskipun ini perlahan-lahan berubah). Dua contoh bahasa tingkat tinggi (Skema dan Python) yang disebutkan dalam jawaban lain sejauh ini keduanya berjalan pada core ARM 32-bit. Perangkat 8 dan 16-bit yang lebih kecil (yang mungkin hanya berharga beberapa dolar) tidak memiliki cukup RAM untuk mendukung bahasa yang disebutkan - biasanya mereka hanya memiliki beberapa KB RAM.
Juga, bahasa tingkat tinggi ini tidak dirancang untuk menulis penangan interupsi latensi rendah dan sejenisnya. Bukan hal yang aneh bagi pengendali interrupt mikrokontroler untuk dipanggil ratusan atau ribuan kali per detik, dan setiap kali diperlukan untuk melakukan tugasnya dalam puluhan mikrodetik atau kurang.
sumber
Dimungkinkan untuk melakukan beberapa pemrograman fungsional dengan bahasa Lua. Sungguh, Lua adalah bahasa paradigma mutli; Wikipedia mengklaim bahwa itu adalah bahasa 'scripting, imperatif, fungsional, berorientasi objek, berbasis prototipe'. Bahasa tidak menegakkan paradigma tunggal, tetapi sebaliknya cukup fleksibel untuk memungkinkan programmer untuk menerapkan paradigma apa pun yang berlaku untuk situasi tersebut. Sudah dipengaruhi oleh Skema.
Fitur-fitur Lua meliputi fungsi-fungsi kelas satu , pelingkupan leksikal dan penutupan dan coroutine , yang berguna untuk pemrograman fungsional. Anda dapat melihat bagaimana fitur-fitur ini digunakan pada wiki pengguna Lua, yang memiliki halaman yang didedikasikan untuk pemrograman fungsional . Saya juga menemukan proyek Google Code ini , tetapi saya belum menggunakannya (ia mengklaim dipengaruhi oleh Haskell, bahasa lain yang Anda sebutkan).
eLua adalah implementasi yang tersedia dikonfigurasi untuk sejumlah papan pengembangan untuk arsitektur ARM7TMDI, Cortex-M3, ARM966E-S dan AVR32, dan merupakan open-source sehingga Anda dapat mengkonfigurasinya untuk platform Anda sendiri. Lua diimplementasikan dalam ANSI C dan seluruh sumber berbobot di bawah 200kB, sehingga Anda harus dapat membangunnya untuk sebagian besar platform dengan kompiler C. Direkomendasikan setidaknya 128k Flash dan 32k RAM. Saya sedang mengerjakan port PIC32 untuk itu (masih dalam tahap 'Get the PIC32 board') saat ini.
Hal yang hebat tentang Lua adalah bahwa ia dirancang sebagai bahasa lem, jadi sangat mudah untuk menulis ekstensi C untuk hal-hal yang perlu cepat (seperti interupsi dll), dan menggunakan fitur dinamis, yang ditafsirkan bahasa untuk melakukan cepat pengembangan dalam logika program.
Lua bukan bahasa yang sepenuhnya fungsional, tetapi Anda dapat melakukan banyak pemrograman fungsional di dalamnya, cepat dan kecil ( dibandingkan dengan bahasa skrip lain ), dan Anda tidak perlu merombak perangkat Anda untuk mencoba suatu program. Bahkan ada penerjemah interaktif!
sumber
"Apakah ada cara untuk melakukan pemrograman fungsional dengan bahasa fungsional pada MCU untuk memecahkan masalah yang sulit?"
Ya, ada beberapa cara. Namun kekurangannya adalah Anda membutuhkan prosesor 32-bit, MMU, 128MB RAM, SSD, RTOS, dan $$$.
Mikrokontroler berbeda dari mikroprosesor. Mikrokontroler mungkin hanya CPU 8-bit, RAM 1K, ROM 8K, tetapi memiliki built in UART, PWM, ADC, dll. Dan itu hanya berharga $ 1,30.
Jadi Anda bisa menjalankan semua bahasa tingkat tinggi, tetapi membutuhkan lebih banyak biaya untuk membuatnya.
sumber
Buku ini menyediakan beberapa cara untuk melakukan pemrograman dengan nuansa FP yang ringan. http://www.state-machine.com/psicc2/
Tetapi FP nyata harus memiliki kemampuan untuk membangun fungsi dalam runtime dan meneruskannya di seluruh program Anda. Di sini kita memiliki masalah: bagaimana kita dapat mewakili fungsi yang dibangun ini? dan bagaimana kita dapat menjalankan fungsi ini secara efektif? Pada sistem yang besar, kita dapat menggunakan kompilasi dinamis yang menghasilkan kode mesin nyata pada aplikasi fungsi pertama. Pada MCU kami hanya memiliki RAM untuk mengimplementasikan kompiler yang sangat primitif seperti Forth language core.
Satu-satunya cara Anda dapat menggunakan FP atau OOP jika Anda menginginkannya adalah metaprogramming : tulis program fungsional / OOP kompleks yang menghasilkan program untuk MCU (misalnya kode sumber C, atau LLVM IL). Dalam varian ini, Anda tidak dibatasi oleh kompleksitas paradigma atau metode pemrograman.
sumber