|
不要說(shuō)“一般情況”,在一般情況下,樓主的問(wèn)題不存在,真正的c語(yǔ)言里面,中斷和主函數(shù)都是可以調(diào)用同一個(gè)函數(shù)的,局部變量在調(diào)用的時(shí)候在堆棧上生成,退出該函數(shù)釋放局部變量,沒(méi)有什么不能用的。
樓主的情況屬于特殊情況,8051這個(gè)體系結(jié)構(gòu)對(duì)于高級(jí)語(yǔ)言太不友好了,如果用標(biāo)準(zhǔn)c的做法,那點(diǎn)兒可憐的ram很快就會(huì)被用光,間址指令很少,這么做不光浪費(fèi)空間也非常浪費(fèi)時(shí)間。所以c51在這里才用了非標(biāo)準(zhǔn)的做法,局部變量地址固定,在鏈接后就有了具體位置,那么主函數(shù)調(diào)用這個(gè)函數(shù)的時(shí)候發(fā)生中斷調(diào)用這個(gè)函數(shù),里面的局部變量就全亂套了,中斷返回后,繼續(xù)運(yùn)行主函數(shù)調(diào)用的這個(gè)函數(shù),里面的局部變量值都是錯(cuò)的。我的辦法就是再寫(xiě)一個(gè)函數(shù),讓主函數(shù)和中斷函數(shù)調(diào)用的不是同一個(gè)即可。 |
評(píng)分
-
查看全部評(píng)分
|