当前位置: 首页 > 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;
}

http://www.xdnf.cn/news/396073.html

相关文章:

  • Go语言实现分布式锁:从原理到实践的全面指南
  • 网络编程(一)网络编程入门
  • LLMs之Mistral Medium 3:Mistral Medium 3的简介、安装和使用方法、案例应用之详细攻略
  • 使用 Java 反射打印和操作类信息
  • Typora输入文字卡顿的问题(原因过长上万字)
  • Spyglass:默认配置文件
  • VMware安装CentOS Stream10
  • ArtStation APP:全球艺术家的创作与交流平台
  • 九、STM32入门学习之WIFI模块(ESP32C3)
  • 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN
  • 跟我学c++高级篇——模板元编程之十三处理逻辑
  • E+H流量计profibus协议如何转换成profinet协议
  • C语言_函数调用栈的汇编分析
  • 【AI论文】作为评判者的感知代理:评估大型语言模型中的高阶社会认知
  • 二分查找的理解
  • Object类
  • wordpress自学笔记 第三节 独立站产品和类目的三种展示方式
  • RabbitMQ的工作队列模式和路由模式有什么区别?
  • 2. cef 及 cefcapi
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷七及详细答案解析
  • Qt开发经验 --- 避坑指南(13)
  • 梦熊联盟:202505基础语法-题解
  • 沐言智语开源Muyan-TTS模型,词错率、语音质量评分都处于开源模型的一线水平,推理速度相当快~
  • Go语言运算符详解
  • No module named ‘xxx’报错原因及解决方式
  • DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002
  • css背景相关
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • 进程间关系与守护进程
  • Quantum convolutional nerual network