介绍
这篇文章主要介绍”FreeRTOS怎么进行优化与错误排查”,在日常操作中,相信很多人在FreeRTOS怎么进行优化与错误排查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“FreeRTOS怎么进行优化与错误排查”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
写在前面
主要是为刚接触FreeRTOS的用户指出那些新手通常容易遇到的问题。这里把最主要的篇幅放在栈溢出以及栈溢出j检测上,因为栈相关的问题是初学者遇到最多的问题。
printf-stdarg。c
当调用<强> c标准库>强劲的函数时,栈空间使用量可能会急剧上升,特别是IO与字符串处理函数,比如sprintf (), printf()等。在FreeRTOS源码包中有一个名为<强> printf-stdarg。c >强的文件。这个文件实现了一个栈效率优化版的小型sprintf (), printf(),可以用来代替标准c库函数版本。在大多数情况下,这样做可以使得调用sprintf()及相关函数的任务对栈空间的需求量小很多。可能很多人都不知道freertos中有这样子的一个文件,它放在第三方资料中,路径为“<强> FreeRTOSv9.0.0 \ FreeRTOS-Plus \ Demo \ FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC 强> ",我们发布工程的时候就无需依赖<强> c标准库>强劲,这样子就能减少栈的使用,能优化不少空间。该文件源码(部分):
static int 打印(,char * *,, const char *格式,va_list args ) { register int 宽度,,垫; 时间=register int  pc 0; char 可控硅[2]; for (, * format !=, 0;, + +格式),{ if (* format ==, & # 39; % & # 39;), { + +格式; 时间==width pad 0; if (* format ==, & # 39; \ 0 & # 39;),打破; if (* format ==, & # 39; % & # 39;), goto ; if (* format ==, & # 39; & # 39;), { + +格式; 时间=pad PAD_RIGHT; } while (* format ==, & # 39; 0 & # 39;), { + +格式; pad |=, PAD_ZERO; } for (,,, * format 的在=,& # 39;0 & # 39;,,,,* format & lt;=, & # 39; 9 & # 39;,, + +格式),{ *=width 10; +=width * format 作用;& # 39;0 & # 39;; } 如果(==,,* format  & # 39; & # 39;,), { register char * s =, (char *) va_arg (arg游戏的不同之处是,int ); +=pc prints (,, ?年代:“(null)“,,宽度,,pad); 继续; } 如果(==,,* format  & # 39; d # 39;, | |, * format ==, & # 39;我# 39;,),{ pc +=, printi (,, va_arg (arg游戏的不同之处是,int ),,,, 1,,宽度,,,,& # 39;一个# 39;); 继续; } 如果(==,,* format  & # 39; x # 39;,), { pc +=, printi (,, va_arg (arg游戏的不同之处是,int ),, 16日,0,,宽度,,,,& # 39;一个# 39;); 继续; } 如果(==,,* format  & # 39; x # 39;,), { pc +=, printi (,, va_arg (arg游戏的不同之处是,int ),, 16日,0,,宽度,,,,& # 39;一个# 39;); 继续; } 如果(==,,* format  & # 39; u # 39;,), { pc +=, printi (,, va_arg (arg游戏的不同之处是,int ),,,, 0,,宽度,,,,& # 39;一个# 39;); 继续; } 如果(==,,* format  & # 39; c # 39;,), {/*,char 断开连接;converted 用int then pushed 提醒,stack */可控硅[0],=,(char) va_arg (arg游戏的不同之处是,int ); 可控硅[1],=,& # 39;\ 0 & # 39;; +=pc prints (,,可控硅,,宽度,,pad); 继续; } } else { : printchar (,, *格式); + +电脑; } } if (出),* * out =, & # 39; \ 0 & # 39;; va_end (, args ); return pc; } int printf (const char *格式,,…) { va_list 参数; va_start (arg游戏的不同之处是,format ); return 打印(0,大敌;格式,args ); } int sprintf (char *,, const char *格式,,…) { va_list 参数; va_start (arg游戏的不同之处是,format ); return 打印(,,,,格式,args ); } int snprintf (, char *缓冲区,unsigned int 统计,,const char *格式,,,,) { va_list 参数; (,void ),数; va_start (arg游戏的不同之处是,format ); return 打印(,,但,,格式,args ); }FreeRTOS怎么进行优化与错误排查