2011年6月3日 星期五

程式雙跨X86及MCU

主要是要讓MCU程式可以在Windows環境下可以編譯,或是簡單執行。
因為Bee成功將68K的程式移轉到Windows下成功。
這才了解在Windows下除錯是多麼幸福的事。
尤其在有作業系統的環境中,一般Debuger無法作用的環境中寫了數年的程式。
可以單步中斷、追蹤,是很幸福的。

在Visual Studio下,在執行時仍可以修改程式碼,立刻修改錯誤,這是不可能在MCU中可以做到的。
另外可以看呼叫來源,可以知道是如何進入函式,可以省去追各路分支。
MCU可以用Visual Studio去寫及模擬,我就不可能回到過去那種人工看Code的日子。

可以操作的等級差太多了。
以前面對10MB的原始碼,根本不知如何追起。
現在就覺得10MB不是那樣可怕,很輕鬆就可以設定及追蹤。

以下為需要修改的。
1.I/O
  使用巨集,函式外型。
  因為在沒有實體硬體時,需要另一組軟體函式來模擬。
  要是做成記憶體存取,就會變成無法模擬。
 
2.組合語言
  跳過
  以C重寫
  組合語言轉C
 
3.MCU內部設定
  幾乎都是跳過
 
4.中斷
  使用Windows Thread,另外開獨立高權限Thread來模擬中斷。
 
5.RTOS系統呼叫
  找出對應的地方,套入Windows系統呼叫。
 
但仍有一些操作上和實體不同
1.堆疊
  不會用配置記憶體做為堆疊,Windows有自己的。

2.當機的回復
  這個不是硬體當掉,而是將堆疊設置錯誤產生的。
  MCU有時會重啟RTOS,然後因全域變數留有工作,會連下去做。
  但Windows可不會。
 
  老實說,發現這個動作Bee很驚訝,這個明顯是程式設計錯誤。
  也終於了解公司的怪O.S.為何不能移到正常的作業上執行的原因。
  程式根本會死當,再利用怪怪的作業系統回復其工作,正常作業系統那裏有這招的。