原创 MCU应用第007篇 C程序对中断服务程序的标记

2024-10-29 22:22 189 0 分类: MCU/ 嵌入式 文集: 1 MCU应用
    C程序要借助一些指示性的“黑话”,才能使C编译器知道该如何处理。
例:南京沁恒RV32编译器
    void Example_IRQHandler(void)  __attribute__((interrupt("WCH-Interrupt-fast")));

    为什么这样?
    中断服务程序是一个函数,编写语法跟普通函数无异。
    中断服务程序跟普通函数的差别是调用和返回的细节。一般来说,程序的主干是时间顺序执行的代码,而中断服务会抢走PC指针,暂停主干程序。为了在中断服务完成后程序主干能够恢复到之前的位置,进入中断服务之前,程序主干要做标记(保存现场),在退出中断服务程序时,程序主干要读取之前的标记(恢复现场)。
    处理器从硬件和程序两方面支持这种“备忘”机制。硬件设计了栈(Stack,一组RAM),栈指针(Stack Pointer, SP)。机器码有指令:标记(压栈),恢复标记(退栈)。
    汇编语言有对应栈操作的命令,在调用汇编函数前后使用,即可区别于一般函数。
    C语言程序员更关注函数的功能,不需要关注函数的进入和退出,为此才需要特殊的编译器指令(例如__attribute__)来告诉C编译器,其声明的函数不是一个普通函数,需要处理栈。

作者: 电子知识打边炉, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-4061550.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /2 下一条