在STM32单片机的编程傍边,中止函数的称号都是xxx_IRQHandler格局的。那当编译程序的时分是怎样知道这是一个中止函数的呢?
每个中止都是有进口地址的。程序在履行进程中遇到中止的时分,会先判别这个中止的类型,依据类型再到中止向量表中查找,找到之后,依据表中指明的地址,程序就跳到该地址开端履行代码。
ST供给的固件库傍边,有供给一个stm32f10x_it.c文件,翻开之后会发现里边放的都是些空函数,可是姓名都是“xxx_Handler()”格局,需求运用某个中止的时分,在代码中使能该中止,并到这个文件中将中止服务函数添加上,就能够了。
而这些姓名便是一个个的中止函数进口地址。在发动代码中便有这些界说。如下图所示:
能够看到,里边界说了一个个称号,这些称号便是中止函数进口的地址,用这些称号来替代了详细的地址值。
其间DCD是一条数据界说伪指令,用于分配一片接连的字存储单元并用指定的数据初始化。当装备好相应外设的操控寄存器中止使能时,当产生中止(反常)时,该反常被Cortex-M3内核承受,对应的反常Handler就会履行。而这个呼应进程都是硬件来完结的,当然为了决议Handler的进口地址,Cortex-M3运用了“向量表查表机制”。startup_stm32f10x_hd.s发动文件现已为相应外设的中止服务函数赋予了相应的地址。所以在反常产生后,CPU进入反常形式,一起程序计数器PC主动指向反常进口地址,从而履行中止服务函数中的使用。