在做rt-thread系統移植的這段時間里,積累一些快速移植的經驗,不論是現有架構的不同型號的芯片,還是一個全新架構的移植,只需要按照一定的步驟進行,一般大的方向不會出錯。剩下的事情就是解決為什么沒有達到預期效果的問題。
移植的里程碑有如下的幾個:1.芯片工作在正常的模式,可以正常的執行c代碼邏輯2.至少有一個串口驅動3.上下文切換邏輯4.定時器可以正常的使用5.串口輸入有正常的中斷產生并能夠讀到數據針對以上的順序詳細描述問題以及解決辦法。
芯片的工作模式


不同架構的芯片一定會有對應的模式適合操作系統的運行,這是芯片設計時就考慮到的問題,所以移植也要遵循這種規則。另外也涉及到寄存器的訪問權限問題。比如armv7,其操作系統存在的模式為system模式,可以方便的切換到其他模式。還有比較典型的armv8架構的el1特權級別。當然把芯片模式切換到其他的模式,也可以,比如rt-thread整個系統運行在el3特權模式,在el3特權級別最高,但是并不是越高越好,往往el3會有更加合適的用法。其切換到邏輯一般在芯片啟動后,執行的最初一段的匯編代碼邏輯里面,一般芯片在上電后,都會進入最高特權權限的模式里,切換到操作系統特定的特權級別模式即可。
可以正常執行c代碼


完成這一步也是匯編的代碼的實現,這一步的通用關鍵操作是bss段清零,以及設置棧指針地址。 對于bss段清零的必要性是因為c語言的語法規則,以前的存儲程序的存儲器是很貴的,所以程序在生成的時候,把未初始化的全局變量和靜態變量,這些存儲空間不存入存儲器空間,然后在程序加載的時候,將這段空間指向的區域清零。而函數中的非靜態的變量則存儲在棧中,地址不確定。 如果不進行bss的清零,可能導致的問題是全局變量和靜態變量的值不確定,導致程序編程時遇到異常的現象。 清空bss段的步驟也很簡單,就是將bss這一段內存空間設置為0即可。而設置棧地址也就是sp的地址,僅僅是為了在操作系統線程還未啟動調度時,最開始的棧空間。根據c語言的函數調用規則,c語言進行函數調用時,都需要壓棧和出棧,這段棧空間是用戶自行分配的。 所以需要注意點是rt-thread啟動調度前也是有一個棧空間的,調度啟動后該棧空間不被使用,每個線程棧空間才生效。
至少有一個串口驅動


要完成這個工作,需要注意的問題是事先已經完成了串口驅動的驗證工作。也就是可以正常的接收和發送數據。完成rt-thread串口驅動對接,只需實現串口初始化,串口接收,串口發送,中斷注冊即可。 由于前期沒有中斷,實現串口發送功能就可以接著進行下面工作了。正常情況下,可以看到串口可以輸出rt-thread的logo了。
上下文切換邏輯


定時器可以正常使用


定時器可以正常使用的前提中斷可以正常的產生,然后周期性的產生定時器中斷。 定時器是系統tick的關鍵,沒有定時器,系統將無法在任務中通過delay釋放CPU資源,但是可以通過主動切換任務的方式進行調度。關于rt-thread的tick的時間片多少合適的問題,這里解釋為,一般合適的10ms,對于主頻很高的芯片可以是1ms。曾經在30mhz的主頻的FPGA上驗證系統,發現并不能正常運行起來。分析因為系統定時器中斷產生的太頻繁,主頻太低,程序來不及處理完成又發生了中斷。
串口可正常輸入


該步驟可作為移植的成功的驗證工作,這一步的工作并非技術難點,但是往往前面步驟沒有成功,可能會導致這里出現不了想要的現象。 比如曾經協助一個客戶完成移植工作時,發現串口中斷打開后,只能輸入一個字符串后無反應,后來才查到中斷處理標志沒有清空。一般可以正常的輸入輸出,該系統移植就基本成功了。
移植的工作難點


移植經驗分享


rt-thread的移植是有一些關鍵點的,找到這些關鍵點,可以非常順利的規劃清楚方向和目標,對于每個關鍵點進行技術攻克,這樣是最快也是最高效的做事方式。 要想移植不同芯片架構,需要非常清楚這個芯片的架構,也需要非常熟悉rt-thread系統最關鍵點底層代碼。一般熟悉rt-thread的底層代碼并不是很難,從頭讀一遍aarch64的rt-thread最小系統實現兩三天就能差不多理解,而芯片手冊的閱讀要結合實際的工作經驗,弄清楚芯片特權模式、看懂寄存器,看懂匯編基本就可以了。當然有些處理器是需要實現mmu才能正常執行的,比如aarch64,必須實現mmu的功能,即使是1:1映射。
RT-Thread開發者大會
我們將聯合重量級合作伙伴,圍繞AIoT的發展、產業技術趨勢,聚焦控制、連接、行業應用開發,通過主題演講、技術分享、應用演示等環節,助力開發者探索萬物智能的世界,期待與大家一起相聚線上直播間!
現在掃碼報名 我們將在報名者中抽取“幸運參會者100名” 贈送RT-Thread新款開發板(即將揭秘)
本次將在大會當天在直播間宣布中獎名單
更多獎品即將來襲...
-
RT-Thread
+關注
關注
32文章
1368瀏覽量
41497
原文標題:RT-Thread針對不同架構芯片移植的方法
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

如何將RT-Thread移植到NXP MCUXPressoIDE上

全志科技亮相2024 RT-Thread開發者大會
RT-Thread應用開發寒假師資培訓——西安站

RT-Thread操作系統應用開發寒假師資培訓

RT-Thread上CAN實踐

開源共生 商業共贏 | RT-Thread 2024開發者大會報名啟動!

【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

【QEMU系列】不用開發板運行RT-Thread指南-ARM架構

2024 RT-Thread全球巡回 線下培訓火熱來襲!

【好書推薦】RT-Thread設備驅動開發指南

RT-Thread 新里程碑達成——GitHub Star 破萬!

基于 RT-Thread專業版的EtherCAT主站方案

評論