FreeRTOS任务调度

2023-12-28 19:38:44

开启任务调度器

vTaskStartScheduler(); 无参数, 无返回值. 作用是用于启动任务调度器,任务调度器启动后, FreeRTOS 便会开始进行任务调度 .

如果允许了静态创建任务, 则创建空闲任务和创建定时器任务都会变为需要程序员手动实现创建.

1.创建空闲任务(动态创建)

创建成功, xReturn = pdPass;?

?2.创建软件定时器任务

3.关闭中断?

4.初始化全局变量

由上到下依次是:

  1. 下一个任务阻塞超时时间 = 最大值(0xffffffff).??
  2. 调度器运行状态 = pdTRUE.
  3. 系统计数器, 每中断一次, 这个值加一, 为系统提供心跳节拍, 这里初始值为0.

5.统计任务的运行时间

这里并没有用到, 只是留了一个接口. 以后再学怎么实现.

6.调用函数xPortStartScheduler()

上面的是调试功能, 也是没有实现的, 也是只留了一个接口函数.?

?这个开启第一个任务函数执行结束之后是不会返回的, 直接进入第一个任务开始执行.?

第二步, 配置PendSV和SYSTICK中断优先级
?????

第三步, 配置SysTick中断

portNVIC_SYSTICK_LOAD_REG: 就是系统滴答定时器的重装载值寄存器, 倒数到0的时候触发中断, 这里是72k个数.?

configSYSTICK_CLOCK_HZ就是配置的系统时钟, 这里是72Mhz.

configTICK_RATE_HZ: 中断一次产生的频率, 这里是1000hz.

portNVIC_SYSTICK_CTRL_REG: 就是系统滴答定时器的控制及状态寄存器.

?

启动第一个任务.?

启动第一个任务

prvStartFirstTask();函数, 在端口启动调度器函数中最后执行的.

SVC中断服务函数

文章来源:https://blog.csdn.net/qq_46129738/article/details/135235906
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。