• 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

    1. #include "cmsis_os.h" // 增加CubeMX封装好的头文件
    2. extern osMessageQId myQueue01Handle;
    3. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    4. {
    5. uint32_t snd = 1;
    6. xQueueSendFromISR(myQueue01Handle, &snd, NULL);
    7. }

    4.主程序代码示例:

    freertos.c

    1. void StartDefaultTask(void const * argument)
    2. {
    3. uint32_t rev = 0;
    4. for(;;)
    5. {
    6. if (xQueueReceive(myQueue01Handle, &rev, portMAX_DELAY) == pdTRUE)
    7. printf("rev = %d\r\n", rev);
    8. osDelay(1);
    9. }
    10. }

    5.打开串口助手,查看结果

  • 相关阅读:
    自然语言处理 Paddle NLP - 结构化数据问答-理论
    动词不规则变化
    Cocos Creator3.8 项目实战(六)Combobox控件的实现和使用
    ZonedDateTime 与 Spring Data MongoDB
    【常见相机模型】
    [C++]:8.C++ STL引入+string(介绍)
    限流算法:时间窗口,令牌桶与漏桶算法对比
    附录12-伪类选择器
    体育场馆能源消耗监测管理平台,为场馆提供能源服务
    浅谈基于QT的截图工具的设计与实现
  • 原文地址:https://blog.csdn.net/m0_74712453/article/details/134036559