Functional MCU programming
#0: Development environment
Metasepi Project / Kiwamu Okabe
Who am I ?
☆ http://www.masterq.net/
☆ Twitter: @master_q
☆ Organizer of Metasepi Project
☆ A developer of Ajhc Haskell co...
Why functional lang for MCU?
☆ We will live in IoT world
☆ Can't debug IoT device on field
☆ Should avoid runtime error
☆ ...
Overview
MCU (Microcontroller)
Many architecture are on the earth.
MCU: ARM Cortex-M
☆ Major
☆ 32bit
☆ Large memory size (> 20kB)
Good MCU Board is ...
☆ mbed LPC1768 (5,200 YEN)
https://mb...
MCU: TI MSP430
☆ Minor
☆ 16bit
☆ Small memory size (< 4kB)
Good MCU Board is ...
☆ MSP-EXP430G2 (1,202 YEN)
http://www.ti....
MCU: Atmel AVR
☆ Major
☆ 8bit and Harvard architecture
☆ Small memory size (< 8kB)
Good MCU Board is ...
☆ Arduino Mega 25...
Cross compiler
☆ Functional language implementation
☆ many many many ...
☆ Which language good for MCU ?
Cross compiler: (A)jhc
http://ajhc.metasepi.org/
☆ Language: Haskell
☆ Haskell is major !
☆ Need GC heap = Need more memor...
Cross compiler: ATS
http://www.ats-lang.org/
http://jats-ug.metasepi.org/
☆ Language: ML
☆ Optional GC = Need low memory
☆...
Cross compiler: Rust
http://www.rust-lang.org/
☆ Language: Own syntax like C or JS
☆ Optional GC = Need low memory
☆ Exper...
gdbserver (Debugger)
☆ Gdb is major debugger
☆ But gdb is only for the program
running on your PC
☆ How debug program runn...
gdbserver: OpenOCD
http://openocd.sourceforge.net/
☆ Support many MCU
ARM7, ARM9, ARM11, ARM Cortex-M,
XScale, MIPS m4k, O...
gdbserver: pyOCD
https://github.com/mbedmicro/pyOCD
☆ Only for MCU using CMSIS-DAP
☆ But now support only mbed LPC1768
☆ I...
gdbserver: STLINK
https://github.com/texane/stlink
☆ Only for STM32 MCU
☆ STM32 is based on ARM Cortex-M
☆ No config is go...
gdbserver: AVaRICE
http://avarice.sourceforge.net/
☆ Only for Atmel AVR
Serial console
☆ Some MCU boards support "USB
Virtual Serial Port"
☆ If not, need USB serial converter
Peripheral
☆ GPIO
☆ I2C / SMBus
☆ USB host / device
☆ Bluetooth (LE)
☆ Sensor
☆ LCD Display
......
Ethernet
Use lwIP TCP/IP stack.
http://savannah.nongnu.org/projects/lwip/

But it needs thread supported by OS.
OS: FreeRTOS
http://www.freertos.org/
☆ Major
☆ Bad document ?
OS: ChibiOS/RT
http://www.chibios.org/
☆ Support ARM7, ARM Cortex-M, AVR,
PPC, MSP430
☆ OS is written by C
☆ Small
☆ Good ...
OS: mbed RTOS
http://mbed.org/handbook/RTOS
☆ Only for mbed
☆ OS core is written by C
☆ C++ wrapper for API
Choose our environment set
Setup Ajhc
http://ajhc.metasepi.org/
$
$
$
$
$

sudo apt-get install haskell-platform
sudo apt-get install gcc m4 patch li...
Setup cross gcc and gdb
☆ Use summon-arm-toolchain
$ git clone https://github.com/master-q/summon-arm-toolchain.git
$ sudo...
Setup pyOCD
☆ Upgrade mbed firmware
http://mbed.org/handbook/Firmware-LPC1768-LPC11U24

☆ Install pyOCD
http://mbed.org/bl...
Compile example
https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp-lpc1768
$
$
$
$

