嵌入式C编程的中断子程序编写

问题描述 投票:0回答:0

谢谢你的时间。我使用嵌入式 C 编程。我正在尝试编写处理多个中断。我将继续编写其他人之前已经开始的代码。根据我的研究,我有自己的想法来完成这项任务。我以前的同事采用了不同的方法,看起来他没有使用正确的语法,但他仍然能够启动并运行代码。

两种方法的通用代码


install_isr_handler()
{
    all_interrupts_init();
    isr_handler_installer(general_isr_handler);     // API to install ISR handlers
}

uninstall_isr_handler()
{
    isr_handler_disable(general_isr_handler);       // API to disable all ISR handlers
} 
  • 他的做法:

__attribute__((interrupt)) general_isr_handler(void)
{
    isr_1();        // ISR function for interrupt 1
    isr_2();        // ISR function for interrupt 2
    isr_3();        // ISR function for interrupt 3
}

__attribute__((weak)) isr_1()
{
    // Some common code
    _isr_1();
}

void isr_2()
{
    // Some common code
    _isr_2();
}

void isr_3()
{
    // Some common code
    _isr_3();
}

__attribute__((weak)) _isr1()
{
    // ISR for interrupt 1
}

__attribute__((weak)) _isr2()
{
    // ISR for interrupt 2
}

__attribute__((weak)) _isr3()
{
    // ISR for interrupt 3
}
  • 我的方法

__attribute__((interrupt)) isr_handler_1(void)
{
    _isr1();    // ISR for interrupt 1
}

__attribute__((interrupt)) isr_handler_2(void)
{
    _isr2();    // ISR for interrupt 2
}

__attribute__((interrupt)) isr_handler_3(void)
{
    _isr3();    // ISR for interrupt 3
}

此外,语法是否以正确的形式使用:.__attribute.__((interrupt))
我是第一次使用它。是强制使用吗?

感谢您的宝贵时间!

我还没有尝试过我的方法。我相信它应该有效。你能告诉我哪一个是正确的吗?两者都正确吗?如果是,哪个是好的编码实践?

c embedded interrupt
© www.soinside.com 2019 - 2024. All rights reserved.