【转】UCOS-II之字节对齐问题 sprintf

用到ucos这个操作系统,简单容易移植,占用资源少。一般来说,在ucos上运行标准C函数应该是没有什么问题的。这时候问题就出现了 当ucos运行到Cortex-M3上时候,这个时候使用sprintf进行浮点数格式化输出的时候就会有些问题,无法正常输出浮点数,操作系统也会停止运行,处于崩溃状态。 操作系统崩溃有很多原因,我遇到的两个原因是:堆栈溢出和数据对齐。不知道首先遇到的是哪个问题,如果使用MDK编译器的话请在系统任务堆栈前面进行数据对齐声明,示例:__align(8) static OS_STK TaskStartStk[TASK_START_STK_SIZE];如果你没有修改过arm的启动代码可能就会出现这个问题,启动代码默认使用4字节对齐,而且ARM支持非对齐状态方式(便于在网络通信中优化效率)。而sprintf函数若是使用格式化浮点数就需要进行8字节对齐,这就是问题的所在,只要堆栈声明成8字节对齐就可以了。随后注意sprintf函数需要较大内存空间,任务堆栈也要声明足够的空间来运行程序。 另外在IAR编译器中只要选择printf函数使用full方式编译就能够顺利编译通过,这方面IAR自动化做的较好

posted on 2015-09-09 12:05  vi_cc  阅读(693)  评论(0编辑  收藏  举报

导航