当前位置: 首页 > news >正文

单片机调用printf概率性跑飞解决方法

        最近移植软件到不同平台的单片机上时,遇到了软件概率性跑飞的问题,分析后原因均指向和printf相关的库函数(包括sprintf, vsnsprinft),在任务里调用这些函数就有概率在ucos切换任务时跑飞(中断)。增加堆栈大小等各种方法都不行。

        后来各种查资料发现,可能是va_list功能不支持重入,被中断打断后,再次返回时无法恢复现场(也可能是任务切换函数写的有问题),继续运行printf时list中的内容被破坏,导致跑飞。

        解决方法是自己实现printf函数,并在调用va_list功能时先关闭中断,退出va_list功能时再打开中断。sprintf等相关函数用同样方法处理即可。

int my_printf(char* fmt, ...)
{va_list ap;int RetLen = 0;OS_CPU_SR cpu_sr;OS_ENTER_CRITICAL(); // 这里屏蔽中断va_start(ap, fmt);...... // 实现代码va_end(ap);OS_EXIT_CRITICAL();return RetLen;
}

相关文章:

  • 大疆卓驭嵌入式面经及参考答案
  • 论文阅读与写作:《从探索到突破:解密科研和论文写作的思维密码》
  • 《从零构建一个简易的IOC容器,理解Spring的核心思想》
  • GitHub打开缓慢甚至失败的解决办法
  • 【QT】UDP通讯本地调试
  • Gin 框架入门
  • 缓存(3):本地缓存作用 及 数据一致性 实现策略
  • 20242817-李臻-课下作业:Qt和Sqlite
  • MyBatis源码解读5(3.1、缓存简介)
  • 懒人美食帮SpringBoot订餐系统开发实现
  • MNIST DDP 分布式数据并行
  • Java泛型补充与理解
  • 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系
  • 【GESP真题解析】第 19 集 GESP 二级 2025 年 3 月编程题 1:等差矩阵
  • Scrapyd 详解:分布式爬虫部署与管理利器
  • C# 高效处理海量数据:解决嵌套并行的性能陷阱
  • 图片转ICO图标工具
  • 《Go小技巧易错点100例》第三十三篇
  • Flutter - UIKit开发相关指南 - 导航
  • 互联网大厂Java求职面试:电商商品推荐系统中的AI技术应用
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 从这些电影与影像,看到包容开放的上海
  • 在对国宝的探索中,让美育浸润小学校园与家庭
  • 刘国中:持续加强护士队伍建设,更好保障人民身体健康
  • IPO周报|本周A股暂无新股网上申购,年内最低价股周二上市
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判