问题已经解决~~~~~
之前数学库用的是32G12K的MUD32库
换成32G144K专用的DSP32库就可以了
     
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
移植 STC32G144K246 的OLED驱动的时候,发现一个问题,显示数字的函数,不论输入的数值是多少,显示的结果都是0。
然后写了个测试程序,查看输入的数值和位数
- void ShowNum( u32 num )
- {
- u32 numtemp = num;
- u8 HLimit = 0;
-
- numtemp = num;
-
- printf_usb("num = %lu , ", num);
- printf_usb("numtemp = %lu , \r\n\r\n", numtemp);
-
- while( numtemp )
- {
- HLimit ++;
- numtemp = numtemp/10;
- printf_usb("HLimit = %d , ", HLimit);
- printf_usb("numtemp = %lu \r\n", numtemp);
- }
-
- }
复制代码
调用 ShowNum函数,填入数值 1234567,
ShowNum( 1234567 );
串口助手显示的结果是
numtemp 的值经过一次 /10 计算之后,直接变成0了。
而这个函数在 STC32G12K128 上运行,则可以正常显示结果
========================================================
几番尝试之后发现
1、
如果在 while 循环里进行除法计算的地方,把变量 numtemp 的数据类型强制转换成float类型,
numtemp = (float) numtemp/10;
就可以显示正确的计算结果。
2、
在创建 STC32G144K246 和 STC32G12K128 的工程的时候,都添加了 MDU32硬件数学库
在 STC32G12K128 的工程中,有没有这个库,计算结果都正确;
而在 STC32G144K246 的工程里,
加载了库文件stc32_mdu32_large.lib 之后,计算结果就不正常;
不加载这个库文件的话,计算结果就变正常了
3、
还是在计算除法的那一行
在加载了MDU32库的情况下,如果除数是2的倍数,计算结果也正常
如果除数是其它数值(比如3、5、10等等),就会出现直接变成0的情况
===================================================
第一次遇到这个问题,之前在 8H、32G12K 、AI8051U 上都能正常计算,AI8051U也是加载了MDU32+TFPU库的。
u8、u16之类其它的数据类型也都计算正常。
请问除了不加载MDU32库,怎么才能在 STC32G144K246 上正常计算u32类型的除法呢?
|