國(guó)產(chǎn)GD32替代:RT-Thread在CotexM23上的起起伏伏
在如今芯片沉浮的大環(huán)境下,中國(guó)“芯”一直在暗暗發(fā)力,經(jīng)過(guò)卡脖子、等封裝、沒(méi)晶圓的窘境,下一步將會(huì)是什么情況不得而知。
項(xiàng)目需求下,如果只有PLAN A,風(fēng)險(xiǎn)等級(jí)就會(huì)被判定為為高。有PLAN B,風(fēng)險(xiǎn)等級(jí)也只是“海中一滴水”。如此,PLAN C、PLAN D成了公司立項(xiàng)的常態(tài)的趨勢(shì),甚至有些朋友將PLAN做到了“N”。
此情此景,人人都在暗自“搞備胎”,可想而知,這是到底有多慌。所以有一句話(huà),芯不在手,慌上心頭,只有捧在手里才是真“芯”
扯了這么多,似乎都是閑話(huà),與本次的內(nèi)容背道而馳,不過(guò)不用著急,好東西不怕晚,下面請(qǐng)出本次的主角:GD32E230C8T6芯片,搭載在GD32E230C-EVAL 開(kāi)發(fā)板上,我們將其稱(chēng)之為DEMO板,按照國(guó)際慣例,首先是圖片展示:
1、GD32E230系列芯片簡(jiǎn)介
ARM架構(gòu)毋庸置疑,但是核屬于CotexM23,MCU世界里面ARM家族的比較通用的是CotexM0,CotexM3,CotexM4等。
這CotexM23屬于什么東西,很是奇怪,查了一下,屬于ARMV8新的體系,百度一下ARMV8與ARMV7的區(qū)別,核心的區(qū)別是ARMV8為了滿(mǎn)足64位的機(jī)器,所以進(jìn)行了更新發(fā)展。
不過(guò)2011年就放出來(lái)了,話(huà)說(shuō)也是快10年了,這許多年的發(fā)展,可憐我孤陋寡聞,盡然全然不知道這個(gè)東西,看來(lái)知識(shí)體系還是需要不斷更新。
DataSheet的資源配置,全局呈現(xiàn)如下圖所示:
縱觀資源還是挺豐富,再看看配套DEMO板的裸機(jī)SDK,也是該有的都有GPIO、UART、ADC、IIC、SPI、I2S、IR、Timer等等
2、RT-Thread
不過(guò)不過(guò),這些都是裸機(jī)的,正如標(biāo)題,本文重點(diǎn)想說(shuō)的是RT-Thread在CotexM23上的起起伏伏,CotexM23已經(jīng)具備,只是RT-Thread還沒(méi)登場(chǎng),下面說(shuō)說(shuō)RT-Thread,當(dāng)然百度一搜那也是一堆,RT-Thread優(yōu)秀自然不用說(shuō),但是我的出發(fā)點(diǎn)是比較簡(jiǎn)單,因?yàn)樗菄?guó)產(chǎn)的RTOS(實(shí)時(shí)操作系統(tǒng)),國(guó)產(chǎn)系統(tǒng)配國(guó)產(chǎn)“芯”那也算的是真正意義上的中國(guó)“芯”,值得鼓勵(lì),值得擁有。
以下是RT-Thread自言自語(yǔ),摘抄自RT-Thread官網(wǎng):
RT-Thread 主要采用 C 語(yǔ)言編寫(xiě),淺顯易懂,方便移植。它把面向?qū)ο蟮脑O(shè)計(jì)方法應(yīng)用到實(shí)時(shí)系統(tǒng)設(shè)計(jì)中,使得代碼風(fēng)格優(yōu)雅、架構(gòu)清晰、系統(tǒng)模塊化并且可裁剪性非常好。針對(duì)資源受限的微控制器(MCU)系統(tǒng),可通過(guò)方便易用的工具,裁剪出僅需要 3KB Flash、1.2KB RAM 內(nèi)存資源的 NANO 版本(NANO 是 RT-Thread 官方于2017 年 7 月份發(fā)布的一個(gè)極簡(jiǎn)版內(nèi)核);而對(duì)于資源豐富的物聯(lián)網(wǎng)設(shè)備,RT-Thread 又能使用在線(xiàn)的軟件包管理工具,配合系統(tǒng)配置工具實(shí)現(xiàn)直觀快速的模塊化裁剪,無(wú)縫地導(dǎo)入豐富的軟件功能包,實(shí)現(xiàn)類(lèi)似 Android 的圖形界面及觸摸滑動(dòng)效果、智能語(yǔ)音交互效果等復(fù)雜功能。
相較于 Linux 操作系統(tǒng),RT-Thread 體積小,成本低,功耗低、啟動(dòng)快速,除此以外 RT-Thread 還具有實(shí)時(shí)性高、占用資源小等特點(diǎn),非常適用于各種資源受限(如成本、功耗限制等)的場(chǎng)合。雖然 32 位 MCU 是它的主要運(yùn)行平臺(tái),實(shí)際上很多帶有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列級(jí)別 CPU 的應(yīng)用處理器在特定應(yīng)用場(chǎng)合也適合使用 RT-Thread。
3、RTThread起起伏伏
NANO版本裁剪出僅需要 3KB Flash、1.2KB RAM 內(nèi)存資源,還是比較驚艷,相較與其他的RTOS還是很酷的,F(xiàn)reeRTOS就達(dá)不到如此小巧簡(jiǎn)潔,大道至簡(jiǎn),適用的場(chǎng)景就會(huì)更加豐富,一路通吃。本次就用NANO版本試驗(yàn)嘍。
3.1 RTThread試驗(yàn)移植
官方的移植教程,清晰明了。優(yōu)秀的團(tuán)隊(duì)出來(lái)的也是優(yōu)秀的作品。以下是官方權(quán)威鏈接。
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil
3.2 RTThread起起伏伏3.2.1起起伏伏第一幕
起伏現(xiàn)象:
原因分析:
rt_show_version()正常顯示,突然就直接報(bào)錯(cuò),掙扎許久,仔細(xì)分析了一番,RTThread超前初始化完成之后,便開(kāi)始了主函數(shù)(main)線(xiàn)程的運(yùn)行,因此可能是main線(xiàn)程出問(wèn)題,是不是main線(xiàn)程的棧太小了,查看main線(xiàn)程棧大小,一看是256Bytes,上面的一行Default:512。
解決方案:
將main線(xiàn)程棧改為512
編譯、燒錄、驗(yàn)證果然不錯(cuò)了,果然是內(nèi)有乾坤呀。至此起起伏伏第一幕完成。
3.2.2 起起伏伏第二幕
起伏現(xiàn)象:
承上啟下,層層遞進(jìn),RTThead控制臺(tái)能正常運(yùn)行,F(xiàn)insh沒(méi)有,no fish,無(wú)魚(yú)(語(yǔ))。
為什么就沒(méi)有Finsh組件,觀工程,F(xiàn)insh組件加載了,char rt_hw_console_getchar(void)函數(shù)也有了,神馬情況,還有坑????
難道真的是這個(gè)原因(搞不清到底是個(gè)啥),添加上,試驗(yàn)一下,結(jié)果還是唏噓不已,看來(lái)也不全然是這個(gè)問(wèn)題,那就只能再靜靜思考一下。
原因分析:
根據(jù)現(xiàn)象看本質(zhì),首先看看MSH的配置,棧的大小1024比較大了,應(yīng)該是沒(méi)問(wèn)題的,那難道是線(xiàn)程優(yōu)先級(jí)的問(wèn)題,優(yōu)先級(jí)21,這是個(gè)什么等級(jí),估計(jì)都被遺忘了,搶都搶不到執(zhí)行的權(quán)利吧,可憐呀。
解決方案:
試驗(yàn)一下,提升一下地位,修改一下等級(jí),加入搶占的行列梯隊(duì),于是修改了優(yōu)先級(jí)
保存、編譯、燒錄,哎呦MSH出來(lái)了,看來(lái)真是這個(gè)坑呀!至此起起伏伏第二幕完成。
2.3 起起伏伏番外
沒(méi)有伏,只有起,help一下,蹦出不少東西,至此為RT-Thread在CotexM23上的起起伏伏暫告一段落。
此文如有不恰當(dāng)出處,敬請(qǐng)諒解,路漫漫其修遠(yuǎn)兮,中國(guó)“芯”路歷程,我們一起見(jiàn)證起起伏伏,最后附上工程代碼。
?GD32E23x_Demo_RTT.rar?(1.28 MB, 點(diǎn)擊“閱讀原文”內(nèi)下載文件)
END
本文系21ic論壇資深網(wǎng)友yanzhengxin1原創(chuàng)撰寫(xiě)
▍