IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FreeRTOS系统内核控制函数与常用函数 -> 正文阅读

[嵌入式]FreeRTOS系统内核控制函数与常用函数

FreeRTOS 中有一些函数只供系统内核使用,用户应用程序一般不允许使用,这些 API 函 数就是系统内核控制函数。内核控制的一些功能需要移植层提供,为了方便移植,这些API函数用宏来实现,比如上下文切换、进入和退出临界区、禁止和使能可屏蔽中断。内核控制函数还包括启动和停止调度器、挂起和恢复调度器以及用于低功耗模式的调整系统节拍函数。

函数描述
taskYIELD()任务切换。
taskENTER_CRITICAL()进入临界区,用于任务中。
taskEXIT_CRITICAL()退出临界区,用于任务中。
taskENTER_CRITICAL_FROM_ISR()进入临界区,用于中断服务函数中。
taskEXIT_CRITICAL_FROM_ISR()退出临界区,用于中断服务函数中。
taskDISABLE_INTERRUPTS()关闭中断。
taskENABLE_INTERRUPTS()打开中断。
vTaskStartScheduler()开启任务调度器。
vTaskEndScheduler()关闭任务调度器。
vTaskSuspendAll()挂起任务调度器。
xTaskResumeAll()恢复任务调度器。
vTaskStepTick()设置系统节拍值。

强制上下文切换宏

  1. taskYIELD()
    用于强制上下文切换的宏。在中断服务程序中的等价版本为 portYIELD_FROM_ISR,这也是个宏,其实现取决于移植层。
    用于上下文切换的实际代码由移植层提供。对于Cortex-M3硬件,这个宏会引起PendSV中断。

临界区

  1. taskENTER_CRITICAL()
    用于进入临界区的宏。在临界区中不会发生上下文切换。

  2. taskEXIT_CRITICAL()
    用于退出临界区的宏。

  3. taskENTER_CRITICAL_FROM_ISR()
    进入临界区,用于中断服务函数中,此函数本质上是一个宏

  4. taskEXIT_CRITICAL_FROM_ISR()
    退出临界区,用于中断服务函数中,此函数本质上是一个宏

可屏蔽中断

  1. taskDISABLE_INTERRUPTS()
    关闭可屏蔽的中断,此函数本质上是一个宏。禁止所有RTOS可屏蔽中断。在调用宏taskENTER_CRITICAL进入临界区时,也会间接调用该宏禁止所有RTOS可屏蔽中断。
  2. taskENABLE_INTERRUPTS()
    打开可屏蔽的中断,此函数本质上是一个宏。使能所有RTOS可屏蔽中断。在调用宏taskEXIT_CRITICAL退出临界区时,也会间接调用该宏使能所有RTOS可屏蔽中断。

调度器

  1. vTaskStartScheduler()
    开启任务调度器
  2. vTaskEndScheduler()
    关闭任务调度器,一般不使用。仅用于x86硬件架构中。
    停止RTOS内核系统节拍时钟。所有创建的任务自动删除并停止多任务调度。
  3. vTaskSuspendAll()
    挂起任务调度器,调用此函数不需要关闭可屏蔽中断即可挂起任务调度器。
    挂起调度器,但不禁止中断。当调度器挂起时,不会进行上下文切换。调度器挂起后,正在执行的任务会一直继续执行,内核不再调度(意味着当前任务不会被切换出去),直到该任务调用了xTaskResumeAll ()函数。
    内核调度器挂起期间,那些可以引起上下文切换的API函数(如vTaskDelayUntil()、xQueueSend()等)决不可使用。
  4. xTaskResumeAll()
    恢复因调用vTaskSuspendAll()函数而挂起的实时内核调度器。xTaskResumeAll()仅恢复调度器,它不会恢复那些被vTaskSuspend()函数挂起的任务。
    返回pdTRUE 表示恢复调度器引起了一次上下文切换,否则,返回pdFALSE。

调整系统节拍

  1. vTaskStepTick()
    此 函 数 在 使 用 FreeRTOS 的 低 功 耗 tickless 模 式 的 时 候 会 用 到 , 即 宏
    configUSE_TICKLESS_IDLE 为 1。当使能低功耗 tickless 模式以后在执行空闲任务的时候系统
    时钟节拍中断就会停止运行,系统时钟中断停止运行的这段时间必须得补上,这个工作就是由
    函数 vTaskStepTick()来完成的,此函数在文件 tasks.c 中有如下定义:
void vTaskStepTick( const TickType_t xTicksToJump )
{
	configASSERT( ( xTickCount + xTicksToJump ) <= xNextTaskUnblockTime );
	xTickCount += xTicksToJump; (1)
	traceINCREASE_TICK_COUNT( xTicksToJump );
}

函数参数 xTicksToJump 是要加上的时间值,系统节拍计数器 xTickCount 加上这个时
间值得到新的系统时间。关于 xTicksToJump 这个时间值的确定后面在讲解 FreeRTOS 的低功耗
模式的时候会详细的讲解。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:59:12  更:2021-09-11 19:00:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:55:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码