小弟長久以來在FigTaiwan論壇上潛水,一直沒有產出,深感抱歉。今晚來寫點介紹性的文章,給軟體業的朋友們參考。
Forth (符式) 是一個 postfix (正式名稱叫逆波蘭表示法) 的雙堆疊語言,詳細的介紹網路上很多了,本篇的重點在如何在 Linux 下,把一個 Forth 環境裝到 MSP430 Lauchpad 上面。
1. 按照這張圖,把 TX/RD 設成硬體 UART:
用 USB 線把 MSP430 Lauchpad 和電腦接起來,dmesg
可以看到以下字樣:
[55571.993498] usb 3-1: Product: Texas Instruments MSP-FET430UIF [55571.993503] usb 3-1: Manufacturer: Texas Instruments ... [55571.999657] cdc_acm 3-1:1.0: ttyACM0: USB ACM device2. 跟著這個網頁的說明,在 Linux 下燒錄第一個 MSP430 的程式 (這邊使用 Ubuntu, 11.x 版之後應該都可以):
$ git clone http://github.com/wendlers/msp430-harduart.git $ sudo apt-get install mspdebug gcc-msp430 $ make3. 編譯完成後,就可以燒錄了。
$ sudo make flash-target mspdebug rf2500 "prog ./bin/firmware.elf" MSPDebug version 0.19 - debugging tool for MSP430 MCUs Copyright (C) 2009-2012 Daniel Beer4. 到這邊一切順利的話,可以先玩玩看測試用的小程式。This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Trying to open interface 1 on 005 Initializing FET... FET protocol version is 30394216 Configured for Spy-Bi-Wire Set Vcc: 3000 mV Device ID: 0x2553 Device: MSP430G2553 Code memory starts at 0xc000 Number of breakpoints: 2 Erasing... Programming... Writing 364 bytes to c000 [section: .text]... Writing 106 bytes to c16c [section: .rodata]... Writing 32 bytes to ffe0 [section: .vectors]... Done, 502 bytes written
$ sudo screen /dev/ttyACM0 9600如果你和我一樣,看到恆亮的紅綠燈,screen 沒有顯示任何字,可以改用 minicom:
$ sudo apt-get install minicom $ minicom -b 9600 -D /dev/ttyACM0然後按下 reset 鍵,就可以看到 Logo 了:
*************** MSP430 harduart *************** PRESS any key to start echo example ...5. 按任意鍵之後,就可以開始打字。每打一個字母,紅燈就會 toggle 一次。
6. 玩得開心之後,按 Ctrl-A x 離開 Minicom 。如果離不開,直接把 USB 線拔掉即可。 如果你想用 gcc-msp430 來寫程式,那到這個步驟就可以了。下面要開始進入 Forth
7. 去 4E4th 下載 Forth 主程式。 4E4th 主程式大概 6K, 也就是說還有 8K 的空間,可以讓你寫自己的程式。
8. 燒錄:
$ sudo mspdebug rf2500 "prog ./4e4th.a43" MSPDebug version 0.19 - debugging tool for MSP430 MCUs Copyright (C) 2009-2012 Daniel Beer9. 4E4th 的 Wiki 上有很詳細的說明,不過他們的 PDF 檔不是標準格式,我用 Chrome 打不開,另存新檔後用 evince 就可以看。This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Trying to open interface 1 on 007 Initializing FET... FET protocol version is 30394216 Configured for Spy-Bi-Wire Set Vcc: 3000 mV Device ID: 0x2553 Device: MSP430G2553 Code memory starts at 0xc000 Number of breakpoints: 2 Erasing... Programming... Writing 34 bytes to 1080... Writing 4096 bytes to e000... Writing 3482 bytes to f000... Writing 32 bytes to ffe0... Done, 7644 bytes written
10. 奇怪的是,Forth 的範例我沒辦法使用 minicom, 但是用 screen 跑卻沒問題。可以試試這個:
$ sudo screen /dev/ttyACM0 打指令: red cclr -- 紅燈滅 red cset -- 紅燈亮 green cclr -- 綠燈滅 green cset -- 綠燈亮 已經可以使用 Forth 指令了: 11 22 33 ok . 33 ok . 22 ok . 11 ok 奇怪的是,它的堆疊沒有檢查下限? . 12771 ok . -3823 ok . -7228 ok11. 定義自己的 word 也沒問題:
: TEST ." Hello Forth!" ; ok TEST Hello Forth!ok12. 為了 MSP430 特製指令在這裡,需要參考一下: Glossary 完整的符式字的定義在這裡。
13. 再多玩一下...
red . . [Enter] 33 1 ok 即 adr = 0x21 (Port1 輸出), m = bit0 green . . [Enter] 33 64 ok 即 adr = 0x21 (Port1 輸出), m = bit614. 這塊板子可以幹什麼呢? 這邊 有些介紹。
15. 如果想研究原始碼,就 clone 一份下來吧!
$ svn co http://www.forth-ev.de/repos/4e4th/
沒有留言:
張貼留言