RTOS之估算栈的深度

任务栈的深度由三个因素决定:函数调用关系,局部变量,保存现场的寄存器

一、原理

1.函数调用关系

以cortex-M3为例,每层调用关系都会用到8个被调用者保存寄存器(R4-R11)以及链接寄存器(LR)共9个寄存器,也就是每层36个字节。

2.局部变量

同条调用关系内的所有局部变量的字节大小。

3.保存cpu寄存器

至多保存cpu16个寄存器,也就是16*4个字节。

二、例子

假设有任务A,含有8字节的局部变量,以及调用了函数a1函数a2

函数a1含有4字节的局部变量,以及调用了函数b,

函数b含有12字节的局部变量,以及调用了函数c,

函数c含有4字节的局部变量;

函数a2含有400字节的局部变量;

那么a1调用关系的栈大小大致为:abc三层调用关系(36*3)+ 局部变量(8+4+12+4)+保存现场(64)= 200字节

a2调用关系的栈大小大致为:a一层调用关系(36)+局部变量(8+400)+ 保存现场(64)= 508字节

那么任务A应该选择比508字节大的栈深度。

以上均为估算,与实际有较大偏差,大致参考即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值