一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析RT-Thread針對不同架構(gòu)芯片移植的方法

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:嵌入式IoT ? 作者:嵌入式IoT ? 2021-03-18 17:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在做rt-thread系統(tǒng)移植的這段時間里,積累一些快速移植的經(jīng)驗,不論是現(xiàn)有架構(gòu)的不同型號的芯片,還是一個全新架構(gòu)的移植,只需要按照一定的步驟進(jìn)行,一般大的方向不會出錯。剩下的事情就是解決為什么沒有達(dá)到預(yù)期效果的問題。

移植的里程碑有如下的幾個:1.芯片工作在正常的模式,可以正常的執(zhí)行c代碼邏輯 2.至少有一個串口驅(qū)動 3.上下文切換邏輯 4.定時器可以正常的使用 5.串口輸入有正常的中斷產(chǎn)生并能夠讀到數(shù)據(jù) 針對以上的順序詳細(xì)描述問題以及解決辦法。

芯片的工作模式

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

可以正常執(zhí)行c代碼

完成這一步也是匯編的代碼的實現(xiàn),這一步的通用關(guān)鍵操作是bss段清零,以及設(shè)置棧指針地址。 對于bss段清零的必要性是因為c語言的語法規(guī)則,以前的存儲程序的存儲器是很貴的,所以程序在生成的時候,把未初始化的全局變量和靜態(tài)變量,這些存儲空間不存入存儲器空間,然后在程序加載的時候,將這段空間指向的區(qū)域清零。而函數(shù)中的非靜態(tài)的變量則存儲在棧中,地址不確定。

如果不進(jìn)行bss的清零,可能導(dǎo)致的問題是全局變量和靜態(tài)變量的值不確定,導(dǎo)致程序編程時遇到異常的現(xiàn)象。 清空bss段的步驟也很簡單,就是將bss這一段內(nèi)存空間設(shè)置為0即可。 而設(shè)置棧地址也就是sp的地址,僅僅是為了在操作系統(tǒng)線程還未啟動調(diào)度時,最開始的??臻g。根據(jù)c語言的函數(shù)調(diào)用規(guī)則,c語言進(jìn)行函數(shù)調(diào)用時,都需要壓棧和出棧,這段棧空間是用戶自行分配的。 所以需要注意點(diǎn)是rt-thread啟動調(diào)度前也是有一個棧空間的,調(diào)度啟動后該??臻g不被使用,每個線程??臻g才生效。

至少有一個串口驅(qū)動

要完成這個工作,需要注意的問題是事先已經(jīng)完成了串口驅(qū)動的驗證工作。也就是可以正常的接收和發(fā)送數(shù)據(jù)。完成rt-thread串口驅(qū)動對接,只需實現(xiàn)串口初始化,串口接收,串口發(fā)送,中斷注冊即可。 由于前期沒有中斷,實現(xiàn)串口發(fā)送功能就可以接著進(jìn)行下面工作了。 正常情況下,可以看到串口可以輸出rt-thread的logo了。

上下文切換邏輯

對于程序的上下文,可以理解為程序當(dāng)前運(yùn)行的現(xiàn)場。其現(xiàn)場里面主要包含的內(nèi)容有,當(dāng)前所有的寄存器狀態(tài),當(dāng)前sp的值,有些處理器還有pc值等等。

對于第一個調(diào)度起來的線程,其上下文的內(nèi)容是人工手動賦值的。因為并不能保證調(diào)度器執(zhí)行的第一個線程是哪個具體的線程,所以每個線程都會存儲一個人工填充的上下文。 需要注意的地方主要有三點(diǎn),第一個線程調(diào)度啟動后,會打開全局中斷,具體是在上下文恢復(fù)時,由匯編代碼實現(xiàn)。第二個是線程退出后,會啟動下一次調(diào)度,線程回收工作由空閑線程完成。第三點(diǎn)一定要確保壓棧的順序和出棧的順序一致性。

該功能實現(xiàn)正常的標(biāo)志是可以正常進(jìn)入main函數(shù)以及msh控制臺。但不能輸入控制,因為沒有實現(xiàn)串口輸入中斷,如果已經(jīng)實現(xiàn)串口中斷,那可以msh輸入。

定時器可以正常使用

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

串口可正常輸入

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

移植的工作難點(diǎn)

