FreeRTOS——错误排查
2024-09-16 23:23:14
1. printf-stdarg.c
在调用标准库函数时,栈空间的用量可能急剧上升,特别是IO与字符串处理函数,比如 sprintf()。
在FreeRTOS下载包中有一个名为printf-stdarg.c 的文件,这个文件可以替代标准C库函数版本。在大多数情况下,可以调用sprintf() 及相关函数时,对栈空间的需求量小的很多。
2. 栈溢出:uxTaskGetStackHighWaterMark() 用来查询指定任务在运行历史中,其栈空间还差多少溢出。
3. 系统运行时,栈侦测的方法:
方法1:栈空间的指向超过了任务栈的有效范围,调用钩子函数。说明:这种方法执行的速度快,但是栈溢出有可能发生两次上下文保存之间,这种情况不会被侦测到。
方法2:在创建任务时,任务空间就设置了一个标记,该方法检查栈的最后20个字节,查看预置在这里的数据是否被覆盖。如果被覆盖,则调用钩子函数。
方法1与方法2的比较:① 方法1比方法2快;② 方法2检测20个字节的速度是很快得到,这种方法可以侦测到任何时候的栈溢出,虽然理论上是有缺陷,但几乎不可能产生。
4. 应用程序在中断函数中崩溃:
1)检查中断是否导致栈溢出。
2)宏和API函数调用是否正确。
3)比较常见的错误:在优先级高于 configMAX_SYSCALL_INTERRUPT_PRIORITY 的中断中,调用了 FreeRTOS API 函数。
最新文章
- WPF中如何将ListViewItem双击事件绑定到Command
- php常见的面试题目
- 设计模式C#实现(七)——生成器模式
- Java SE 第二十四讲----static与final使用陷阱关键字
- 刀哥多线程之03GCD 常用代码
- SQLite学习第03天:环境搭建
- 用函数生成select选择框
- Delphi使用Windows API函数AnimateWindow实现窗体特效
- Hello China操作系统STM32移植指南(一)
- 这可能是php世界中最好的日志库——monolog
- vimgdb安装以及使用
- 用TensorFlow实现文本分析模型,做个聊天机器人
- 获取 Let's Encrypt 免费通配符证书实现Https
- cbow与skip-gram
- each遍历 的原理
- 000 Excel获取数据
- Please ensure that adb is correctly located at 。。。。。。。。。。。。
- CTF中的变量覆盖漏洞
- 20155203 2016-2017-4 《Java程序设计》第9周学习总结
- Oracle Solaris 11.4 GA 版发布,这将是 Solaris 的绝唱