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