【FreeRTOS】中断管理(一)

简介: 【FreeRTOS】中断管理

前言

前面的章节多数的API使用都讲到中断专用和任务专用是分开的,为什么FreeRTOS会设计两套api函数呢?他们又有那些区别?

中断和任务的API区别

在任务中因为我们是多线程设计的模式可以允许任务阻塞等待,但是在中断中我们希望越快处理越好,我们可以来看看两套API函数的原形都有那些区别;

xQueueSend( xQueue, pvItemToQueue, xTicksToWait )
xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken )

如果查看其他的API使用函数我们可以发现在中断使用的API只是在任务API的末尾添加了FromISR,参数从xTicksToWait等待时间换成了pxHigherPriorityTaskWoken;

任务等待时间我们已经很清楚了我们只需要了解pxHigherPriorityTaskWoken参数,pxHigherPriorityTaskWoken就是用来保存函数的结果:是否需要切换任务

pdTRUE:函数的操作导致更高优先级的任务就绪了,ISR应该进行任务切换

pdFALSE:没有进行任务切换的必要

为什么需要任务切换?

当我们中断频繁触发的时候就会造成我们的任务频繁切换,这样会浪费较多的资源效率较慢,所以可以使用xHigherPriorityTaskWoken避免不必要的任务切换提高效率,简单来说就是将任务切换变为可控提高效率;

如何进行任务切换?

FreeRTOS的ISR函数中,使用两个宏进行任务切换:

portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
• 1

这两个宏做的事情是完全一样的,在老版本的FreeRTOS中,

portEND_SWITCHING_ISR使用汇编实现

portYIELD_FROM_ISR使用C语言实现

新版本都统一使用portYIELD_FROM_ISR。

使用CubeMX创建工程

先前的使用代码移植的方法来创建我们的工程其实CubeMX是可以直接帮我们生成FreeRTOS工程的;

配置时钟

配置调试模式

这里必须选择否则有可能出现下载程序的问题,这里的基准时钟我们不能选择滴答时钟因为我们的FreeRTOS会使用我们的滴答时钟作为任务切换;

配置串口

后面我们做队列实验就拿串口1来做实验

配置按键外部中断;

配置中断服务函数

配置按键触发模式

配置FreeRTOS

这里我选择默认配置即可,如果前面的文章看了的话这里面的选项还是比较熟悉的

配置时钟

这里的8是这块板子的晶振,根据自己硬件实际情况选择即可

生成工程

库文件单独分析.c/.h

添加串口printf支持

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f) 
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}
/* USER CODE END 0 */

示例

虽然FreeRTOS被重新封装了但是API基本都没有改变我们还是可以使用之前那一套即可;可以看到这里的内核启动是在while之前的所以我们的代码要卸载begin2的位置

/* USER CODE BEGIN 2 */
/* USER CODE END 2 */

需要注意的是我们的外设的中断配置优先级不要超过5,否则可能会在中断中卡死;

队列、信号量、互斥量、事件组、任务通知的使用方法和下面的类似;

【FreeRTOS】中断管理(二)https://developer.aliyun.com/article/1472602

相关文章
|
1天前
【FreeRTOS】中断管理(二)
【FreeRTOS】中断管理
|
1天前
【FreeRTOS】中断管理(三)
【FreeRTOS】中断管理
|
1天前
|
API 调度
【FreeRTOS】软件定时器的使用
【FreeRTOS】软件定时器的使用
|
芯片 开发者 SoC
E906的中断系统|学习笔记
快速学习 E906的中断系统
451 0
E906的中断系统|学习笔记
|
1天前
|
编译器 C语言 芯片
内核里的中断
内核里的中断
35 0
|
1天前
|
API 调度
FreeRTOS深入教程(中断管理)
FreeRTOS深入教程(中断管理)
114 0
|
1天前
|
调度
FreeRTOS深入教程(空闲任务和Tick中断深入分析)
FreeRTOS深入教程(空闲任务和Tick中断深入分析)
84 0
|
7月前
|
传感器 调度
什么是中断系统?
一、什么是中断系统 中断系统是计算机系统中的一种机制,它允许外部设备和程序请求处理器的注意力,以便进行特定的操作。当一个中断请求被触发时,处理器会暂停当前正在执行的程序,转而执行与中断相关的程序或服务例程。中断系统可以提高计算机系统的效率和响应速度,因为它允许处理器在等待某些事件的同时执行其他任务。常见的中断包括硬件中断(例如键盘输入、鼠标移动、网络数据传输等)和软件中断(例如操作系统调度、系统调用等)。 二、中断系统的特点 中断系统具有以下特点: 1. 实时性:中断系统能够及时响应外部设备的请求,提高计算机系统的响应速度和效率。 2. 可靠性:中断系统能够保证中断请求的可靠性,确保外部设备的
190 0
|
存储 测试技术 API
14-FreeRTOS任务控制
14-FreeRTOS任务控制