【STM32】FreeRTOS 中断配置和临界段
文章目录
- main.c
中断是微控制器一个很常见的特性,中断由硬件产生,当中断产生以后 CPU 就会中断当前 的流程转而去处理中断服务,Cortex-M 内核的 MCU 提供了一个用于中断管理的嵌套向量中断 控制器(NVIC)。
Cotex-M3 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1 个 Systick(滴 答定时器)定时器中断和多个系统异常。
当多个中断来临的时候处理器应该响应哪一个中断是由中断的优先级来决定的,高优先级 的中断(优先级编号小)肯定是首先得到响应,而且高优先级的中断可以抢占低优先级的中断, 这个就是中断嵌套。
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
#include "FreeRTOS.h"
#include "task.h"//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 256
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);//任务优先级
#define INTERRUPT_TASK_PRIO 2
//任务堆栈大小
#define INTERRUPT_STK_SIZE 256
//任务句柄
TaskHandle_t INTERRUPTTask_Handler;
//任务函数
void interrupt_task(void *p_arg);int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 delay_init(); //延时函数初始化 uart_init(115200); //初始化串口LED_Init(); //初始化LEDTIM3_Int_Init(10000-1,7200-1); //初始化定时器3,定时器周期1STIM5_Int_Init(10000-1,7200-1); //初始化定时器5,定时器周期1S//创建开始任务xTaskCreate((TaskFunction_t )start_task, //任务函数(const char* )"start_task", //任务名称(uint16_t )START_STK_SIZE, //任务堆栈大小(void* )NULL, //传递给任务函数的参数(UBaseType_t )START_TASK_PRIO, //任务优先级(TaskHandle_t* )&StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度
}//开始任务任务函数
void start_task(void *pvParameters)
{taskENTER_CRITICAL(); //进入临界区//创建中断测试任务xTaskCreate((TaskFunction_t )interrupt_task, //任务函数(const char* )"interrupt_task", //任务名称(uint16_t )INTERRUPT_STK_SIZE, //任务堆栈大小(void* )NULL, //传递给任务函数的参数(UBaseType_t )INTERRUPT_TASK_PRIO, //任务优先级(TaskHandle_t* )&INTERRUPTTask_Handler); //任务句柄vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL(); //退出临界区
}//中断测试任务函数
void interrupt_task(void *pvParameters)
{static u32 total_num=0;while(1){total_num+=1;if(total_num==5) {printf("关闭中断.............\r\n");portDISABLE_INTERRUPTS(); //关闭中断delay_xms(5000); //延时5sprintf("打开中断.............\r\n"); //打开中断portENABLE_INTERRUPTS();}LED0=~LED0;vTaskDelay(1000);}
}
【STM32】FreeRTOS 中断配置和临界段相关推荐
- FreeRTOS中断配置与临界段
Cortex-M中断 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序(中断服务程序),处理完毕后又返回原被暂停的程序继续运行.Cortex- ...
- FreeRTOS源码分析与应用开发01:中断配置与临界段
目录 1. 异常与中断的基本概念 1.1 异常分类 1.2 中断概述 1.2.1 中断处理宜短暂 1.2.2 临界段影响中断实时性 1.3 中断硬件基础 1.3.1 外设 1.3.2 中断控制器 1. ...
- 【STM32】FreeRTOS中断配置
00. 目录 文章目录 00. 目录 01. 概述 02. 中断管理 03. 优先级分组 04. 优先级设置 05. 特殊寄存器 06. FreeRTOS中断配置宏 07. FreeRTOS开关中断 ...
- stm32定时器中断配置及使用
stm32定时器中断配置及使用 定时器中断就是:可以周期性的执行某些功能,而不受main函数的影响. 我们以通用定时器time3为例说明 1.首先配置时钟源为内部时钟,分频和充装载值根据自己需要填入, ...
- (二)stm32之中断配置
一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...
- stm32之中断配置
一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...
- STM32定时器中断配置
1.使能时钟 定时器时钟 2.配置定时器结构体.使能 3.开启定时器中断,配置中断结构体 配置例子 #include "tim.h" #include "stm32f10 ...
- FreeRTOS — 临界段和开关中断
以下内容转载自安富莱电子:http://forum.armfly.com/forum.php 1.临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行 ...
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...
最新文章
- Hadoop集群的基本操作(二:HBase的基本操作)
- 2021谷歌学术指标出炉:CVPR总榜第4,仅次于Science,ECCV超过ICCV......
- 心得丨8个深度学习方面的最佳实践
- vue中父子组件先后渲染_VUE如何实现子父组件、父子组件、兄弟组件传值
- properties文件如何注解多行加#
- centos 6.3 x86_64安装32位JDK的问题
- linux之Vim使用
- 网卡驱动程序之编写虚拟网卡(二)
- O-C相关-08-动态类型与静态类型
- otn系统中常用的电层_自动化系统中常用的液位计
- /MD, /MDD, /ML, /MT,/MTD(使用运行时库) .
- redis集群断电数据怎么恢复_如何做到 10T 集群数据安全备份、1GB/s 快速恢复?...
- 华为p50是不是鸿蒙系统,华为P50再次延期,鸿蒙系统正式版加持,有望与新平板一同登场...
- cent os7 安装dubbo-admin 管理控制台
- html caption属性,HTML caption align 属性 | 菜鸟教程
- 学校计算机社团面试问题及答案,社团二轮面试题目
- 还说治理类项目不性感?这个DAO上线半年吸金700万美元
- 温度传感器的分类及比较
- 放大器的传递函数_运放全差分放大器实现单端与平衡的相互转换
- 淘宝官方商品详情接口