STM32的 中断源 和 中断服务程序 是如何关联的呢?

2024-11-25 17:11:27
推荐回答(1个)
回答1:

C51 的中断函数定义方法,不是 C 语言标准,而是 C51 的“方言”,没有移植性,也没有参照性。

STM32 (Cortex-M0/M3/M4) 的中断机制,与 x86 类似,也是有一个“中断向量表”,里面最多可以包含 256 个函数指针,每个函数指针指向一个“中断服务例程”,按 C 语言的观点来看,stm32 的中断向量表,就是一个有 256 个元素的指针数组。

 

这个数组,可以由你来定义,如:

// 声明或定义中断服务例程
void reset (void);
void nmi (void);
void hardfault (void);
...
// 中断向量表
void *vector_table[] = {
    __stack,
    reset,
    nmi,
    hardfault,
    ...
    // 其它中断函数
};

而一般情况是在汇编语言写的“启动代码”里,定义了这个向量表,里面的各个中服务断例程的函数指针(名字)也是定死了的,你可以用 C 函数来实现各个例程,要注意:你的例程名字,必须与“启动代码”里的函数名称一致!这个就是你所说的“关联”,而各个例程的名字是什么,你可以查看“启动代码”文件,或厂家提供的开发手册。