嵌入式技术论坛
直播中

刘强

7年用户 1198经验值
私信 关注
[问答]

rtthread中发送信号给就绪态线程伪造现场求解

rtthread中发送信号给就绪态线程 , 线程伪造现场, 为什么-32 呀,这不是增加了线程的开销吗,虽然后边恢复了sp指针,但是万一因为这个32+16*4这个伪造的现场导致线程栈溢出呢?
我认为-4就够了 , 请大佬指教!!!
线程栈的初始化 (-4)
2.jpg
信号伪造现场 (-32)
2.jpg
线程栈初始化函数 (+4)
2.jpg
这个栈的初始化为什么要先-4后+4呢? 是基于什么考虑的呢?

回帖(2)

陈秀英

2023-4-7 15:42:33
为什么要先-4后+4呢?
历史问题,为了兼容。你可以只看减4。加4是为了libcpu里面方便计算。
这里的加4减4与signal无关。
举报

陈秀英

2023-4-7 15:42:45
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!
最早减4,libcpu里面就可以直接用了。
后面发一有些芯片的栈要8字节对齐,以及64位,以及向上生长的情况。
所以libcpu里面需要减4之前的值方便计算。
方案有2个:
把减4去掉,有需要的自己减。
保持不变,有需要的自己加回来。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分