裝matlab一直顯示出現(xiàn)異常 單片機(jī),外部中斷程序,為什么不用寫在主程序中?為什么中斷函數(shù)不在主函數(shù)也可以運(yùn)行?
單片機(jī),外部中斷程序,為什么不用寫在主程序中?為什么中斷函數(shù)不在主函數(shù)也可以運(yùn)行?以51單片機(jī)為例說明亞帆的觀點(diǎn):中斷是指中斷正在進(jìn)行的任務(wù),以執(zhí)行更緊急的任務(wù)。顯然,至少需要兩套程序,一套主程序和一
單片機(jī),外部中斷程序,為什么不用寫在主程序中?為什么中斷函數(shù)不在主函數(shù)也可以運(yùn)行?
以51單片機(jī)為例說明亞帆的觀點(diǎn):
中斷是指中斷正在進(jìn)行的任務(wù),以執(zhí)行更緊急的任務(wù)。顯然,至少需要兩套程序,一套主程序和一套中斷程序。
寫在主程序中只能一步一步地執(zhí)行,不能達(dá)到高優(yōu)先級(jí)的目的。所以這是行不通的。
0x0000地址是硬件重置后執(zhí)行程序的條目。0x0003是外部中斷項(xiàng),以此類推。
復(fù)位后,將從0x0000自動(dòng)執(zhí)行,當(dāng)外部中斷到來時(shí),將從0x0003自動(dòng)執(zhí)行。當(dāng)函數(shù)寫入中斷0時(shí),該函數(shù)將根據(jù)中斷號(hào)自動(dòng)放置在相應(yīng)的條目上。中斷編號(hào)0是將此函數(shù)放入0x0003(實(shí)際上是一條跳轉(zhuǎn)指令)。
如果主程序中未打開中斷和啟用中斷,則0x0003是正常的程序存儲(chǔ)空間。
詳見下圖:
如圖所示,中斷僅表示兩組程序(藍(lán)色和紅色)。
在主函數(shù)中,必須要對(duì)被調(diào)用函數(shù)進(jìn)行類型說明,否則在編譯時(shí)會(huì)出現(xiàn)錯(cuò)誤,這句話為什么錯(cuò)?
調(diào)用的函數(shù)未在主函數(shù)中聲明。例如,如果使用include文件,則可以使用不同的定義直接使用它。
被調(diào)用函數(shù)為什么要在主函數(shù)之前聲明?
調(diào)用函數(shù)就是要使用這個(gè)函數(shù),通常寫在main函數(shù)中,比如:void Hanshu(void)//這是函數(shù)聲明int main(void){Hanshu()//這是函數(shù)調(diào)用return 0}void Hanshu(void)//這是函數(shù)定義{printf(“您好”),函數(shù)定義寫在主函數(shù)之后,函數(shù)聲明寫在函數(shù)定義之前,稱為預(yù)聲明。如果函數(shù)定義寫在main函數(shù)之前,編譯器已經(jīng)知道函數(shù)的所有信息,因此可以省略pre聲明,但這不是C的標(biāo)準(zhǔn)樣式,因?yàn)閙ain()通常只提供整個(gè)程序的框架,所以最好將main()放在所有函數(shù)定義之前。此外,函數(shù)通常放在其他文件中,因此預(yù)聲明是必不可少的。