当前位置:网站首页>IAR sprintf 浮点 在UCOS 总格式化成0.0的问题
IAR sprintf 浮点 在UCOS 总格式化成0.0的问题
2022-07-26 10:38:00 【aping_cs_dn】
参考自http://blog.chinaunix.net/uid-21977330-id-3209252.html
1. 问题描述:
当使用uocs printf(),sprintf()打印浮点数问题会出问题,但是裸机不会出问题
我现在使用LPC1758跑UCOS,在使用sprintf打印float类型时候,不管是何值最后都是0.0,但是类型是int,short类型时没有问题。网上查到是任务堆栈8字节对齐就可以了。
当没有操作系统时,系统堆栈是8字节对齐的,但是当使用ucos时,用户任务不一定是8字节对齐.

Task 3 中的堆栈起始指针0x1000000F4,不是8字节对齐,所以但在Task 3 任务中调用printf等系列函数就会出现问题.
2. 解决方法
我用的是IAR,通过#pragma data_alignment指定对齐字节数
#pragma data_alignment=8 //如果不是8字节对齐,sprintf的浮点数将输出0.0
static OS_STK App_TaskWorkModeCntStk[APP_CFG_TASK_WORKMODE_CNT_STK_SIZE];
OS_STK T_Stk[Task1_LED1_Stk_Size];
3. 8字节对齐原因
这事儿的历史在于ARM本身不支持非对齐数据存取;因此在有了64Bit的数据操作指令后,指令要求8字节对齐。进而,在编译器的某个版本之后(RVCT3?),AAPCS就要求堆栈8字节对齐。
是先有8字节对齐的AAPCS,然后才有的CM3。先后顺序要注意。CM3 r2p0之前,自动压栈也不要求8对齐,r2p0好像才是强制对齐的。
printf的8对齐是C运行库要求的,和硬件无关,C RTL手册有写,可以去阅读。其根源在于AAPCS要求;而AAPCS根源在于LDRD这类指令。
换句话,未来如果128Bit数据操作有了,ARM还不支持非对其,那AAPCS可能升级为16字节对齐。
供参考,CM3和C-RTL对齐的问题。
感谢博主 enzo26的ChinaUnix博客
边栏推荐
- Inheritance method of simplified constructor (II) - class inheritance in ES6
- 数据分析入门 | kaggle泰坦尼克任务
- QRcode二维码(C语言)遇到的问题
- 7-25 0-1背包 (50分)
- L2-005 set similarity (intersection of vector and set)
- 第5期:大学生入职必备技能之二
- [leetcode每日一题2021/2/14]765. 情侣牵手
- Perfect / buffer motion framework in sentence parsing JS (for beginners)
- 异常的概念与处理
- .net operation redis list list
猜你喜欢

Issue 5: the second essential skill for College Students

【机器学习小记】【搭建循环神经网络及其应用】deeplearning.ai course5 1st week programming(keras)

【机器学习小记】【风格迁移】deeplearning.ai course4 4th week programming(tensorflow2)
![[leetcode每日一题2021/2/14]765. 情侣牵手](/img/be/8639a05c733638bf0b3fdeb11abccf.png)
[leetcode每日一题2021/2/14]765. 情侣牵手
![[leetcode每日一题2021/8/30]528. 按权重随机选择【中等】](/img/13/c6cb176d7065035f60d55ad20ed1bf.png)
[leetcode每日一题2021/8/30]528. 按权重随机选择【中等】

mysql20210906

hx711 数据波动大的问题

多目标优化系列1---NSGA2的非支配排序函数的讲解

el-table实现可编辑表格
![[leetcode每日一题2021/4/29]403. 青蛙过河](/img/fb/612777c77df5a611506e72f4f4c3c8.png)
[leetcode每日一题2021/4/29]403. 青蛙过河
随机推荐
10 令 operator= 返回一个 reference to *this
uniapp使用简单方法signalR(仅用于web调试,无法打包app)
kali 查看ip地址
2021-08-14三子棋
MD5 encryption
[Halcon vision] threshold segmentation
比较器(Comparable与Comparator接口)
点击el-dropdown-item/@click.native
C language callback function
同步方法中不使用asyncTask<T> 修饰和await获取异步返回值(同步方法中调用异步方法)
【机器学习小记】【风格迁移】deeplearning.ai course4 4th week programming(tensorflow2)
Application of.Net open source framework in industrial production
移动端H5开发常用技巧总结
JS对象赋值问题
12 复制对象时勿忘其每一个成分
超图 影像 如何去除黑边(两种方法)
.NET操作Redis String字符串
mysql 进不去了怎么办
[Halcon vision] morphological expansion
Using native JS to realize custom scroll bar (click to reach, drag to reach)