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