對于上面的步驟中,最難的就是棧幀的規(guī)劃,上下文切換和中斷處理。 結(jié)合實際移植經(jīng)驗,往往容易出問題的地方就是入棧和出棧的順序?qū)Σ簧希蛘哂行┘拇嫫鳑]有存到棧中。在這個工作的時候,要檢查一下寄存器是32位還是64位,可能因為這個小細(xì)節(jié),導(dǎo)致棧幀的偏移。 另外要注意的是,線程壓棧的時候,一定要壓線程退出后的回收函數(shù),曾經(jīng)也因為沒有注意這個細(xì)節(jié)導(dǎo)致main函數(shù)退出后,系統(tǒng)運(yùn)行異常。

中斷里面復(fù)雜設(shè)計在于中斷的嵌套,往往在中斷里執(zhí)行調(diào)度,并不會立馬執(zhí)行到切換線程的上下文,這樣就破壞了現(xiàn)場,而是待到所有中斷執(zhí)行完成后,再切換上下文。這一點(diǎn)在cortex-m上很好理解,中斷控制器在處理pendsv異常時,總是等待其他高優(yōu)先級中斷處理完成后,再去處理優(yōu)先級最低的pendsv。而對于sparc這種設(shè)計,切換任務(wù)是通過trap異常實現(xiàn)的,trap異常高于中斷,也就是切換線程優(yōu)先級高于中斷,這是系統(tǒng)設(shè)計里面不合理的,在軟件設(shè)計時,往往通過設(shè)置中斷嵌套標(biāo)志位,等到所有中斷執(zhí)行完成后,再切換上下文,一定不能夠在中斷執(zhí)行時,把上下文切換走。

移植經(jīng)驗分享

rt-thread的移植是有一些關(guān)鍵點(diǎn)的,找到這些關(guān)鍵點(diǎn),可以非常順利的規(guī)劃清楚方向和目標(biāo),對于每個關(guān)鍵點(diǎn)進(jìn)行技術(shù)攻克,這樣是最快也是最高效的做事方式。 要想移植不同芯片架構(gòu),需要非常清楚這個芯片的架構(gòu),也需要非常熟悉rt-thread系統(tǒng)最關(guān)鍵點(diǎn)底層代碼。一般熟悉rt-thread的底層代碼并不是很難,從頭讀一遍aarch64的rt-thread最小系統(tǒng)實現(xiàn)兩三天就能差不多理解,而芯片手冊的閱讀要結(jié)合實際的工作經(jīng)驗,弄清楚芯片特權(quán)模式、看懂寄存器,看懂匯編基本就可以了。當(dāng)然有些處理器是需要實現(xiàn)mmu才能正常執(zhí)行的,比如aarch64,必須實現(xiàn)mmu的功能,即使是1:1映射。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 芯片
    +關(guān)注

    關(guān)注

    459

    文章

    52471

    瀏覽量

    440409
  • PC
    PC
    +關(guān)注

    關(guān)注

    9

    文章

    2150

    瀏覽量

    156481
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1403

    瀏覽量

    41885
  • main
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    6400

