国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

芯片的工作模式

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

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

完成這一步也是匯編的代碼的實(shí)現(xiàn),這一步的通用關(guān)鍵操作是bss段清零,以及設(shè)置棧指針地址。 對(duì)于bss段清零的必要性是因?yàn)?a href="http://www.3532n.com/soft/data/21-24/" target="_blank">c語(yǔ)言的語(yǔ)法規(guī)則,以前的存儲(chǔ)程序的存儲(chǔ)器是很貴的,所以程序在生成的時(shí)候,把未初始化的全局變量和靜態(tài)變量,這些存儲(chǔ)空間不存入存儲(chǔ)器空間,然后在程序加載的時(shí)候,將這段空間指向的區(qū)域清零。而函數(shù)中的非靜態(tài)的變量則存儲(chǔ)在棧中,地址不確定。

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

至少有一個(gè)串口驅(qū)動(dòng)

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

上下文切換邏輯

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

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

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

定時(shí)器可以正常使用

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

串口可正常輸入

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

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

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

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

移植經(jīng)驗(yàn)分享

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

編輯:jq

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

    關(guān)注

    463

    文章

    54007

    瀏覽量

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

    關(guān)注

    9

    文章

    2167

    瀏覽量

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

    關(guān)注

    32

    文章

    1613

    瀏覽量

    44869
  • main
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    6615

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    恩智浦亮相RT-Thread 20周年開(kāi)發(fā)者大會(huì)

    日前,“開(kāi)源向?qū)崱どa(chǎn)力進(jìn)化啟示錄”全球峰會(huì)暨RT-Thread 20周年開(kāi)發(fā)者大會(huì)在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動(dòng)中重磅亮相,展示雙方在共建RT-Thread OS開(kāi)發(fā)生態(tài)方面的新成果、新方案
    的頭像 發(fā)表于 01-26 09:07 ?552次閱讀

    移植最新版的rt-thread nano時(shí)程序進(jìn)入到entry就報(bào)錯(cuò),為什么?

    我在移植最新版的rt-thread nano時(shí)發(fā)現(xiàn)程序只要一進(jìn)去entry函數(shù)就直接跳到一個(gè)死循環(huán)里,我使用的編譯器是armgcc10.2版本。然而我移植舊版的rt-thread na
    發(fā)表于 10-09 07:17

    CubeMX移植RT-Thread 3.1.5文件重復(fù)怎么解決?

    CubeMX6.7.0內(nèi)移植RT-Thread Nano3.1.5文件重復(fù),主要是兩個(gè)部分 1、 和 兩個(gè)地方重復(fù)rtconfig.h 2、shell相關(guān)的文件也會(huì)重復(fù) 和 請(qǐng)問(wèn)下各位有沒(méi)有辦法可以解決這個(gè)問(wèn)題的?
    發(fā)表于 09-24 07:11

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發(fā)現(xiàn)聯(lián)網(wǎng)的時(shí)候,會(huì)自動(dòng)覆蓋 另lastet版本
    發(fā)表于 09-16 06:06

    Windows上使用ENV工具開(kāi)發(fā)基于先楫MCU的RT-Thread應(yīng)用

    前言Env是RT-Thread推出的開(kāi)發(fā)輔助工具,針對(duì)基于RT-Thread操作系統(tǒng)的項(xiàng)目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的menuconfig提供了簡(jiǎn)單易用的配置剪裁
    的頭像 發(fā)表于 08-29 12:22 ?1445次閱讀
    Windows上使用ENV工具開(kāi)發(fā)基于先楫MCU的<b class='flag-5'>RT-Thread</b>應(yīng)用

    在Ubuntu上開(kāi)發(fā)基于先楫MCU的RT-Thread應(yīng)用指南

    1、前言RT-ThreadEnv是RT-Thread推出的開(kāi)發(fā)輔助工具,針對(duì)基于RT-Thread操作系統(tǒng)的項(xiàng)目工程,提供編譯構(gòu)建環(huán)境、圖形化系統(tǒng)配置及軟件包管理功能。其內(nèi)置的menu
    的頭像 發(fā)表于 08-29 12:22 ?1776次閱讀
    在Ubuntu上開(kāi)發(fā)基于先楫MCU的<b class='flag-5'>RT-Thread</b>應(yīng)用指南

    【好書(shū)推薦】RT-Thread第20本相關(guān)書(shū)籍!《嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread原理與應(yīng)用》| 技術(shù)集結(jié)

    01內(nèi)容簡(jiǎn)介ContentSummary本書(shū)為讀者提供了一個(gè)全面、系統(tǒng)的RT-Thread學(xué)習(xí)指南,旨在幫助初學(xué)者及有經(jīng)驗(yàn)的開(kāi)發(fā)者掌握RT-Thread實(shí)時(shí)操作系統(tǒng)和STM32嵌入式微控制器的核心
    的頭像 發(fā)表于 08-24 10:05 ?1022次閱讀
    【好書(shū)推薦】<b class='flag-5'>RT-Thread</b>第20本相關(guān)書(shū)籍!《嵌入式實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>RT-Thread</b>原理與應(yīng)用》| 技術(shù)集結(jié)

    恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植

    本篇還是以移植RT-Thread Nano到MCUXpresso IDE為主,移植的代碼可以在nxpic.org.cn論壇搜索到。
    的頭像 發(fā)表于 08-21 09:49 ?6758次閱讀
    恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的<b class='flag-5'>RT-Thread</b> Nano<b class='flag-5'>移植</b>

    如何移植 RT-Thread Nano 并創(chuàng)建 2 個(gè)線程?

    基于 BSP 中的 GPIO_OutputInput 演示,展示了如何移植 RT-Thread Nano 并創(chuàng)建 2 個(gè)線程。
    發(fā)表于 08-19 07:45

    RT-Thread聯(lián)合瑞薩發(fā)起移植挑戰(zhàn)賽,邀您共創(chuàng)開(kāi)源生態(tài)!| 社區(qū)活動(dòng)

    為豐富嵌入式開(kāi)源生態(tài),推動(dòng)開(kāi)源RT-ThreadRTOS在更多硬件平臺(tái)的落地應(yīng)用,RT-Thread團(tuán)隊(duì)攜手全球領(lǐng)先的半導(dǎo)體解決方案商瑞薩電子,正式啟動(dòng)移植挑戰(zhàn)賽!本次活動(dòng)將針對(duì)瑞薩8
    的頭像 發(fā)表于 08-08 10:36 ?1067次閱讀
    <b class='flag-5'>RT-Thread</b>聯(lián)合瑞薩發(fā)起<b class='flag-5'>移植</b>挑戰(zhàn)賽,邀您共創(chuàng)開(kāi)源生態(tài)!| 社區(qū)活動(dòng)

    RT-Thread 遇上 Rust:安全內(nèi)核 RusT-Thread 的誕生

    大家好,我們是中國(guó)科學(xué)技術(shù)大學(xué)操作系統(tǒng)原理與設(shè)計(jì)(H)課oooooS小組。這個(gè)項(xiàng)目是我們的課程大作業(yè):參考RT-Thread架構(gòu),使用Rust搭建一個(gè)原生的嵌入式操作系統(tǒng)內(nèi)核。初識(shí)Rust是因?yàn)閤k
    的頭像 發(fā)表于 08-02 11:03 ?3538次閱讀
    <b class='flag-5'>RT-Thread</b> 遇上 Rust:安全內(nèi)核 RusT-<b class='flag-5'>Thread</b> 的誕生

    RT-Thread Nano硬核移植指南:手把手實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級(jí)2D圖形API,本文將手把手帶你實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配RT-Thread。文章分為上、下兩篇,將手把手教您移植。上篇對(duì)RT-ThreadNano內(nèi)核與Finsh組件進(jìn)行
    的頭像 發(fā)表于 07-17 14:40 ?3388次閱讀
    <b class='flag-5'>RT-Thread</b> Nano硬核<b class='flag-5'>移植</b>指南:手把手實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    RT-Thread榮獲2025優(yōu)秀開(kāi)源項(xiàng)目 | 新聞速遞

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

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

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

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

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