專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

uTenux的移植方法(cortex M)

作者:未知   來源:Levi之家的空間   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月16日   【字體:

uTenux現(xiàn)在已經(jīng)之類幾乎所有主流的cortex M的開發(fā)板,比如:ATMEL(愛特梅爾)、Cypress(賽普拉斯)、Freescale(飛思卡爾)、Infineon(英飛凌)、Nuvoton(新唐)、NXP(恩智浦)、SiliconLabs、Spansion、ST(意法半導(dǎo)體)、TI(德州儀器)。uTenux支持3個(gè)開發(fā)環(huán)境,IAR、Keil、uTstudio(悠龍開發(fā)套件)。正對個(gè)別開發(fā)板還進(jìn)行支持其特有的開發(fā)環(huán)境,比如Cypress的PSoC Creator,ATMEL的Studio由于不能創(chuàng)建組(虛目錄)暫時(shí)沒有支持等...

 

介紹一下uTenux在cortex M系列上的移植方法,簡單敘述一下在Coretex M系列之間怎么進(jìn)行移植。因?yàn)镃ortex M系類具有統(tǒng)一的NVIC管理,統(tǒng)一的內(nèi)存劃分。所以這樣比較容易。

簡單通俗了說移植uTenux就是:

1.根據(jù)具體開發(fā)板的中斷數(shù)目修改啟動(dòng)文件。

2.根據(jù)具體開發(fā)板的Flash和SRAM的大小修改鏈接腳本。

3.實(shí)現(xiàn)UART的收發(fā)函數(shù)(bsp)。

4.修改配置文件文件。

下圖紅色框內(nèi)是移植相關(guān)部分:

1.修改啟動(dòng)文件startup.S:通過芯片手冊找到該芯片支持的中斷數(shù)目(不大于255),然后修改啟動(dòng)文件中中斷向量號(hào)多刪少補(bǔ)到該芯片實(shí)際數(shù)目中斷數(shù)目減1。都寫成default_handler,因?yàn)閡Tenux支持動(dòng)態(tài)修改定義向量表(M0除外,M0芯片假如用到了外設(shè)中斷,需要手動(dòng)修改相應(yīng)default_handler為中斷函數(shù))。

2.修改鏈接腳本uTenux-flash:IAR鏈接腳本后綴名為icf、Keil鏈接腳本后綴名為sct、uTStudio鏈接腳本的后綴名為ld。通過查閱芯片手冊得到芯片的Flash和SRAM的大小。通過修改鏈接腳本來配置uTenux各個(gè)節(jié)的大小,F(xiàn)lash配置為實(shí)際的大小,SRAM分配給各個(gè)節(jié),注意不要超過SARM的實(shí)際大小就好。一般向量表配置大小為向量個(gè)數(shù)*4轉(zhuǎn)成16進(jìn)制;BSSDATA段一般分配7K左右(要是配置的系統(tǒng)對象多的話,需將其調(diào)大點(diǎn));用戶區(qū)一般分配4K;棧區(qū)分配0K,這個(gè)并不是說不使用棧空間,而是因?yàn)閏ortexM的棧時(shí)向下增長的,這樣的話就會(huì)占用的用戶區(qū)的一部分空間,幸好這個(gè)棧就是剛剛啟動(dòng)的時(shí)候使用,當(dāng)uTenux內(nèi)核起來以后這部分空間就沒有用了,覆蓋了也沒有事;系統(tǒng)區(qū)是uTenux運(yùn)行時(shí)使用的空間比如任務(wù)?臻g,一般是將SRAM剩余的所有空間都分到這里。這個(gè)分配方法僅供參考,具體可以根據(jù)實(shí)際情況作調(diào)整,系統(tǒng)區(qū)分配的最大并不代表系統(tǒng)需要占很大的空間,只是為了寫應(yīng)用程序好擴(kuò)展而預(yù)留的。

3.實(shí)現(xiàn)bsp函數(shù),其實(shí)就是UART和看門狗,這些函數(shù)在tm_bsp.c中。這些其實(shí)不是uTenux運(yùn)行時(shí)必要的,實(shí)現(xiàn)它完全是為了打印一些提示信息,在實(shí)際應(yīng)用中,完全可以再配置文件中將TK_USE_MESSAGE選項(xiàng)關(guān)掉,不讓其輸出。在這個(gè)文件中如果該芯片沒有FPU完全可以將相關(guān)的代碼移除掉,也可以通過關(guān)掉配置文件中的使用FPU開關(guān)宏將其關(guān)掉。主要有初始化flash(很多芯片無需設(shè)置);初始化時(shí)鐘(uTenux默認(rèn)跑在最高頻);初始化看門狗(也就是將其關(guān)閉);初始化UART;然后將UART的收發(fā)函數(shù)體也實(shí)現(xiàn)了。具體怎么設(shè)置可以通過參考芯片生產(chǎn)商提供的官方例程中扒過來。這里用到了外設(shè)庫,所以這個(gè)也需要添加工程中。

4.修改配置文件tk_config_depend.h。這個(gè)文件使用來配置uTenux的,比如systick中斷頻率,系統(tǒng)對象的數(shù)目,是否使用FPU,是否開啟debug,和hook選項(xiàng),是否打印信息等。在這里不用管那么多,只需要修改幾個(gè)地方就行,首先還是分配Flash和SRAM空間,一定要和鏈接腳本的配置相同哦,至于這里還需要配置一次,大概是為了uTenux在各個(gè)芯片上移植的方便性,和以后uTenux繼續(xù)劃分存儲(chǔ)空間的靈活性。TK_ROM_VECTOR_NUMBER和TK_RAM_VECTOR_NUMBER配置成該芯片實(shí)際的中斷向量的數(shù)目。其次修改時(shí)鐘KNL_CFG_TIMER_CLOCK為剛才bsp中所配置的頻率,單位為MHz。最后是錦上添花的操作,將KNL_CFG_BOOT_MESSAGE提示信息修改為所移植的開發(fā)板的名稱。

至此,修改代碼的部分大體上就完成了。

需要注意的是如果移植的是如果移植的芯片如果是M0的話,會(huì)報(bào)BSSDATA段空間不足的錯(cuò)誤,此時(shí)建議將系統(tǒng)對象配置的少一點(diǎn)。畢竟M0的空間比較少。

 

以上修改都是針對代碼的,以下是針對工程的。

因?yàn)榇a改完了,如果對開發(fā)環(huán)境不熟悉的話編譯還是會(huì)有很多錯(cuò)誤的。因?yàn)樾酒兞丝赡苁褂玫腁RM指令集不一樣,使用的外設(shè)庫不一樣,編譯頭文件搜索路徑可能沒有修改正確,條件編譯宏可能沒有設(shè)正確。這些都是需要修改的。IAR和Keil相似,uTStudio使用的是GCC工具鏈配置需要配的地方比較多。如果有必要擇日再續(xù)一貼。

關(guān)閉窗口

相關(guān)文章