• Like
HaskellではじめるCortex-M3組込みプログラミング
Upcoming SlideShare
Loading in...5
×

HaskellではじめるCortex-M3組込みプログラミング

  • 2,673 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,673
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
12
Comments
0
Likes
5

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. HaskellではじめるCortex-M3  HaskellではじめるCortex-M3   組込みプログラミング 組込みプログラミング Kiwamu Okabe
  • 2. 私は誰?☆ Twitter: @master_q☆ ミラクル・リナックス勤務☆ 前はコピー機のOSをNetBSDで作ってた☆ デジタルサイネージのソフト開発してます☆ OSSに興味のある{エンジニア,インターン}募集中です!
  • 3. Haskell流行ってますよね!
  • 4. でも何に使ってるの?* Attoparsec - 高速パーサコンビネータ* Bluespec - SystemVerilogとSystemCのツール実装に使ってる* Bump Technologies - モバイル向け連絡先交換のサーバサイド* Gitit - VCSバックエンドWiki* Gtk2hs - Haskellから使えるGtkラッパ* Hakyll - 静的Webサイト生成* Microsoft Research - GHC(Haskellコンパイラ)の研究開発* Mighttpd - nginxぐらい速いWebサーバ* Monadius - グラディウスっぽいゲーム* Pandoc - ドキュメントフォーマット変換* Qualcomm - LuaのBREWバインディングジェネレータ* Standard Chartered Bank - デリバティブリスク分析* Tsuru Capital - 株式トレーディング* Yesod - RailsっぽいWebアプリケーションフレームワークでもこれってみんなPOSIX APIの上でしか動かせませんね...
  • 5. 小さい機器をHaskellで書きたい!マイコンでLEDチカチカしてみましょう☆ STBee Mini☆ CPU: STM32 (Cortex-M3)☆ クロック: 72MHz☆ フラッシュROM: 128kB☆ RAM: 20kB
  • 6. そこでjhcコンパイラ
  • 7. Haskellコードを食わせると-- snip Imports --foreign import ccall "c_extern.h Delay" c_delay :: Word32 -> IO ()gpioPtr :: Ptr Word32gpioPtr = odr where periphBase = nullPtr `plusPtr` 0x40000000 arb2periphBase = periphBase `plusPtr` 0x10000 gpioaBase = arb2periphBase `plusPtr` 0x0800 odr = gpioaBase `plusPtr` 12gpioOut :: Word32 -> IO ()gpioOut v = do poke gpioPtr v c_delay 500000main :: IO ()main = forever $ do gpioOut $ (1 `shiftL` 13) gpioOut $ (1 `shiftL` 13) .|. (1 `shiftL` 15) gpioOut $ (1 `shiftL` 15) gpioOut $ 0
  • 8. C言語コードに変換してくれる!static void A_STDftheMain(gc_t gc){ fR$__fControl_Monad_forever__2:; { *((volatile uint32_t *)(1073809420)) = 1 << 13; saved_gc = gc; (void)Delay((uint32_t)500000); *((volatile uint32_t *)(1073809420)) = (1 << 13) | (1 << 15); saved_gc = gc; (void)Delay((uint32_t)500000); *((volatile uint32_t *)(1073809420)) = 1 << 15; saved_gc = gc; (void)Delay((uint32_t)500000); *((volatile uint32_t *)(1073809420)) = 0; saved_gc = gc; (void)Delay((uint32_t)500000); goto fR$__fControl_Monad_forever__2; } return;}
  • 9. 実機デモ動画でご覧ください (1分50秒)http://www.nicovideo.jp/watch/sm20143937https://gitorious.org/metasepi/demo-cortex-m3/blobs/master/demo_movie.avi
  • 10. PR:HaskellでOSを作るプロジェクトはじめました。http://metasepi.masterq.net/乞御期待!
  • 11. 参考資料* 本デモのソースコード <https://gitorious.org/metasepi/demo-cortex-m3>* Patch適用済みjhcソースコード <https://gitorious.org/metasepi/jhc-arafura>* STM32マイコンボード 『STBee Mini』 <http://strawberry-linux.com/catalog/items?code=32105>