快速看了Freertos的官網(wǎng)教程,及野火FreeRTOS內(nèi)核實現(xiàn)及應(yīng)用。那么對FreeRTOS的應(yīng)用及OS任務(wù)切換原理有了初步了解。
先說下移植的步驟,首先了解了任務(wù)切換的原理,主要是內(nèi)核寄存器的操作。Freertos的文件夾設(shè)計的已經(jīng)很好了,設(shè)備及核心代碼分離。TC2x的內(nèi)核是TC1.6版本,其中包括了上下文切換寄存器。
關(guān)于移植FreeRTOS的步驟,官網(wǎng)getting start有寫,第一步就是尋找device,就是找到此芯片。結(jié)果我沒有找到英飛凌TC2x芯片,只找到TC1782芯片。由于我先了解了OS任務(wù)切換的原理,主要和芯片相關(guān)的文件在portable文件夾下,而且主要是操作內(nèi)核寄存器,而英飛凌的TC1782在官網(wǎng)搜索了下,內(nèi)核是TC1.3。說白了都是Trcore版本我覺得應(yīng)該都是差不多的。官網(wǎng)下載了core相關(guān)的UM,包括TC1.3,TC1.6V,TC1.6P/E。先對比了下,覺得是可以拿TC1782來充當(dāng)TC2x的。在TC1782中運行bat即可生成工程代碼。
建立工程后,先折騰了一把,把編譯通過了。我把link文件都替換為了TC2x help工程中的,并且把interrupte及cpu pll也進(jìn)行了替換,因為我查了他們的主頻率是不同的。另外一個特點是TC1782中代碼使用的是單核的,我就先用單核吧!
包括添加頭文件,添加編譯選項-fdollars-in-identifiers。
"D:\HIGHTEC\toolchains\tricore\v4.9.1.0-infineon-2.0\tricore\include"
"{ProjName}/RTOSDemo/Common_Demo_Source/include}"
"{ProjName}/RTOSDemo}"
"{ProjName}/RTOSDemo/FreeRTOS_Source/include}"
"{ProjName}/RTOSDemo/FreeRTOS_Source/portable/GCC/TriCore_1782}"
第二步改頭換面,包括頭文件都改成了TC2x的設(shè)備頭文件。又折騰了一把,編譯通過了,并且ram編譯說溢出,改成rom編譯,反正我是要燒寫到flash中的。然后把LED燈改成了P33.8、P33.9、P33.10。最后燒錄到開發(fā)板。LED成功閃爍,并且沒有跑飛。
看了下創(chuàng)建的task,pxReadyTasksLists里面優(yōu)先級為0的有18個,優(yōu)先級為1的有7個。原因是mainCREATE_SIMPLE_LED_FLASHER_DEMO_ONLY宏定義設(shè)置為了0。感覺還是比較順利的。
后來手工刪除了prvOptionallyCreateComprehensveTestApplication中的很多task,只留下原版的3個ledTASK及一個timerdemoTask,另外必須要添加的空閑task。P33.8的LED每隔5mms進(jìn)行一次PIN角翻轉(zhuǎn)。
代碼如下
/* 500ms---0,1000ms--1,2000ms--2 */
xFlashRate = ledFLASH_RATE_BASE*(1+uxLED);
xFlashRate /= portTICK_PERIOD_MS;
xLastFlashTime = xTaskGetTickCount();
for(;;)
{
vTaskDelayUntil( &xLastFlashTime, xFlashRate );
vParTestToggleLED( uxLED );
}
示波器測試驗證了下,還是比較準(zhǔn)確的,感覺做了理論準(zhǔn)備后,再動手,還是很順利的呢!后續(xù)會進(jìn)行RTOS的深入學(xué)習(xí),主要是看懂關(guān)鍵代碼,并且達(dá)到可以靈活修改的程度。


core寄存器截圖
