1. 創(chuàng)建空閑任務(wù)
xIdleTaskHandle = xTaskCreateStatic( prvIdleTask, configIDLE_TASK_NAME, ulIdleTaskStackSize, ( void * ) NULL, /*lint !e961. The cast is not redundant for all compilers. */ portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */ pxIdleTaskStackBuffer, pxIdleTaskTCBBuffer ); /*lint !e961 MISRA exception, justified as it is not a redundant explicit cast to all supported compilers. */
2. 創(chuàng)建定時(shí)器任務(wù)
#if ( configUSE_TIMERS == 1 )
{
if( xReturn == pdPASS )
{
xReturn = xTimerCreateTimerTask();
}
else
{
mtCOVERAGE_TEST_MARKER();
}
}
#endif /* configUSE_TIMERS */
3. 關(guān)閉中斷
/* Interrupts are turned off here, to ensure a tick does not occur before or during the call to xPortStartScheduler(). The stacks of the created tasks contain a status word with interrupts switched on so interrupts will automatically get re-enabled when the first task starts to run. */ portDISABLE_INTERRUPTS();
4. 初始化全局變量
xNextTaskUnblockTime = portMAX_DELAY; xSchedulerRunning = pdTRUE; xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;
5. 初始化MSP
6. 使能全局中斷
7. 調(diào)用SVC指令啟動(dòng)第一個(gè)任務(wù)
__asm void prvStartFirstTask( void ) { PRESERVE8 /* Use the NVIC offset register to locate the stack. */ ldr r0, =0xE000ED08 ldr r0, [r0] ldr r0, [r0] /* Set the msp back to the start of the stack. */ msr msp, r0 /* Clear the bit that indicates the FPU is in use in case the FPU was used before the scheduler was started - which would otherwise result in the unnecessary leaving of space in the SVC stack for lazy saving of FPU registers. */ mov r0, #0 msr control, r0 /* Globally enable interrupts. */ cpsie i cpsie f dsb isb /* Call SVC to start the first task. */ svc 0 nop nop }
審核編輯 黃宇
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
FreeRTOS
+關(guān)注
關(guān)注
14文章
500瀏覽量
67301
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
關(guān)于FreeRTOS中斷返回模式和堆棧指針的理解
發(fā)生中斷嵌套時(shí),中斷返回后進(jìn)入Handler模式。
應(yīng)用程序時(shí),MCU進(jìn)入線程模式,可以使用MSP指針或者PSP指針。比如裸機(jī)程序使用MSP,FreeRTOS在啟動(dòng)第一個(gè)任務(wù)之前使用MSP,但是啟動(dòng)
發(fā)表于 05-06 15:04
FreeRTOS入門資料
性和可靠性。
FreeRTOS是一個(gè)迷你的實(shí)時(shí)操作系統(tǒng)內(nèi)核。作為一個(gè)輕量級(jí)的操作系統(tǒng),功能包括:任務(wù)管理、時(shí)間管理、信號(hào)量、消息隊(duì)列、內(nèi)存管理、記錄功能、軟件定時(shí)器、協(xié)程等,可基本滿足較小系統(tǒng)的需要
發(fā)表于 01-23 06:38
新思科技Silver解鎖FreeRTOS虛擬ECU潛能
實(shí)際硬件的開發(fā)初期也能啟動(dòng)開發(fā)和測(cè)試工作。更重要的是,它能支撐軟件定義汽車(SDV)流程(如持續(xù)集成與持續(xù)部署),在整個(gè)軟件生命周期中均可利用 vECU,實(shí)現(xiàn)功能開發(fā)和漏洞修復(fù)的快速迭代。
深入解析rk平臺(tái)Android Bootloader核心代碼:從啟動(dòng)流程到AVB驗(yàn)證
作為Android設(shè)備啟動(dòng)的第一道“閘門”,Bootloader(以U-Boot為主)承擔(dān)著初始化硬件、加載內(nèi)核、驗(yàn)證鏡像完整性的核心職責(zé)。今天我們拆解Rockchip平臺(tái)
DR1 系列評(píng)估板 PS 端裸機(jī)與 FreeRTOS 開發(fā)案例手冊(cè)
加載流程、測(cè)試步驟及關(guān)鍵代碼邏輯。文檔適配 Windows10 環(huán)境與專用開發(fā)工具,明確案例文件目錄結(jié)構(gòu)與注意事項(xiàng)。創(chuàng)龍科技通過(guò)標(biāo)準(zhǔn)化流程與實(shí)操細(xì)節(jié),幫助開發(fā)者高效掌握 PS 端外設(shè)控制與 FreeRTOS 任務(wù)管理,適配嵌入式
ucos與freertos哪個(gè)好?
選擇uCOS或FreeRTOS取決于項(xiàng)目的具體需求和資源限制。
FreeRTOS的優(yōu)點(diǎn)包括:
更小的內(nèi)核ROM和RAM占用,特別是在RAM方面,適合資源受限的嵌入式系統(tǒng)。
支持協(xié)程
發(fā)表于 12-05 07:13
FreeRTOS與uC/OS-II如何選擇?
是巨大優(yōu)勢(shì))。
你使用的 MCU 廠商默認(rèn)推薦或深度集成了 FreeRTOS。
你需要支持多核處理器 (SMP)。
你需要極大的靈活性(如自定義內(nèi)存分配)。
項(xiàng)目需要快速啟動(dòng)和開發(fā)。
選擇 uC
發(fā)表于 11-13 07:15
FreeRTOS任務(wù)調(diào)度及優(yōu)先級(jí)問(wèn)題
大家好,最近本人在學(xué)習(xí)FreeRTOS ,之前有過(guò)一些裸機(jī)開發(fā)的經(jīng)驗(yàn),目前知道了FreeRTOS的任務(wù)是基于時(shí)間片輪轉(zhuǎn)來(lái)調(diào)度,也就是知道了任務(wù)會(huì)基于各個(gè)時(shí)間片來(lái)運(yùn)行。
于是聯(lián)想了如果有一些外設(shè)芯片
發(fā)表于 11-06 02:18
d1哪吒開發(fā)板的啟動(dòng)流程分析
的可以研究很深的開發(fā)板。本文主要從研究D1啟動(dòng)流程的角度出發(fā),探索一下D1的裸機(jī)開發(fā)實(shí)踐。對(duì)于研究D1的底層裸機(jī)開發(fā),首先需要知道可以玩那些東西,也可以對(duì)RISCV相關(guān)的軟件生態(tài)有比較透徹的理解,本文會(huì)
發(fā)表于 10-29 06:44
為FreeRTOS增加新的設(shè)備驅(qū)動(dòng)程序
如果你正在使用FreeRTOS構(gòu)建嵌入式系統(tǒng),并且考慮添加新的設(shè)備驅(qū)動(dòng)程序,那么這篇文章很適合你。高效的設(shè)備集成不僅僅是讓設(shè)備功能正常運(yùn)行——更關(guān)乎模塊化、可靠性和安全性。
求助,關(guān)于K230啟動(dòng)流程疑問(wèn)求解
, GNU ld (GNU Binutils) 2.35) #1 SMP Sat Jun 21 23:51:35 CST 2025
[ 0.000000] earlycon: sbi0
上面是啟動(dòng)流程
發(fā)表于 07-11 06:42
【RA4L1-SENSOR】4、移植FreeRTOS-CLI
FreeRTOS提供有不同的組件為用戶提供不同的功能,本文移植其中的FreeRTOS-CLI命令行工具到RA4L1-Sensor開發(fā)板上。
1、工程配置
參考下面的帖子中創(chuàng)建工程的過(guò)程,創(chuàng)建
發(fā)表于 06-26 22:30
OPENRTOS為FreeRTOS提供商業(yè)許可證
嵌入式操作系統(tǒng)是嵌入式系統(tǒng)的基石,是工業(yè)軟件的基礎(chǔ)。在市場(chǎng)占有率上,Eclipse基金會(huì)2024年物聯(lián)網(wǎng)開發(fā)者調(diào)查表明,資源受限設(shè)備上的開發(fā)人員使用的嵌入式操作系統(tǒng)系統(tǒng)中FreeRTOS占29% ,長(zhǎng)期是開源RTOS的首選。
詳解FreeRTOS與SAFERTOS的區(qū)別
開源免費(fèi)的FreeRTOS由Richard Barry在WHIS工作時(shí)創(chuàng)建,WHIS基于FreeRTOS的功能模型,通過(guò)完整的HAZOP分析,確定了功能模型和API中的所有的弱點(diǎn),減輕所有薄弱環(huán)節(jié),并采用IEC 61508 SIL 3的開發(fā)生命周期,重新設(shè)計(jì)實(shí)現(xiàn)了SAFE
飛凌嵌入式ElfBoard ELF 1板卡-uboot啟動(dòng)流程分析之uboot啟動(dòng)階段
u-boot的relocation重定位操作。四、清除BSS段。五、調(diào)用board_init_r函數(shù),執(zhí)行后續(xù)的板級(jí)初始化操作,包括各種外設(shè)接口、中斷、環(huán)境變量等。最后調(diào)用run_main_loop()函數(shù),進(jìn)入倒計(jì)時(shí)等待,等待超時(shí)后執(zhí)行bootcmd啟動(dòng)內(nèi)核。具體流程如
發(fā)表于 05-30 09:24
FreeRTOS啟動(dòng)流程
評(píng)論