Sha*_*aoh 3 c embedded printf operating-system mips
最近,我正在使用在MIPS架构上运行的特殊嵌入式操作系统.我不太了解它.当我使用printf函数时,看到一些奇怪的东西:
int a = 10;
float b = 3.14;
double c = 3.14;
printf("a is %d\n", a); // I'm sorry I forgot to type the parameters just now
printf("b is %f\n", b); // Error
printf("c is %f\n", c); // Error
Run Code Online (Sandbox Code Playgroud)
输出是:
a is 10
b is 0.000000
Run Code Online (Sandbox Code Playgroud)
a是对的,但b似乎是错的,c甚至无法打印.函数printf来自newlib(一个C语言库).注意,可以正确计算浮点数/双数,正确存储在内存中,并且它们无法正确打印.
我认为操作系统可能有问题.我只是想知道可能是什么原因.有没有人以前遇到过这个问题?
MIPS-EABI需要8字节堆栈对齐,而"特殊嵌入式操作系统"将堆栈对齐在4字节边界上.
在将double作为函数参数传递之前,似乎正常运行的应用程序是此错误的典型症状.
您需要确保操作系统创建具有8字节堆栈对齐的线程.
| 归档时间: |
|
| 查看次数: |
2817 次 |
| 最近记录: |