[uCOS/RTOS]FreeRTOS操作系统——中断管理与测试(三)

中断是微控制器一个很常见的特性,中断由硬件产生,当中断产生以后 CPU 就会中断当前
的流程转而去处理中断服务,Cortex-M 内核的 MCU 提供了一个用于中断管理的嵌套向量中断
控制器(NVIC)。 Cotex-M3 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1 个 Systick(滴
答定时器)定时器中断和多个系统异常。


# 一、中断管理

临界区:
临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设
的初始化需要严格的时序,初始化过程中不能被打断。FreeRTOS 在进入临界段代码的时候需要
关闭中断,当处理完临界段代码以后再打开中断。FreeRTOS 系统本身就有很多的临界段代码,
这些代码都加了临界段代码保护,我们在写自己的用户程序的时候有些地方也需要添加临界段
代码保护。
FreeRTOS 与 临 界 段 代 码 保 护 有 关 的 函 数 有 4 个 : taskENTER_CRITICAL() 、taskEXIT_CRITICAL() 、 taskENTER_CRITICAL_FROM_ISR() 和
taskEXIT_CRITICAL_FROM_ISR(),这四个函数其实是宏定义,在 task.h 文件中有定义。这四个函数的区别是前两个是任务级的临界段代码保护,后两个是中断级的临界段代码保护。

```c
void taskcritical_test(void)
{
while(1)
{
taskENTER_CRITICAL(); (1)//进入临界区
total_num+=0.01f;
printf("total_num 的值为: %.4f\r\n",total_num);
taskEXIT_CRITICAL(); (2)//退出临界区
vTaskDelay(1000);
} }
```

(1)、进入临界区。
(2)、退出临界区。
(1)和(2)中间的代码就是临界区代码,注意临界区代码一定要精简!因为进入临界区会关闭中断,这样会导致优先级低于 configMAX_SYSCALL_INTERRUPT_PRIORITY 的中断得不到及
时的响应!
只有所有的临界段代码都退出以后才会使能中断!

最低中断优先级15、最高中断优先级5
0-4不归FreeRTOS管理,5-15FreeRTOS可管理


# 二、FreeRTOS中断测试实验
本实验设计了两个任务 start_task()和 interrupt_task(), 这两个任务的任务功能如下:
start_task():创建另外一个任务。interrupt_task() : 中 断 测 试 任 务 , 任 务 中 会 调 用 FreeRTOS 的  中 断 函 数portDISABLE_INTERRUPTS()来将中断关闭一段时间。
## 1.代码实战




```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

来源:FreeRTOS操作系统——中断管理与测试(三) - 嵌入式论坛-人气最火爆嵌入式学习开发论坛 - 21ic电子技术开发论坛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值