uTenux現在已經之類幾乎所有主流的cortex M的開發板,比如:ATMEL(愛特梅爾)、Cypress(賽普拉斯)、Freescale(飛思卡爾)、Infineon(英飛凌)、Nuvoton(新唐)、NXP(恩智浦)、SiliconLabs、Spansion、ST(意法半導體)、TI(德州儀器)。uTenux支持3個開發環境,IAR、Keil、uTstudio(悠龍開發套件)。正對個別開發板還進行支持其特有的開發環境,比如Cypress的PSoC Creator,ATMEL的Studio由于不能創建組(虛目錄)暫時沒有支持等...
介紹一下uTenux在cortex M系列上的移植方法,簡單敘述一下在Coretex M系列之間怎么進行移植。因為Cortex M系類具有統一的NVIC管理,統一的內存劃分。所以這樣比較容易。
簡單通俗了說移植uTenux就是:
1.根據具體開發板的中斷數目修改啟動文件。
2.根據具體開發板的Flash和SRAM的大小修改鏈接腳本。
3.實現UART的收發函數(bsp)。
4.修改配置文件文件。
下圖紅色框內是移植相關部分:
1.修改啟動文件startup.S:通過芯片手冊找到該芯片支持的中斷數目(不大于255),然后修改啟動文件中中斷向量號多刪少補到該芯片實際數目中斷數目減1。都寫成default_handler,因為uTenux支持動態修改定義向量表(M0除外,M0芯片假如用到了外設中斷,需要手動修改相應default_handler為中斷函數)。
2.修改鏈接腳本uTenux-flash:IAR鏈接腳本后綴名為icf、Keil鏈接腳本后綴名為sct、uTStudio鏈接腳本的后綴名為ld。通過查閱芯片手冊得到芯片的Flash和SRAM的大小。通過修改鏈接腳本來配置uTenux各個節的大小,Flash配置為實際的大小,SRAM分配給各個節,注意不要超過SARM的實際大小就好。一般向量表配置大小為向量個數*4轉成16進制;BSSDATA段一般分配7K左右(要是配置的系統對象多的話,需將其調大點);用戶區一般分配4K;棧區分配0K,這個并不是說不使用棧空間,而是因為cortexM的棧時向下增長的,這樣的話就會占用的用戶區的一部分空間,幸好這個棧就是剛剛啟動的時候使用,當uTenux內核起來以后這部分空間就沒有用了,覆蓋了也沒有事;系統區是uTenux運行時使用的空間比如任務棧空間,一般是將SRAM剩余的所有空間都分到這里。這個分配方法僅供參考,具體可以根據實際情況作調整,系統區分配的最大并不代表系統需要占很大的空間,只是為了寫應用程序好擴展而預留的。
3.實現bsp函數,其實就是UART和看門狗,這些函數在tm_bsp.c中。這些其實不是uTenux運行時必要的,實現它完全是為了打印一些提示信息,在實際應用中,完全可以再配置文件中將TK_USE_MESSAGE選項關掉,不讓其輸出。在這個文件中如果該芯片沒有FPU完全可以將相關的代碼移除掉,也可以通過關掉配置文件中的使用FPU開關宏將其關掉。主要有初始化flash(很多芯片無需設置);初始化時鐘(uTenux默認跑在最高頻);初始化看門狗(也就是將其關閉);初始化UART;然后將UART的收發函數體也實現了。具體怎么設置可以通過參考芯片生產商提供的官方例程中扒過來。這里用到了外設庫,所以這個也需要添加工程中。
4.修改配置文件tk_config_depend.h。這個文件使用來配置uTenux的,比如systick中斷頻率,系統對象的數目,是否使用FPU,是否開啟debug,和hook選項,是否打印信息等。在這里不用管那么多,只需要修改幾個地方就行,首先還是分配Flash和SRAM空間,一定要和鏈接腳本的配置相同哦,至于這里還需要配置一次,大概是為了uTenux在各個芯片上移植的方便性,和以后uTenux繼續劃分存儲空間的靈活性。TK_ROM_VECTOR_NUMBER和TK_RAM_VECTOR_NUMBER配置成該芯片實際的中斷向量的數目。其次修改時鐘KNL_CFG_TIMER_CLOCK為剛才bsp中所配置的頻率,單位為MHz。最后是錦上添花的操作,將KNL_CFG_BOOT_MESSAGE提示信息修改為所移植的開發板的名稱。
至此,修改代碼的部分大體上就完成了。
需要注意的是如果移植的是如果移植的芯片如果是M0的話,會報BSSDATA段空間不足的錯誤,此時建議將系統對象配置的少一點。畢竟M0的空間比較少。
以上修改都是針對代碼的,以下是針對工程的。
因為代碼改完了,如果對開發環境不熟悉的話編譯還是會有很多錯誤的。因為芯片變了可能使用的ARM指令集不一樣,使用的外設庫不一樣,編譯頭文件搜索路徑可能沒有修改正確,條件編譯宏可能沒有設正確。這些都是需要修改的。IAR和Keil相似,uTStudio使用的是GCC工具鏈配置需要配的地方比較多。如果有必要擇日再續一貼。