FreeRTOS优化与错误排查方法
- 2019 年 10 月 15 日
- 筆記
写在前面
主要是为刚接触 FreeRTOS 的用户指出那些新手通常容易遇到的问题。这里把最主要的篇幅放在栈溢出以及栈溢出j检测上,因为栈相关的问题是初学者遇到最多的问题。
printf-stdarg.c
当调用 C 标准库 的函数时,栈空间使用量可能会急剧上升,特别是 IO 与字符串处理函数,比如 sprintf()、printf()等。在 FreeRTOS 源码包中有一个名为 printf-stdarg.c 的文件。这个文件实现了一个栈效率优化版的小型 sprintf()、printf(),可以用来代替标准 C 库函数版本。在大多数情况下,这样做可以使得调用 sprintf()及相关函数的任务对栈空间的需求量小很多。
可能很多人都不知道freertos中有这样子的一个文件,它放在第三方资料中,路径为“FreeRTOSv9.0.0FreeRTOS-PlusDemoFreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC”,我们发布工程的时候就无需依赖 C 标准库,这样子就能减少栈的使用,能优化不少空间。
该文件源码(部分):
static int print( char **out, const char *format, va_list args ) { register int width, pad; register int pc = 0; char scr[2]; for (; *format != 0; ++format) { if (*format == '%') { ++format; width = pad = 0; if (*format == '