範例下載, 使用 winbond w77e532, uart output "010hello test".
要做 SDCC code banking 真是有夠麻煩,找不到有人分享成功案例就算了,sdccman.pdf 竟然也只提到一頁而已,完全沒法子去了解如此實做。最後靠著不斷的試驗,總算完成這一件不可能的任務。
- 修改 C:\Program Files\SDCC\lib\src\mcs51\crtbank.asm 來達成 bankswitching 的函數。
- 重新建立 mcs51.lib,把修改好的 crtbank.asm 置換掉舊的 mcs51.lib。
- Project Properties → C/C++ Build → Settings → Tool Settings → SDCC Linker → Command 輸入 sdcc -Wl-r "-Wl-b BANK1=0x18000",千萬不要輸入 sdcc "-Wl-r -Wl-b BANK1=0x18000",為此我花了半天找問題,真是 ooxx。
- 建立一個 c source file,開頭輸入 #pragma codeseg BANK1。
- 建立一個函數 void test1(void) banked { ... },要記得加上 banked。
- 轉換 ihx 成 bin,makebin.exe < test.ihx > test.bin
- 產生出來的 bin,裏面有 common/bank0/bank1,但是在 bank1 裏沒有 common 存在,需要手動加進去,而且也要手動分開這個 bin,才方便 winbond isp writer 燒錄。
- 大功告成,真是幸苦啊,花了一天才完成。
to be continue.... 後面有空再來補一些說明及範例吧。
張貼留言