Free RTOS任务调度

一、启动第一个任务流程:

创建开始任务:start_tsak        
启动任务调度器:vTaskStartScheduler

1.创建空闲任务:prvIdleTask
2.创建软件定时器任务:xTimerCreateTimerTask
3.关中断(在启动第一个任务时开启)
4.初始化一些全局变量...
5.初始化任务运行时间统计功能的时基定时器
6.调用函数xPortStartScheduler完成启动任务调度器
        (1.配置 PendSV 和 SysTick 的中断优先级为最低优先级(优先级0)
        (2.调用函数 vPortSetupTimerInterrupt()配置 SysTick
        (3.调用函数 prvEnableVFP()使能 FPU
        (4.将 FPCCR 寄存器的[31:30]置 1,这样在进出异常时, FPU 的相关寄存器就会自
动地保存和恢复
        (5.调用函数 prvStartFirstTask()启动第一个任务

 

 

二、任务切换流程:

触发pendsv中断(1、滴答定时器中断触发2、调用FreeRTOS的API函数触发,如:portYIELD( )

        (1、当前的psp是正在运行的任务的栈指针,读取当前psp进程指针,存入r0

        (2、压栈(保存现场)

        (3、获取当前最高优先级任务的任务控制块

        (4、出栈(恢复现场)

        (5、更新切换后的任务的的栈指针给PSP(双堆栈指针、中断内使用MSP)

        (6、bx r14 执行新任务函数

 

 该笔记来源于正点原子FreeRTOS教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值