FreeRTOS 中断管理介绍和实操

简介: FreeRTOS 中断管理介绍和实操

中断定义

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


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


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


中断优先级

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


在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 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.打开串口助手,查看结果

相关文章
|
6月前
【FreeRTOS】中断管理(二)
【FreeRTOS】中断管理
119 0
|
6月前
【FreeRTOS】中断管理(三)
【FreeRTOS】中断管理
|
6月前
|
存储 缓存 Linux
中断系列第三篇:中断实操一下?
中断系列第三篇:中断实操一下?
74 0
|
6月前
|
Linux
中断系列第二篇:中断的使用场景?
中断系列第二篇:中断的使用场景?
127 0
|
IDE 调度 开发工具
如何在S32DS中使用SystemView分析FreeRTOS
如何在S32DS中使用SystemView分析FreeRTOS
如何在S32DS中使用SystemView分析FreeRTOS
|
数据可视化 中间件 API
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
熟悉 在 STM32 CubeMX 下面的 FreeRTOS 使用
1641 1
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
|
4月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
377 0
|
6月前
|
存储
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
【51单片机】初学者必读的一文【探究定时计数器与中断系统是如何配合起来的?】(9)
|
6月前
|
传感器
如何使用中断处理过程
如何使用中断处理过程
36 1
|
6月前
|
API C语言
【FreeRTOS】中断管理(一)
【FreeRTOS】中断管理
118 0