1. 创建空闲任务
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. 创建定时器任务
#if ( configUSE_TIMERS == 1 )
{
if( xReturn == pdPASS )
{
xReturn = xTimerCreateTimerTask();
}
else
{
mtCOVERAGE_TEST_MARKER();
}
}
#endif /* configUSE_TIMERS */
3. 关闭中断
/* 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. 调用SVC指令启动第一个任务
__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 }
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
FreeRTOS
+关注
关注
14文章
500浏览量
67301
发布评论请先 登录
相关推荐
热点推荐
关于FreeRTOS中断返回模式和堆栈指针的理解
发生中断嵌套时,中断返回后进入Handler模式。
应用程序时,MCU进入线程模式,可以使用MSP指针或者PSP指针。比如裸机程序使用MSP,FreeRTOS在启动第一个任务之前使用MSP,但是启动
发表于 05-06 15:04
FreeRTOS入门资料
性和可靠性。
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要
发表于 01-23 06:38
新思科技Silver解锁FreeRTOS虚拟ECU潜能
实际硬件的开发初期也能启动开发和测试工作。更重要的是,它能支撑软件定义汽车(SDV)流程(如持续集成与持续部署),在整个软件生命周期中均可利用 vECU,实现功能开发和漏洞修复的快速迭代。
深入解析rk平台Android Bootloader核心代码:从启动流程到AVB验证
作为Android设备启动的第一道“闸门”,Bootloader(以U-Boot为主)承担着初始化硬件、加载内核、验证镜像完整性的核心职责。今天我们拆解Rockchip平台
DR1 系列评估板 PS 端裸机与 FreeRTOS 开发案例手册
加载流程、测试步骤及关键代码逻辑。文档适配 Windows10 环境与专用开发工具,明确案例文件目录结构与注意事项。创龙科技通过标准化流程与实操细节,帮助开发者高效掌握 PS 端外设控制与 FreeRTOS 任务管理,适配嵌入式
ucos与freertos哪个好?
选择uCOS或FreeRTOS取决于项目的具体需求和资源限制。
FreeRTOS的优点包括:
更小的内核ROM和RAM占用,特别是在RAM方面,适合资源受限的嵌入式系统。
支持协程
发表于 12-05 07:13
FreeRTOS与uC/OS-II如何选择?
是巨大优势)。
你使用的 MCU 厂商默认推荐或深度集成了 FreeRTOS。
你需要支持多核处理器 (SMP)。
你需要极大的灵活性(如自定义内存分配)。
项目需要快速启动和开发。
选择 uC
发表于 11-13 07:15
FreeRTOS任务调度及优先级问题
大家好,最近本人在学习FreeRTOS ,之前有过一些裸机开发的经验,目前知道了FreeRTOS的任务是基于时间片轮转来调度,也就是知道了任务会基于各个时间片来运行。
于是联想了如果有一些外设芯片
发表于 11-06 02:18
d1哪吒开发板的启动流程分析
的可以研究很深的开发板。本文主要从研究D1启动流程的角度出发,探索一下D1的裸机开发实践。对于研究D1的底层裸机开发,首先需要知道可以玩那些东西,也可以对RISCV相关的软件生态有比较透彻的理解,本文会
发表于 10-29 06:44
为FreeRTOS增加新的设备驱动程序
如果你正在使用FreeRTOS构建嵌入式系统,并且考虑添加新的设备驱动程序,那么这篇文章很适合你。高效的设备集成不仅仅是让设备功能正常运行——更关乎模块化、可靠性和安全性。
求助,关于K230启动流程疑问求解
, GNU ld (GNU Binutils) 2.35) #1 SMP Sat Jun 21 23:51:35 CST 2025
[ 0.000000] earlycon: sbi0
上面是启动流程
发表于 07-11 06:42
【RA4L1-SENSOR】4、移植FreeRTOS-CLI
FreeRTOS提供有不同的组件为用户提供不同的功能,本文移植其中的FreeRTOS-CLI命令行工具到RA4L1-Sensor开发板上。
1、工程配置
参考下面的帖子中创建工程的过程,创建
发表于 06-26 22:30
OPENRTOS为FreeRTOS提供商业许可证
嵌入式操作系统是嵌入式系统的基石,是工业软件的基础。在市场占有率上,Eclipse基金会2024年物联网开发者调查表明,资源受限设备上的开发人员使用的嵌入式操作系统系统中FreeRTOS占29% ,长期是开源RTOS的首选。
详解FreeRTOS与SAFERTOS的区别
开源免费的FreeRTOS由Richard Barry在WHIS工作时创建,WHIS基于FreeRTOS的功能模型,通过完整的HAZOP分析,确定了功能模型和API中的所有的弱点,减轻所有薄弱环节,并采用IEC 61508 SIL 3的开发生命周期,重新设计实现了SAFE
飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析之uboot启动阶段
u-boot的relocation重定位操作。四、清除BSS段。五、调用board_init_r函数,执行后续的板级初始化操作,包括各种外设接口、中断、环境变量等。最后调用run_main_loop()函数,进入倒计时等待,等待超时后执行bootcmd启动内核。具体流程如
发表于 05-30 09:24
FreeRTOS启动流程
评论