日志打印对线程栈的影响

日志打印是常用的调试手段, 然而在线程中调用日志打印函数, 可能会引起栈深度变化导致栈溢出. 为了保证栈不溢出每个线程都需要增加一定的深度给日志打印预留, 内存小的项目可能难以提供.
以SEGGER_RTT_printf为例
在这里插入图片描述
函数调用很深, 每个函数都有大量的自动变量, 甚至还定义了缓冲区
char acBuffer[SEGGER_RTT_PRINTF_BUFFER_SIZE];
因此各个线程在调用的时候, 根据调用的位置会有不同的影响, 也可能完全无影响.
在这里插入图片描述
这部分内存的使用并不对产品功能有帮助, 且每个线程都会多占用一点, 如果线程较多, 那么对内存的消耗也比较可观.

利用软中断来打印, 则可以利用MSP栈, 一个打印结束就释放了内存, 另一个再打印可以共用, 可以节省较多内存.

采用SVC可以很方便地传递传递参数, 但是SVC通常设置为较高的中断优先级, 可能会阻塞其他重要的中断. 这里用一个不用的中断作为软中断来实现.

static va_list ParamList;	// 参数列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值