首先下載官方的開發工具,包括MPLAB、XC32、Harmony,但是要想在MPLAB中創建Harmony的工程,得按照help_harmony_vol_I.pdf中的說明,先在MPLAB中安裝harmony的plug-in。
接下來進入我們的主題——殺雞就要用牛刀,點燈怎么用牛刀呢?那就把uCOS跑起來吧,在任務中去點燈!
原本的計劃是拿Micrium官網PIC32的BSP包過來移植,但是簡單地看了看Harmony的介紹文檔之后,發現它竟然支持常用的幾款RTOS,其中就有uCOS-III,隨即決定用Harmony創建uCOS的工程。創建工程、配置系統時鐘這兩步和參考文章中的方法都一樣,不羅嗦了;接下來開始就要自己配置Harmony Configurator了
1. 在Options中將Third Party Libraries中的uC/OS-III打開
2. 在_SYS_Tasks中點燈,后面的延遲1000個tick對于系統的默認配置來說就是延時1秒
然后我就發現沒有其他需要配置的了,難道移植uCOS的工作就這么結束了?這么簡單?不可能吧???趕快生成代碼、編譯、加載到板子上跑一下,果然沒那么順利,燈不閃。。。沒辦法,只能debug定位了。好在板子上自帶jtag調試模塊,打開MPLAB的debug功能,發現板子死在這兒了,異常!??!估計又得調一陣了。。。
不得不說MPLAB的調試功能還是相當強大的,Call Stack里還能找到發生異常的點,竟然在kernel中死了,按說uCOS的kernel已經很成熟了,不應該出這種低級問題
在前一句打個斷點看看異常是怎么發生的,結果令人詫異:就在給*p_ts賦值的時候發生了異常!這就是個局部變量啊,怎么能導致異常呢,看看它的地址確實有些詭異
翻開PIC32MX470的芯片手冊,找到芯片的memory map,發現0x9D0035FC竟然是Program Flash空間的地址,就這么用指針賦值的話肯定非法,可是p_ts是什么時候變成的這個值呢?
再仔細往前找,發現在發生異常前kernel有發生過調度,難道是調度之后寄存器恢復錯了?再跟下去發現確實是這樣,只要os調度后p_ts就不對了。我們知道uCOS的任務現場是存在棧中的,難不成有棧越界?工程里又沒什么應用代碼,應該不是應用代碼的問題,那會不會是配置的問題呢?查了下配置默認的最小堆棧size是64,系統中除了idle任務的堆棧是64,其他的都至少是512。MIPS和ARM不一樣,有32個通用寄存器,難不成64的堆棧size對保存現場來說太小了?改成128試試
修改之后重新生成代碼、編譯、下載,果然跑起來了,看來默認的64的idle任務堆棧確實設置小了
用uCOS-III點燈完成,也算小試了一把牛刀,但是沒有大規模的改代碼,就這么簡單的改了改配置就把RTOS跑了起來,這讓我心里隱隱地覺得有些不安,有什么焦慮呢,。
-
MPLAB
+關注
關注
9文章
220瀏覽量
67483
發布評論請先 登錄
求助,關于以編程方式配置DiplayPort MODES UFP_D引腳配置響應的疑問求解
如何不使用配置實用程序對SX3進行編程?
【RA-Eco-RA4M2開發板評測】1 RA4M2開發環境搭建
HDJB-9000數模一體繼電保護綜合測試儀運行實驗前試驗配置介紹

可編程PMIC:TPS6593EVM的TPS6593-Q1默認配置

Epson可編程晶振SG-8018/8101/9101如何使用SG-Writer II燒寫配置

使用purepath wireless configurator能否對編碼器AIC3254內置的miniDSP進行相應的配置?
溫升試驗條件和試驗原理
變頻串聯諧振交流耐壓試驗裝置的應用是什么?
請問CY8C6137BZI-F54用device configurator設定P0.4, P7.6有什么需要特別留意的地方嗎?
如何使用瑞薩RH850-F1KS4 Smart Configurator配置外設呢?

評論