STM32中斷入口地址與中斷服務(wù)函數(shù)的關(guān)系
在stm32單片機的編程時,中斷函數(shù)的名稱都是“xxx_Handler()”格式。這是固定的格式嗎?編譯的時候是怎么知道這是一個中斷函數(shù)?哪里有注明?
我們知道,每個中斷都是有入口地址的。程序在執(zhí)行過程中遇到中斷的時候,會先判斷這個中斷的類型,根據(jù)類型再到中斷向量表中查找,找到之后,根據(jù)表中指明的地址,程序就跳到該地址開始執(zhí)行代碼。
ST提供的舊版本固件庫(V3.0.0及以前),有提供一個stm32f10x_it.c文件,打開之后會發(fā)現(xiàn)里面放的都是些空函數(shù),但是名字都是“xxx_Handler()”格式,需要使用某個中斷的時候,在代碼中使能該中斷,并到這個文件中將中斷服務(wù)函數(shù)添加上,就OK了。但是較新版本的庫里沒有了這個文件,用戶要使用中斷服務(wù)函數(shù)的時候,得自己在文件中聲明然后實現(xiàn)它,并且函數(shù)名還是得用那種格式。
為什么呢?
因為這些名字就是一個個的中斷函數(shù)入口地址。在哪里定義了這些名字呢?答案是:啟動代碼中。
打開啟動代碼文件,能看到以下信息:
可以看到,定義了一個個名稱,這些名稱就是中斷函數(shù)入口的地址,用這些名稱來代替具體的地址值,有兩個好處:一是編程時簡化了,二是由于不同芯片的入口初始地址可能不同,用名字代替,可移植性較強。
所以要使用中斷的話,中斷函數(shù)就要用上面說的那種格式。當(dāng)然你覺得不爽的話,可以到啟動代碼里把這些名字給改了J