支持RT-Thread最新版本的瑞薩RA2E1開發(fā)板終于要大展身手了
“熟悉RT-Thread和瑞薩MCU的朋友都知道,當(dāng)前RT-Thread倉庫的主線代碼是不支持RA2E1這個(gè)BSP的。剛好,最近我在聯(lián)合瑞薩推廣一個(gè)叫《致敬未來的攻城獅計(jì)劃》,使用的就是RA2E1開發(fā)板,正好乘著這個(gè)機(jī)會(huì)把RA2E1這個(gè)BSP合入到主線去,想必一定非常有趣。
”
1 寫在前面
借助一個(gè)有趣的計(jì)劃,完成一個(gè)有趣的任務(wù),這本身就是一件很有趣的事情。
幫助一群未來的攻城獅快速地成長,把一顆芯片平臺(tái)讓更多人的發(fā)現(xiàn)并用起來,讓RT-Thread的生態(tài)越來越豐富,這些事情,我們正在做,也會(huì)一直做下去,希望有更多的人加入并參與我們的實(shí)踐中來。
本文的主要任務(wù),還是聚焦在如何將RA2E1并入到RT-Thread的主線倉庫。
2 《致敬未來的攻城獅計(jì)劃》
2.1 計(jì)劃內(nèi)容
“一個(gè)嶄新的計(jì)劃,尋找那群有志于向嵌入式發(fā)展的未來工程師!
”
活動(dòng)計(jì)劃初衷
《致敬未來的攻城獅計(jì)劃》來源于架構(gòu)師李肯的一個(gè)念想,我一直在尋找那群渴望學(xué)習(xí)并專注于提升自我的技術(shù)朋友,他們可能還是憧憬在象牙塔里的大學(xué)生,也可能是初出茅廬的小助理,還有可能是一群轉(zhuǎn)行無門的技術(shù)小白,但是他們都有一顆熱誠扎入嵌入式領(lǐng)域的心,我稱他們?yōu)椤?span style="max-width:100%;font-weight:700;color:rgb(248,57,41);">未來的攻城獅】,而我正是希望成為他們的星光指路人。
本次計(jì)劃的初衷與瑞薩MCU不謀而合,瑞薩非常支持這群《未來的攻城獅》,愿意為他們的持續(xù)學(xué)習(xí)提供必要的硬件支持。
正是在這樣的背景下,《致敬未來的攻城獅計(jì)劃》孕育而生,一群閃亮的新星即將登場,嵌入式的技術(shù)即將因你們而更加精彩!
想要了解更多關(guān)于這個(gè)計(jì)劃的內(nèi)容,可以關(guān)注我的個(gè)人社區(qū):https://bbs.csdn.net/topics/613916237 (復(fù)制鏈接到瀏覽器即可打開)
2.2 當(dāng)前進(jìn)展
《致敬未來的攻城獅計(jì)劃》,從3月中旬就開始宣傳推廣,經(jīng)過一周的報(bào)名篩選,我們挑選了10名優(yōu)秀的、有潛力的未來攻城獅,第一時(shí)間聚攏大家,聊一聊這次計(jì)劃的主要目的和開展形式,很快得到了大家的一致認(rèn)可和支持,計(jì)劃得以快速啟動(dòng)。
作為本次計(jì)劃的主贊助商,瑞薩也在收到審核通過的名單后,迅速把板子發(fā)過來,這不剛過去一周,很多小伙伴已經(jīng)把板子玩上幾天了,好不愜意。
昨天開始,我在社區(qū)發(fā)布本期計(jì)劃的激勵(lì)措施,號(hào)召大家再社區(qū)打卡學(xué)習(xí),現(xiàn)在好多小伙伴已經(jīng)開始火熱打卡學(xué)習(xí)了,歡迎大家來圍觀。(復(fù)制下面的鏈接到瀏覽器即可打開)
【致敬未來的攻城獅計(jì)劃】任務(wù)提交及獎(jiǎng)懲措施的相關(guān)說明 https://bbs.csdn.net/topics/614070195
【致敬未來的攻城獅計(jì)劃】學(xué)習(xí)打卡頻道 https://bbs.csdn.net/forums/recan-iot?typeId=2717193
image-20230323232547334image-20230323232348559
3 讓RA2E1支持RT-Thread
3.1 遇到的問題
最早我們在為《致敬未來的攻城獅計(jì)劃》選型開發(fā)板的時(shí)候,也有過考慮的,盡快要選擇一款能快速用上RT-Thread的板子。
當(dāng)?shù)弥猂T-Thread主線代碼其實(shí)已經(jīng)支持了RA2L1的,而我們選型的RA2E1與RS2L1基本是完全兼容的,只是存儲(chǔ)有些不一樣。
自然我的第一感覺也是,那就用它吧。應(yīng)該問題不大,畢竟還有RA2L1在那里兜底。
然而,不幸的是,當(dāng)我們參與計(jì)劃的小伙伴拿到板子后,根據(jù)我給他們的信息提示,去RT-Thread的主線倉庫拉取RA2L1的代碼時(shí),到KEIL中一編譯,竟然發(fā)現(xiàn)有20幾個(gè)編譯錯(cuò)誤。Word天吶,簡直有點(diǎn)不敢相信,然后一看倉庫代碼的提交記錄,最后一次提交大概是2個(gè)月前,感覺代碼也不舊?。吭趺磿?huì)這樣,有些納悶!
image-202303240012131543.2 查找資料
果然,白嫖是不可能的,這輩子都不可能白嫖的,關(guān)鍵時(shí)候還是要靠自己的雙手來解決問題(此處沒有開車)!
遇到問題,首先我想到的可能是 RT-Thread的官方技術(shù)論壇 (https://club.rt-thread.org/index.html),雖然現(xiàn)在的活躍度比較差一些,但整體來說,還是能夠找到一些有用的東西,幫助自己解決一些問題。
抱著試一下的心態(tài)去搜索,果然論壇里面很多介紹RA2L1這塊芯片(板子)的,也有一個(gè)搭建開發(fā)環(huán)境踩坑的筆記之類的,看起來還是比較多。
image-20230324001606438
經(jīng)過一番篩選,我找到了這一篇文章: RT-Thread-【開發(fā)板評(píng)測】Renesas RA2L 點(diǎn)亮LCD (SPI)RT-Thread問答社區(qū) - https://club.rt-thread.org/ask/article/89f43e3f0d1370be.html 里面的幾點(diǎn)對我接上面遇到的編譯問題就很有幫助。
image-20230324001708825
根據(jù)他的提示,很快我明白了原理,原理是RT-Thread主倉庫的代碼并不是根據(jù)這套板子來配置的,而是其他的一些配置,所以,需要解決編譯的問題,要修改以下幾個(gè)配置:
- 使能RA2L1的uart9
- RT-Thread的調(diào)試串口啟用uart9
- RT-Thread的串口驅(qū)動(dòng)版本選用V2
以上幾個(gè)步驟需要借助env工具,然后配置完了,重新使用scons --target=mdk5生成KEIL的工程。
經(jīng)過上面的配置后,再編譯新的工程,終于是0 error了。
image-202303240021162023.3 新的問題來了
本以為,探索之旅到此結(jié)束,沒想到把編譯出來的可執(zhí)行文件通過燒錄器下載到(RA2E1)板子上,居然跑不起來,連我們常見的燈也不閃了,簡直傻眼了。我開始想起最早的時(shí)候選項(xiàng)時(shí):RA2E1與RA2L1是兼容的!
該不會(huì)除了啥問題吧?排除掉是板子的問題以及接線的問題之后,我開始鎖定,非常有可能就是兩個(gè)板子不完全兼容導(dǎo)致的。
手上有調(diào)試器,自然先跑一把調(diào)試下看看。記得上一小節(jié)找到的那個(gè)帖子,有說他遇到的問題是直接開始,最后排查是串口的問題導(dǎo)致,注釋掉某一行代碼就解決了,我們也嘗試用這個(gè)小方法,還是不行,結(jié)果是一樣的,燈不閃爍,串口無輸出。
使用單步一調(diào)試,跳出這樣的出錯(cuò),本想去搜搜看,可是壓根沒有這樣關(guān)鍵字的資料。
image-20230324002829364
雖然沒有啥解決方法,但是從這張錯(cuò)誤中,我們可以看到,一定是MEMORY出問題了。
這時(shí)候我想起最早的選項(xiàng),兩者代碼上是兼容的,但是就是內(nèi)存不太一樣。
至此,我基本斷定了就是Memory Layout導(dǎo)致的問題,但是具體要怎么修改才行呢。還是沒有思路。
3.4 咨詢大神
自己想了一天,加上工作也比較忙,一直拖著沒有解決。
想著這個(gè)問題我不能托太久,不然學(xué)習(xí)的小伙伴,也沒法往下基于這個(gè)板子學(xué)習(xí)RT-Thread了。
于是我想到一個(gè)方法,那我就厚著臉皮去問一下瑞薩原廠的開發(fā)工程師吧。
之前參加 RA4M2網(wǎng)關(guān)設(shè)計(jì)大賽的時(shí)候,有加到RA的工程師,我就虛心地去請教了一下:
image-20230324003415509大家都工作忙,也不可能真的手把手教你去解決,關(guān)鍵時(shí)候還得靠自己。
從這次簡短的溝通,基本已經(jīng)完全確認(rèn)方向了,就是內(nèi)存的配置問題。
有了思路,就好辦了,問題應(yīng)該很快就有方法了。
3.5 潛心研究
在這里,我不得不提一句,瑞薩的資料是真的多,多到什么程度呢?就是多到你不知道該看哪個(gè)?或者說,究竟哪個(gè)文檔或資料才能找到你想要的東西。
image-20230324003833787既然上面大致都已經(jīng)定位到內(nèi)存的問題,那我首先要做的就是找出 RA2E1 和 RA2L1 在內(nèi)存上的差別究竟在哪里?
這些信息從哪里可以得出,那自然是官方的datasheet 最權(quán)威了。
最后,我也是大致翻看,發(fā)現(xiàn)這份《RA2E1硬件用戶手冊(中英).pdf》有講到Memory劃分的詳細(xì)內(nèi)容,既然RA2E1有,自然RA2L1也有類似的文檔,所以我就從官方找到了《RA2L1硬件用戶手冊(中英).pdf》。
分別找到他們的內(nèi)存劃分那一章節(jié):
image-20230324004203049image-20230324004243815image-20230324004402451image-20230324004331818有了這些內(nèi)存分布之后,基本就知道怎么改了。
3.6 試著解決問題
熟悉KEIL編譯環(huán)境的都知道,在KEIL里面,關(guān)于芯片的內(nèi)存分布是在一種叫分散文件的東西里面配置,它的文件名后綴是 .scat
順著工程目錄找到對應(yīng)的分散文件,看到里面開頭有這么一段:
#!armclang-mcpu=cortex-m4--target=arm-arm-none-eabi-E-xc-I.
#include"memory_regions.scat"
雖然不太懂它的語法,但是一猜就知道,這種就是文件包含,也就是說芯片的內(nèi)存劃分是單純放在memory_regions.scat文件里面。
這里,其實(shí)我還做了一個(gè)小動(dòng)作,就是我從其他小伙伴手上拿到一份,可以工作的示例工程(這個(gè)工程是使用瑞薩的配置工具,從0到1自己配置出來的),所以它里面的內(nèi)存劃分肯定是正確的。
兩個(gè)分散文件一拎出來,我一對比,就發(fā)現(xiàn)問題所在了:
image-20230324005115092
結(jié)合上一小節(jié)看到的RA2E1的內(nèi)存分布,一下子就明白了,RAM的起始地址必須配置成上圖中的右邊部分。
為了快速驗(yàn)證,我直接把小伙伴的分散文件替換成我本地的RA2E1工程(實(shí)則是RT-Thread倉庫的RA2L1工程)。
一編譯,同樣的0錯(cuò)誤可用,然后我就快速地發(fā)起功能驗(yàn)證。
3.7 皆大歡喜
看到這個(gè)小標(biāo)題自然就知道,問題迎刃而解,達(dá)到了我們預(yù)期的效果:燈也照常閃了,串口也正常輸出了,RT-Thread的標(biāo)志性的啟動(dòng)LOG輸出也來了,一切都回到熟悉的樣子。
image-20230324005532626我也在我們致敬未來攻城獅的小群里,第一時(shí)間發(fā)布了喜訊,號(hào)召大家盡快把RT-Thread學(xué)起來。
image-20230324005706003
對我的本次修改感興趣的可以關(guān)注我的代碼倉庫,不出意外的話,應(yīng)該拉下來就能編譯、燒錄、調(diào)試、運(yùn)行。有心者,請記一下這個(gè)倉庫地址:https://gitee.com/recan-li/ra4m2-rt-thread
4 小小總結(jié)
經(jīng)過這幾天的計(jì)劃開展和對RA2E1的摸索,有幾點(diǎn)東西想總結(jié)一下:
- 現(xiàn)在的就業(yè)環(huán)境可以說是非常卷,但是我能從這幫未來的攻城獅中看到上進(jìn)的求知欲,滿滿的都是欣慰;能帶這樣一幫優(yōu)秀的潛力股,是我的榮幸。
- 雖然有時(shí)候會(huì)收到一些,在我看來是比較簡單的問題,但對于初學(xué)者來說,可能就是一個(gè)一時(shí)半會(huì)難以跨越的門檻,這時(shí)候就是需要同伴、老師點(diǎn)撥一下,受點(diǎn)啟發(fā),一下子思路就打開了。
- 學(xué)習(xí)道路總是枯燥且漫長的,尤其像這次這樣,突然就給你一個(gè)你從來就沒有見過,更沒有接觸過的東西,要你在一個(gè)月內(nèi)學(xué)出點(diǎn)東西來,并以文檔或者視頻的方式,展示你的學(xué)習(xí)成果,這本身就是一件比較難的事情;如果你能從中克服自己的惰性,積極參與學(xué)習(xí),同時(shí)打破自己內(nèi)心的恐懼,埋下心來取堅(jiān)定地學(xué)習(xí)它,并用最飽滿的熱情去輸出你的成果,這本身就是一件很鍛煉人的事情。經(jīng)過這樣的一次學(xué)習(xí)訓(xùn)練,將來你遇到類似的工作場景,你一定要感謝現(xiàn)在努力上進(jìn)的你自己,因?yàn)楫?dāng)下培養(yǎng)的自學(xué)能力,你將受益一生。
- 程序猿最怕的兩個(gè)事情:一是,要接手(學(xué)習(xí))的項(xiàng)目沒有文檔;二是,自己的項(xiàng)目要自己去寫文檔!現(xiàn)在,我覺得我應(yīng)該補(bǔ)充一句:“文檔多了,也不一定是好事,滿城盡是黃金甲,到底哪個(gè)才是你真正需要的關(guān)鍵內(nèi)容,需要你的敏銳的檢索能力及專業(yè)篩選能力”。
- 工欲善其事,必先利其器:這里指的就是開發(fā)環(huán)境,很多小伙伴就是卡在這里,無法進(jìn)行下一步學(xué)習(xí);有點(diǎn)夸張的說,開發(fā)環(huán)境搞好了,50%就到手了。
- 從一堆看似無關(guān)緊要的錯(cuò)誤里面尋找解決問題的線索,這也是學(xué)習(xí)和解決問題能力的一種體現(xiàn),可以有意識(shí)地培養(yǎng)自己這方面的能力。
- 溫故而知新,放在寫代碼是也是完全講得通的;而與此對立面就是,長時(shí)間不維護(hù)的代碼,時(shí)間一久,拉出來可能就會(huì)出莫名其妙的問題,就像本次遇到的RT-Thread主倉庫的bsp/ra2l1,拉下來,編譯20幾個(gè)錯(cuò)誤,什么狀況,DDDD !
———————End———————
RT-Thread線下入門培訓(xùn)
1.免費(fèi)2.動(dòng)手實(shí)驗(yàn)+理論3.主辦方免費(fèi)提供開發(fā)板4.自行攜帶電腦,及插線板用于筆記本電腦充電5.參與者需要有C語言、單片機(jī)(ARM Cortex-M核)基礎(chǔ),請?zhí)崆鞍惭b好RT-Thread Studio 開發(fā)環(huán)境
立即掃碼報(bào)名
報(bào)名鏈接
https://jinshuju.net/f/UYxS2k
巡回城市:青島、北京、西安、成都、武漢、鄭州、杭州、深圳、上海、南京
你可以添加微信:rtthread2020 為好友,注明:公司+姓名,拉進(jìn)RT-Thread官方微信交流群!
你也可以把文章轉(zhuǎn)給學(xué)校老師等相關(guān)人員,讓RT-Thread可以惠及更多的開發(fā)者
原文標(biāo)題:工程師自述:如何將RA2E1并入到RT-Thread的主線倉庫
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
RT-Thread
+關(guān)注
關(guān)注
31文章
1300瀏覽量
40264
原文標(biāo)題:工程師自述:如何將RA2E1并入到RT-Thread的主線倉庫
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論