kenaz 发表于 2024-4-9 10:29:18

AVR堆栈溢出判断条件的疑问

各位好,
判断AVR堆栈是否溢出时,如图,判断了返回值时候不等于0xAA,如果不等于则认为溢出。

请问判断依据0xAA是如何得到的,万分感谢!

wye11083 发表于 2024-4-9 12:08:19

进来时先加加个aa

t3486784401 发表于 2024-4-9 15:13:26

这语法看起来是 ICCAVR,摘抄一段手册。 编译器会自动在启动代码里加上 sentinel 用于检测堆栈是否溢出。

然后一般就是 0x55 0xAA 这样比较有特点的数值,类似于【烫屯锟斤拷】:

cne53102 发表于 2024-4-9 16:18:35

我不用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]
查看完整版本: AVR堆栈溢出判断条件的疑问