在CodeWarrior編譯環(huán)境下運行μC/OS―III
3.3 修改文件
前面提到,uC/OS—III和uC/CPU中需要移植的代碼文件在不同的編譯器下需要稍作修改。其中,C文件與編譯器無關(guān),而匯編文件從IAR轉(zhuǎn)到CodeWarrior有幾個地方需要修改,這涉及cpu_a.a(chǎn)sm和os_cpu_a.a(chǎn)sm兩個文件,說明如下:
①在CodeWarrior的匯編文件中,默認(rèn)標(biāo)號都以“:”結(jié)尾,編譯指令都以“.”開頭。雖然也可以在工程設(shè)置里取消該限制,但還是建議按照該格式編寫代碼。因此,請檢查匯編代碼是否符合上述要求。
②在CodeWarrior的匯編文件中,聲明全局函數(shù)用的是.global,而IAR中用的是PUBLIC,如IAR中的“PUB-LIC OSStartHighRdy”應(yīng)改為“.global OSStartHighRdy”。
③在匯編文件中,代碼前要進(jìn)行代碼段的聲明,如IAR中的“RSEG CODE:CODE:NOROOT(2)”在CodeWarrior里應(yīng)改為“.text,code”
3.4 添加頭文件路徑
右鍵點擊工程名,選擇“Properties”→“C/C++Build”→“Settings”,在“ARM Compile”→“Input”頁面可以添加頭文件搜索路徑,把工程中用到的頭文件所在的路徑加上,添加時建議使用相對路徑(相對工程目錄),如圖4所示。本文引用地址:http://butianyuan.cn/article/170659.htm
3.5 修改中斷向量衰
CodeWarrior自動生成的kinetis_sysinit.c文件包含了startup代碼和中斷向量表,把μC/OS—Ⅲ用到的兩個中斷向量加入中斷向量表,代碼如下:
PendSV中斷和SysTick定時器集成于Cortex—M3/4內(nèi)核中,專門用于OS的任務(wù)切換和時鐘節(jié)拍。因此,只要是使用Cortex—M3/4內(nèi)核的單片機(jī),這部分的移植代碼都是通用的。
3.6 代碼調(diào)試
在進(jìn)行μC/OS—III應(yīng)用開發(fā)時,應(yīng)先從最小系統(tǒng)開始調(diào)試。在配置文件里把不需要的功能先關(guān)掉,如消息隊列、信號量、hook函數(shù)、統(tǒng)計任務(wù)等。在用戶程序里執(zhí)行完硬件相關(guān)的初始化后,先建立一個簡單的任務(wù)(即起始任務(wù)),然后測試任務(wù)調(diào)度是否正常。注意,這時在運行的還有μC/OS—III內(nèi)部的空閑任務(wù)。
如果任務(wù)調(diào)度正常,可在起始任務(wù)里初始化并打開時鐘節(jié)拍中斷,然后可通過斷點調(diào)試等手段測試時鐘中斷服務(wù)程序是否得到正確執(zhí)行。確認(rèn)后可在起始任務(wù)里調(diào)用延時相關(guān)的函數(shù),如以一定的頻率閃燈,或者向串口輸出信息。如果上述測試通過,那么意味著μC/OS—III已經(jīng)運行起來了,接下來用戶就可以一步步按照應(yīng)用需求進(jìn)行開發(fā)了。
結(jié)語
使用CodeWarrior集成開發(fā)環(huán)境的讀者,只要按照以上步驟,即可在Kinetis系列單片機(jī)上完成μC/OS—III的編譯和運行。本文所講述的步驟也可用于其他開發(fā)環(huán)境,遵循Micrium官方的文件組織結(jié)構(gòu),可使得工程目錄結(jié)構(gòu)清晰規(guī)范,方便代碼的升級和共享。
51單片機(jī)相關(guān)文章:51單片機(jī)教程
評論