[应用笔记] 实现和优化在中断中执行某些与 main 函数相似的逻辑设计示例:

[复制链接]
 楼主| 发表于 2024-6-28 08:18 | 显示全部楼层 |阅读模式
设计示例
下面是一个标准的设计示例:

c

#include "stm32f4xx.h"

void SystemClock_Config(void);
void GPIO_Init(void);
void USART_Init(void);

volatile int flag = 0;

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    GPIO_Init();
    USART_Init();

    // Enable interrupts
    __enable_irq();

    while (1)
    {
        if (flag)
        {
            flag = 0;
            // Execute main function logic triggered by interrupt
            ExecuteMainFunctionLogic();
        }
    }
}

void ExecuteMainFunctionLogic(void)
{
    // Main function logic
}

void USART2_IRQHandler(void)
{
    if (USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
    {
        // Clear interrupt flag
        USART_ClearITPendingBit(USART2, USART_IT_RXNE);

        // Set flag to indicate main function logic should be executed
        flag = 1;
    }
}

void SystemClock_Config(void)
{
    // Configure system clock
}

void GPIO_Init(void)
{
    // Initialize GPIOs
}

void USART_Init(void)
{
    // Initialize USART
}
在上面的示例中:

main 函数初始化系统并进入无限循环。
中断服务程序 USART2_IRQHandler 触发时,设置一个标志 flag。
主循环检测到 flag 被设置后,调用 ExecuteMainFunctionLogic 执行主要的应用逻辑。


发表于 2024-8-27 00:35 | 显示全部楼层
这是一种有效的方式,能够将复杂的处理逻辑从中断服务程序(ISR)中移出,减少中断占用的时间,提高系统的响应性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

530

帖子

1

粉丝
快速回复 返回顶部 返回列表