当前位置: 首页 > news >正文

FreeRTOS 中断管理介绍和实操

目录

中断定义

中断优先级

相关注意

中断相关函数

1.队列

2.信号量

3.事件标志组

4.任务通知

5.软件定时器

中断管理实操


中断定义

中断是指在程序执行的过程中,突然发生了某种事件,需要立即停止当前正在执行的程序,并转而处理这个事件,处理完后再回到原来的程序执行点继续执行的过程。

中断可以是硬件中断(由硬件设备触发)或软件中断(由程序执行中断指令触发)。

中断可以提高计算机的响应速度和效率,使得计算机可以同时处理多个任务。

中断优先级

任何中断的优先级都大于任务!

在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 0~15 ,默认情况下它是从 5~15 ,0~4 这 5 个中断优先级不是 FreeRTOS 控制的(5是 取决于 configMAX_SYSCALL_INTERRUPT_PRIORITY)。

相关注意

1. 在中断中必需使用中断相关的函数;

2. 中断服务函数运行时间越短越好。

中断相关函数

1.队列

xQueueReceiveFromISR()

  • 在中断中从队列头部读取消息,并删除消息

xQueuePeekFromISR()

  • 在中断中从队列头部读取消息

2.信号量

xSemaphoreGiveFromISR()

  • 在中断中释放信号量

xSemaphoreTakeFromISR()

  • 在中断中获取信号量

3.事件标志组

xEventGroupClearBitsFromISR()

  • 在中断中清零事件标志位

xEventGroupSetBitsFromISR()

  • 在中断中设置事件标志位

4.任务通知

xTaskNotifyFromISR()

  • 在中断中发送任务通知

xTaskNotifyAndQueryFromISR()

  • 在中断中发送任务通知

vTaskNotifyGiveFromISR()

  • 在中断中发送任务通知

5.软件定时器

xTimerStartFromISR()

  • 在中断中开启软件定时器定时

xTimerStopFromISR()

  • 在中断中停止软件定时器定时

xTimerResetFromISR()

  • 在中断中复位软件定时器定时

xTimerChangePeriodFromISR()

  • 在中断中更改定时超时时间

中断管理实操

创建一个队列及一个任务,按下按键 KEY1 触发中断,在中断服务函数里向队列里发送数据,任 务则阻塞接收队列数据。

打开CubeMX

1.将FreeRTOS移植到STM32F103C8T6,具体看我之前写过的文章

将FreeRTOS移植到STM32F103C8T6

2.在NVIC中使能中断

3.中断代码示例:

用到的中断函数

  • xQueueSendFromISR()

stm32f1xx_it.c

#include "cmsis_os.h" // 增加CubeMX封装好的头文件extern osMessageQId myQueue01Handle;void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{uint32_t snd = 1;xQueueSendFromISR(myQueue01Handle, &snd, NULL);
}

4.主程序代码示例:

freertos.c

void StartDefaultTask(void const * argument)
{uint32_t rev = 0;for(;;){if (xQueueReceive(myQueue01Handle, &rev, portMAX_DELAY) == pdTRUE)printf("rev = %d\r\n", rev);osDelay(1);}
}

5.打开串口助手,查看结果

http://www.lryc.cn/news/209954.html

相关文章:

  • 性能测试 —— Jmeter 常用三种定时器!
  • ROS自学笔记十七:Arbotix
  • Mac电脑窗口管理Magnet中文 for mac
  • Centos7 部署 Stable Diffusion
  • 【Python】一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格
  • 嵌入式项目电灯
  • [ubuntu系统下的文本编辑器nano,vim,gedit,文件使用,以及版本更新问题]
  • C#WinformListView实现缺陷图片浏览器
  • C- qsort()
  • 【Apache Flink】基于时间和窗口的算子-配置时间特性
  • 数组的优点和缺点
  • 接口返回响应,统一封装(ResponseBodyAdvice + Result)(SpringBoot)
  • 苹果cms模板MXone V10.7魔改版源码 全开源
  • ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?
  • 一些k8s集群操作命令
  • pycharm运行R语言脚本(win10环境下安装)
  • Java进击框架:Spring-Test(六)
  • 微软:Octo Tempest是最危险的金融黑客组织之一
  • JS加密/解密之逻辑运算符加密进阶篇
  • 【ROS入门】机器人系统仿真——URDF集成Gazebo
  • 互联多区域电网的负荷频率控制研究
  • 【java学习—九】模板方法(TemplateMethod)设计模式(4)
  • 【MyBatis Plus】初识 MyBatis Plus,在 Spring Boot 项目中集成 MyBatis Plus,理解常用注解以及常见配置
  • Centos7 安装和配置 Redis 5 教程
  • 使用 RAG、Langchain 和 Streamlit 制作用于文档问答的 AI 聊天机器人
  • 论文阅读——RoBERTa
  • springboot项目打jar包,运行时提示jar中没有主清单属性
  • 【Codeforces】 CF79D Password
  • 叛乱沙漠风暴server安装 ubuntu 22.04
  • ES6中的新增属性——解构赋值