51單片機(jī)stack堆棧
一般編譯器的堆棧用于保存局部變量、函數(shù)的參數(shù)、函數(shù)的返回值、中斷上下文信息等。但Keil對(duì)局部變量、函數(shù)參數(shù)預(yù)先分配空間(放在靜態(tài)全局變量區(qū)),Keil的堆棧只是用于保存函數(shù)嵌套調(diào)用的PC、中斷上下文信息。
從主程序進(jìn)入中斷需要入棧字節(jié)數(shù):13+PC=15 Byte(ACC,PSW,B,DPH,DPL,R0~R7)
Keil支持2級(jí)中斷15×2=30 Byte。
主程序中每級(jí)調(diào)用需要消耗2字節(jié)保存PC,如調(diào)用深度6級(jí),需要6×2=12字節(jié)堆??臻g。
Keil51 編譯后會(huì)生成M51文件,查找?Stack地址,為堆棧起始地址,向上增長到0xff,溢出則導(dǎo)致單片機(jī)復(fù)位。