AVR堆栈溢出判断条件的疑问
各位好,判断AVR堆栈是否溢出时,如图,判断了返回值时候不等于0xAA,如果不等于则认为溢出。
请问判断依据0xAA是如何得到的,万分感谢! 进来时先加加个aa 这语法看起来是 ICCAVR,摘抄一段手册。 编译器会自动在启动代码里加上 sentinel 用于检测堆栈是否溢出。
然后一般就是 0x55 0xAA 这样比较有特点的数值,类似于【烫屯锟斤拷】:
我不用ICC啊不一定对,
从网上信息来看,ICCAVR的话,在libsrc.avr文件夹下有个init.s
里面有这一段:
ldi R16,0xAA; sentenial
std Y+0,R16
; put sentenial at bottom of HW stack
堆栈应该就是在这里初始化为0xAA的。
0xAA是10101010,可能是认为这个值被覆盖了的话发生变动的概率比较大,所以可以这样判断。
但这不像是万无一失的。
页:
[1]