0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS启动流程

jf_59794894 来源:jf_59794894 作者:jf_59794894 2026-05-06 15:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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,实现功能开发和漏洞修复的快速迭代。
    的头像 发表于 01-22 12:46 845次阅读
    新思科技Silver解锁<b class='flag-5'>FreeRTOS</b>虚拟ECU潜能

    深入解析rk平台Android Bootloader核心代码:从启动流程到AVB验证

    作为Android设备启动的第一道“闸门”,Bootloader(以U-Boot为主)承担着初始化硬件、加载内核、验证镜像完整性的核心职责。今天我们拆解Rockchip平台
    的头像 发表于 01-22 07:06 525次阅读
    深入解析rk平台Android Bootloader核心代码:从<b class='flag-5'>启动</b><b class='flag-5'>流程</b>到AVB验证

    DR1 系列评估板 PS 端裸机与 FreeRTOS 开发案例手册

    加载流程、测试步骤及关键代码逻辑。文档适配 Windows10 环境与专用开发工具,明确案例文件目录结构与注意事项。创龙科技通过标准化流程与实操细节,帮助开发者高效掌握 PS 端外设控制与 FreeRTOS 任务管理,适配嵌入式
    的头像 发表于 01-19 17:12 331次阅读
    DR1 系列评估板 PS 端裸机与 <b class='flag-5'>FreeRTOS</b> 开发案例手册

    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构建嵌入式系统,并且考虑添加新的设备驱动程序,那么这篇文章很适合你。高效的设备集成不仅仅是让设备功能正常运行——更关乎模块化、可靠性和安全性。
    的头像 发表于 08-06 15:44 1136次阅读
    为<b class='flag-5'>FreeRTOS</b>增加新的设备驱动程序

    求助,关于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的首选。
    的头像 发表于 06-06 09:43 1063次阅读

    详解FreeRTOS与SAFERTOS的区别

    开源免费的FreeRTOS由Richard Barry在WHIS工作时创建,WHIS基于FreeRTOS的功能模型,通过完整的HAZOP分析,确定了功能模型和API中的所有的弱点,减轻所有薄弱环节,并采用IEC 61508 SIL 3的开发生命周期,重新设计实现了SAFE
    的头像 发表于 06-04 16:58 1159次阅读
    详解<b class='flag-5'>FreeRTOS</b>与SAFERTOS的区别

    飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析之uboot启动阶段

    u-boot的relocation重定位操作。四、清除BSS段。五、调用board_init_r函数,执行后续的板级初始化操作,包括各种外设接口、中断、环境变量等。最后调用run_main_loop()函数,进入倒计时等待,等待超时后执行bootcmd启动内核。具体流程
    发表于 05-30 09:24