git clone https://github.com/...
Setup STLINK
https://github.com/texane/stlink
$
$
$
$
$
$
$

sudo apt-get install libsgutils2-dev libusb-1.0-0-dev
git clo...
Get mbed LPC1768 !
☆ マルツパーツ館
http://www.marutsu.co.jp/shohin_72981/

☆ スイッチサイエンス
http://www.switch-science.com/catalog/250...
Upcoming SlideShare
Loading in...5
×

Functional MCU programming #0: Development environment

3,112

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,112
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
13
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Functional MCU programming #0: Development environment"

  1. 1. Functional MCU programming #0: Development environment Metasepi Project / Kiwamu Okabe
  2. 2. Who am I ? ☆ http://www.masterq.net/ ☆ Twitter: @master_q ☆ Organizer of Metasepi Project ☆ A developer of Ajhc Haskell compiler ☆ A Debian Maintainer ☆ 10 years' experience in developing OS using NetBSD.
  3. 3. Why functional lang for MCU? ☆ We will live in IoT world ☆ Can't debug IoT device on field ☆ Should avoid runtime error ☆ We need strong type !
  4. 4. Overview
  5. 5. MCU (Microcontroller) Many architecture are on the earth.
  6. 6. MCU: ARM Cortex-M ☆ Major ☆ 32bit ☆ Large memory size (> 20kB) Good MCU Board is ... ☆ mbed LPC1768 (5,200 YEN) https://mbed.org/platforms/mbed-LPC1768/ ☆ STM32F4DISCOVERY (1,650 YEN) http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419
  7. 7. MCU: TI MSP430 ☆ Minor ☆ 16bit ☆ Small memory size (< 4kB) Good MCU Board is ... ☆ MSP-EXP430G2 (1,202 YEN) http://www.ti.com/tool/msp-exp430g2
  8. 8. MCU: Atmel AVR ☆ Major ☆ 8bit and Harvard architecture ☆ Small memory size (< 8kB) Good MCU Board is ... ☆ Arduino Mega 2560 compat board (2,690 YEN) http://www.amazon.co.jp/dp/B00CF2REXC
  9. 9. Cross compiler ☆ Functional language implementation ☆ many many many ... ☆ Which language good for MCU ?
  10. 10. Cross compiler: (A)jhc http://ajhc.metasepi.org/ ☆ Language: Haskell ☆ Haskell is major ! ☆ Need GC heap = Need more memory ☆ Experience running on MCU ARM Cortex-M https://github.com/ajhc/demo-cortex-m3
  11. 11. Cross compiler: ATS http://www.ats-lang.org/ http://jats-ug.metasepi.org/ ☆ Language: ML ☆ Optional GC = Need low memory ☆ No experience running on MCU
  12. 12. Cross compiler: Rust http://www.rust-lang.org/ ☆ Language: Own syntax like C or JS ☆ Optional GC = Need low memory ☆ Experience running on MCU ARM Cortex-M https://github.com/neykov/armboot ☆ @pirapira knows detail of it
  13. 13. gdbserver (Debugger) ☆ Gdb is major debugger ☆ But gdb is only for the program running on your PC ☆ How debug program running on MCU ? ☆ Gdbserver is good for the use case ☆ There are many implementation
  14. 14. gdbserver: OpenOCD http://openocd.sourceforge.net/ ☆ Support many MCU ARM7, ARM9, ARM11, ARM Cortex-M, XScale, MIPS m4k, Orion SoC ☆ Support many JTAG ☆ Need config file
  15. 15. gdbserver: pyOCD https://github.com/mbedmicro/pyOCD ☆ Only for MCU using CMSIS-DAP ☆ But now support only mbed LPC1768 ☆ In future, support more board ? Seeeduino Arch Pro ($43.41) http://www.seeedstudio.com/depot/arch-pro-p-1677.html FRDM-KL46Z (1,634 YEN) http://www.freescale.com/webapp/sps/site/prod_summary.jsp? code=FRDM-KL46Z
  16. 16. gdbserver: STLINK https://github.com/texane/stlink ☆ Only for STM32 MCU ☆ STM32 is based on ARM Cortex-M ☆ No config is good config
  17. 17. gdbserver: AVaRICE http://avarice.sourceforge.net/ ☆ Only for Atmel AVR
  18. 18. Serial console ☆ Some MCU boards support "USB Virtual Serial Port" ☆ If not, need USB serial converter
  19. 19. Peripheral ☆ GPIO ☆ I2C / SMBus ☆ USB host / device ☆ Bluetooth (LE) ☆ Sensor ☆ LCD Display ......
  20. 20. Ethernet Use lwIP TCP/IP stack. http://savannah.nongnu.org/projects/lwip/ But it needs thread supported by OS.
  21. 21. OS: FreeRTOS http://www.freertos.org/ ☆ Major ☆ Bad document ?
  22. 22. OS: ChibiOS/RT http://www.chibios.org/ ☆ Support ARM7, ARM Cortex-M, AVR, PPC, MSP430 ☆ OS is written by C ☆ Small ☆ Good document ☆ Used by gniibe
  23. 23. OS: mbed RTOS http://mbed.org/handbook/RTOS ☆ Only for mbed ☆ OS core is written by C ☆ C++ wrapper for API
  24. 24. Choose our environment set
  25. 25. Setup Ajhc http://ajhc.metasepi.org/ $ $ $ $ $ sudo apt-get install haskell-platform sudo apt-get install gcc m4 patch libncurses5-dev cabal install drift export PATH=$PATH:$HOME/.cabal/bin cabal install ajhc Able to use it on Windows/Mac OS X ?
  26. 26. Setup cross gcc and gdb ☆ Use summon-arm-toolchain $ git clone https://github.com/master-q/summon-arm-toolchain.git $ sudo apt-get install build-essential git flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo libtool libftdi-dev libusb-1.0-0-dev zlib1g zlib1g-dev python-yaml $ cd summon-arm-toolchain/ $ ./summon-arm-toolchain $ export PATH=$HOME/sat/bin:$PATH なにやら不穏なmaster-qというリポジトリからcloneしているのは、 "unknown command `colophon'" とか言われるケースがあるため 詳細: http://trac.cross-lfs.org/ticket/926 ☆ Use GCC ARM Embedded https://launchpad.net/gcc-arm-embedded/
  27. 27. Setup pyOCD ☆ Upgrade mbed firmware http://mbed.org/handbook/Firmware-LPC1768-LPC11U24 ☆ Install pyOCD http://mbed.org/blog/entry/Debugging-from-GDB-using-pyOCD/ $ $ $ $ $ $ $ sudo apt-get install python libusb-1.0-0-dev git clone https://github.com/walac/pyusb.git cd pyusb sudo python setup.py install git clone https://github.com/mbedmicro/pyOCD.git cd pyOCD sudo python setup.py install __bootstrap_innerとかなんかgdb_test.pyがエラーを吐く場合 http://mbed.org/forum/mbed/topic/4544/ を参考にpatchをあてるらしい...
  28. 28. Compile example https://github.com/ajhc/demo-cortex-m3/tree/master/mbed-nxp-lpc1768 $ $ $ $ git clone https://github.com/ajhc/demo-cortex-m3.git cd demo-cortex-m3/mbed-nxp-lpc1768 cd samples/Haskell make
  29. 29. Setup STLINK https://github.com/texane/stlink $ $ $ $ $ $ $ sudo apt-get install libsgutils2-dev libusb-1.0-0-dev git clone https://github.com/texane/stlink.git cd stlink/ ./autogen.sh ./configure make sudo make install
  30. 30. Get mbed LPC1768 ! ☆ マルツパーツ館 http://www.marutsu.co.jp/shohin_72981/ ☆ スイッチサイエンス http://www.switch-science.com/catalog/250/ ☆ 秋月電子通商 http://akizukidenshi.com/catalog/g/gM-03596/
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×