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.rhkb.cn/news/173349.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网穿透工具之NATAPP(一)

使用工具前,有必要了解一下什么是内网穿透吧! 内网穿透简单来说就是将内网外网通过natapp隧道打通,让内网的数据让外网可以获取。比如常用的办公室软件等,一般在办公室或家里,通过拨号上网,这样办公软件只有在本地的局…

手写RPC框架

文章目录 什么是RPC框架RPC框架中的关键点通信协议序列化协议动态代理和反射 目前已有的RPC框架手写RPC框架介绍项目框架项目执行流程项目启动 什么是RPC框架 RPC(Remote Procedure Call,远程过程调用), 简单来说遵循RPC协议的就是RPC框架. …

基于小安派AiPi-Eye-S1的Nes游戏机

1.作品展示 作品功能可见以下B站视频 外壳可以使用灰太狼大佬提供的外壳STL文件。在嘉立创三维猴上打印(外壳12元快递6元)。 外壳从以下的帖子中获取: 模型分享 2.作品说明 2.1 硬件部分 硬件上使用到了AiPi-Eye-S1开发板以及3.5寸 240*3…

rust学习——智能指针

智能指针 在各个编程语言中,指针的概念几乎都是相同的:指针是一个包含了内存地址的变量,该内存地址引用或者指向了另外的数据。 在 Rust 中,最常见的指针类型是引用,引用通过 & 符号表示。不同于其它语言&#xf…

【Redis】Docker部署Redis数据库

Docker部署Redis数据库 1. Redis介绍2. CentOS 7 安装 & Docker 配置3. 拉取Redis 镜像、创建容器3.1 配置Docker镜像源3.2 拉取Redis 镜像3.3 容器创建 1. Redis介绍 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用…

新一代AI技术,引领医疗智能革新共筑未来医疗生态

加快推进数字化转型,是我国抢抓新一轮科技革命和产业变革机遇的必然选择,数字化转型已不是“选择题”,而是关乎生存和长远发展的“必修课”。在此目标下,公共服务领域迎来深刻变革,医院也不例外,数字经济的…

力扣每日一题73:矩阵置零

题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2…

MySQL 5.7限制general_log日志大小

背景 需求: 在MySQL 5.7.41中开启general_log 并限制其大小,避免快速增长占用硬盘空间。 解决: 通过定时任务,执行简单的脚本,判断general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清…

基于群居蜘蛛算法的无人机航迹规划

基于群居蜘蛛算法的无人机航迹规划 文章目录 基于群居蜘蛛算法的无人机航迹规划1.群居蜘蛛搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用群居蜘蛛算法来优化无人机航迹规划。 …

如何使用 Docker 搭建 Jenkins 环境?从安装到精通

不少兄弟搭 jenkins 环境有问题,有的同学用 window, 有的同学用 mac, 有的同学用 linux。 还有的同学公司用 window, 家里用 mac,搭个环境头发掉了一地。。。 这回我们用 docker 去搭建 jenkins 环境,不管你是用的是什么系统&…

一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试(图文并茂)

接口测试虽然作为版本的一环,但是也是有一套完整的体系,有接口的功能测试、性能测试、安全测试;同时,由于接口的特性,接口的自动化低成本高收益的,使用一些开源工具或一些轻量级的方法,在测试用…

【PointNet—论文笔记分享】

第一个直接基于原始点云数据进行分割、分类的模型,之前都是基于多视图或者体素的方式。 论文: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation代码: TensorFlow版 Pytorch版 基本模型架构: 分别对每个点进行特征提取…

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包,spring boot 2的spring-boot-starter-data-redis中,默…

适用于物联网的UI设计工具都有哪些?

随着科学技术的飞速发展,“万物相连的互联网”时代逐渐成为现实。如今,物联网已经不是什么新词了。事实上,早在各种屏幕设备诞生之前,人们就与物理世界交织在一起,产生了无数的互动。如何将人们多年积累的互动经验与物…

windows下OOM排查

如下有一段代码 package com.lm.demo.arthas.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.A…

PHP危险函数

PHP危险函数 文章目录 PHP危险函数PHP 代码执行函数eval 语句assert()语句preg_replace()函数正则表达式里修饰符 回调函数call_user_func()函数array_map()函数 OS命令执行函数system()函数exec()函数shell_exec()函数passthru() 函数popen 函数反引号 实列 通过构造函数可以执…

负载均衡的综合部署练习(hproxy+keepalived和lvs-DR+keepalived+nginx+Tomcat)

一、haproxykeepalived haproxy 2台 20.0.0.21 20.0.0.22 nginx 2台 20.0.0.23 20.0.0.24 客户机 1台 20.0.0.30 这里没有haproxy不是集群的概念,他只是代理服务器。 访问他直接可以直接访问后端服务器 关闭防火墙 安装haproxy和环境: yum in…

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求?POST?GET?…&#xff1…

Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结

uni小程s序SDK 集成到Android原生项目:老项目中用到的库较多,会出现几种冲突问题,总结如下: 报错1: Execution failed for task :app:processDebugManifest. > Manifest merger failed with multiple errors, see logs Andro…

YUV的红蓝颠倒(反色)的原因及解决

原因 UV排列反了。 比如说,NV21和YUV420SP的Y排列相同,UV则相反。给你YUV420SP,你当作NV21保存JPG,就会发生红蓝拿起。 解决办法 就是把UV互换一下。具体代码: NV21转YUV420SP的代码_nv21转yuv420格式-CSDN博客 …