原文標(biāo)題:RT-Thread針對不同架構(gòu)芯片移植的方法

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RT-Thread榮獲2025優(yōu)秀開源項目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術(shù)協(xié)會主辦的2025上海開源創(chuàng)新精英薈。上海市商委副主任張杰出席會議并致辭。RT-Thread嵌入式操作系統(tǒng)項目憑借其卓越的技術(shù)創(chuàng)新與開源生態(tài)
    的頭像 發(fā)表于 07-04 09:04 ?1490次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優(yōu)秀開源項目 | 新聞速遞

    揭秘RT-Thread上的AUTOSAR CP系統(tǒng)

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發(fā)中實時性、安全性與靈活性的平衡問題。通過分層安全內(nèi)核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發(fā)表于 06-23 20:22 ?2295次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統(tǒng)

    RT-Thread審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)

    全球開發(fā)者招募:RT-Thread審核團(tuán)(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質(zhì)量、促進(jìn)技術(shù)交流的關(guān)鍵環(huán)節(jié)。RT-Thread作為全球領(lǐng)先
    的頭像 發(fā)表于 05-21 18:02 ?647次閱讀
    <b class='flag-5'>RT-Thread</b>審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)

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

    RT-Thread默認(rèn)支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?1898次閱讀
    如何將<b class='flag-5'>RT-Thread</b><b class='flag-5'>移植</b>到NXP MCUXPressoIDE上

    全志科技亮相2024 RT-Thread開發(fā)者大會

    近日,操作系統(tǒng)廠商睿賽德科技在上海舉辦“2024 RT-Thread開發(fā)者大會”。全志科技作為芯片設(shè)計廠商受邀參展并進(jìn)行了主題分享。會上,全志科技系統(tǒng)軟件中心資深架構(gòu)師進(jìn)行了名為《擁抱生態(tài),和而共贏
    的頭像 發(fā)表于 12-31 16:47 ?1166次閱讀

    RT-Thread應(yīng)用開發(fā)寒假師資培訓(xùn)——西安站

    隨著物聯(lián)網(wǎng)和智能系統(tǒng)的快速發(fā)展,嵌入式成為當(dāng)前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。為進(jìn)一步提升全國大學(xué)生在嵌入式芯片及系統(tǒng)設(shè)計領(lǐng)域的創(chuàng)新能力,特別是針對物聯(lián)網(wǎng)應(yīng)用開發(fā)中RT-Thread操作系統(tǒng)
    的頭像 發(fā)表于 12-11 01:06 ?664次閱讀
    <b class='flag-5'>RT-Thread</b>應(yīng)用開發(fā)寒假師資培訓(xùn)——西安站

    RT-Thread操作系統(tǒng)應(yīng)用開發(fā)寒假師資培訓(xùn)

    隨著物聯(lián)網(wǎng)和智能系統(tǒng)的快速發(fā)展,嵌入式成為當(dāng)前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。為進(jìn)一步提升全國大學(xué)生在嵌入式芯片及系統(tǒng)設(shè)計領(lǐng)域的創(chuàng)新能力,特別是針對物聯(lián)網(wǎng)應(yīng)用開發(fā)中RT-Thread操作系統(tǒng)
    的頭像 發(fā)表于 12-06 01:06 ?523次閱讀
    <b class='flag-5'>RT-Thread</b>操作系統(tǒng)應(yīng)用開發(fā)寒假師資培訓(xùn)

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進(jìn)行RT-ThreadCan移植。接下來
    的頭像 發(fā)表于 11-13 01:03 ?2097次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

    親愛的RT-Thread開發(fā)者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發(fā)者大會)正式啟動報名!2024RT-Threa
    的頭像 發(fā)表于 10-29 08:06 ?953次閱讀
    開源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會報名啟動!

    Nordic-RT-Thread5.1.0移植筆記

    Nordic-RT-Thread5.1.0移植筆記
    的頭像 發(fā)表于 10-16 08:09 ?1297次閱讀
    Nordic-<b class='flag-5'>RT-Thread</b>5.1.0<b class='flag-5'>移植</b>筆記

    如何在RT-thread studio的裸機(jī)例程上移植freertos?

    如何在RT-thread studio的裸機(jī)例程上移植freertos
    發(fā)表于 09-13 06:32

    【大連】9月7日RT-Thread巡回線下培訓(xùn)-OpenMV機(jī)器視覺

    親愛的RT-Thread社區(qū)成員們:2024年RT-Thread全球開發(fā)者線下培訓(xùn)拉開帷幕啦!24年全球巡回培訓(xùn)將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學(xué)習(xí)RT-Thread嵌入式開發(fā)的絕佳
    的頭像 發(fā)表于 09-01 08:02 ?3759次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓(xùn)-OpenMV機(jī)器視覺

    【QEMU系列】不用開發(fā)板運(yùn)行RT-Thread指南-ARM架構(gòu)

    簡介在物聯(lián)網(wǎng)和嵌入式系統(tǒng)的開發(fā)中,RT-Thread操作系統(tǒng)憑借其小巧、高效和靈活的特點(diǎn),受到了越來越多開發(fā)者的青睞。然而,對于很多剛剛接觸RT-Thread的開發(fā)者來說,購買和使用開發(fā)板可能會
    的頭像 發(fā)表于 08-09 08:35 ?1596次閱讀
    【QEMU系列】不用開發(fā)板運(yùn)行<b class='flag-5'>RT-Thread</b>指南-ARM<b class='flag-5'>架構(gòu)</b>

    2024 RT-Thread全球巡回 線下培訓(xùn)火熱來襲!

    親愛的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開發(fā)者線下培訓(xùn)即將拉開帷幕!24年全球巡回培訓(xùn)將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學(xué)習(xí)RT-Thread嵌入式開發(fā)的絕佳機(jī)會。
    的頭像 發(fā)表于 08-07 08:35 ?2903次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓(xùn)火熱來襲!

    【好書推薦】RT-Thread設(shè)備驅(qū)動開發(fā)指南

    近年來國內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術(shù)的人才。隨著RT-Thread被更廣泛地應(yīng)用于行業(yè)中,開發(fā)者對嵌入式驅(qū)動開發(fā)的需求越來越
    的頭像 發(fā)表于 08-01 08:35 ?1319次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動開發(fā)指南