看板 ASM 關於我們 聯絡資訊
※ 引述《shuiyuan (C遇瓶頸)》之銘言: : → eva19452002:可以直接拿8051的C拿去ARM執行嗎? 應該不行不是嗎? 11/13 08:53 : → eva19452002:結論是不同平台的C還是要做相當程度的修改才行 11/13 08:53 一般嵌入式系統上的開發,會把程式碼分成幾部份。 1.Kernel core ---> 硬體初始化... 2.Board Description Package ---> 硬體腳位、週邊控制介面...定義 3.Hardware API ---> 存取週邊時需要用到的程式介面 4.User Application ---> 跟硬體無關的程式。 不同的平台,能直接去用的只有(4)的程式可以,其他的都要作porting的工作。 比如arm上面有放網路介面,而8051沒有,了不起存取網路介面的部份不會動。 或是call api時告訴你無此裝置。基本上是可以100%移植。 建立(1)~(3)的部份的好處時,在同一平台開發時,幾乎不用重新key in,直 接連結進來,改一改Boaed Descript。現在的IDE都是以專案方式管理,這樣 可以加快開發速度。 我自己玩單晶片超過10年了,幾乎就是(1)~(3)的部份連結進來,然後在header file改一下mcu參數就直接寫user code了。不同晶片,就是(1)~(3)的部份第 一次把他建好就可以了,頂多就是不足的部份逐次修訂。
AJE:資料大小也要注意 keil C的int是16bit 不是32bit 11/14 15:26
這種問題算是老問題了,基本上這類的定義可以放在(1)~(3)來面處理。 重新定義資料型態寬度,確保正確的寬度被使用。 比如int可以用int16定義,char用int8定義,有些uC是32位元的,那可以 透過marco去重定義int為int32這類。 像pic和pic32的int就不一樣。我的user application在兩者間移植就是這樣作。
ruemann:實用 11/14 18:42
※ 編輯: MasterChang 來自: 59.104.147.111 (11/14 21:58)
eva19452002:感謝回答 11/15 09:25