FreeRTOS-中断管理

一.中断介绍

 

1.什么是中断?

CPU打断正常运行的程序,转而处理紧急的事件/程序,这就是中断。

2.中断优先级分组配置(中断优先级越小优先级越高)

 在FreeRTOS中,使用NVIC_PriorityGroup_4分组,只有抢占优先级(0-15),没有子优先级。

特点:(1)所有优先级指定为抢占优先级,没有子优先级,方便FreeRTOS管理

(2)中断优先级数值越小,优先级越高;任务优先数值越大,优先级越高

(3)低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断才允许调用FreeRTOS的API函数

3.中断相关寄存器 

(1)FreeRTOS如何配置PendSV(处理任务切换)和Systick中断优先级?

将PendSV和Systick中断优先级配置为15,为最低优先级,保证系统任务切换不会阻塞其他中断的响应(即中断可以打断任务,任务不可以打断中断)。

 (2)3个中断屏蔽器,分别为PRIMASK,FAULTMASK,BASEPRI

FreeRTOS使用BASEPRI寄存器管理中断,设置为某个值,优先级的值大于或等于该值的中断全部关闭(即优先级的等级小于它的都关闭)。

综合实验:

1.使用两个定时器,一个优先级为4,一个优先级为6,注意:系统管理的中断优先级为5-15,现象:两个定时器,每个定时器定时1s,打印一串字符,关闭中断,停止打印,开启中断持续打印。

创建任务1,中断测试任务,任务中调用关中断和开中断函数来管理中断。

2.CubeMX配置

(1)配置两个定时器TIM3,TIM4

(2)编写定时器中断函数

在stm32f1xx_it.c中找到定时器对应的中断函数, F12进入红圈中的函数,在文件中    Ctrl+F  查找" HAL_TIM_PeriodElapsedCallback() ",并在main.c或tim.c中重写该函数。

 注意:需要在定时器初始化函数MX_TIMx_Init()中,手动添加" HAL_TIM_Base_Start_IT(&timx) ",否则无法启用定时器中断!!!

按要求修改定时器中断优先级分别为4和6

(3)创建任务Task_Ctrl_IT 

注意:若想在任务中调用HAL_Delay(),需要先改变HAL的时钟源TIM2的优先级为最高!!!

防止关闭中断后,程序卡死,无法调用portENABLE_INTERRUPTS(),开启中断

 实验现象:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值