[已解决]请教关于STC32G144K246和MDU32库的u32除法问题
问题已经解决~~~~~之前数学库用的是32G12K的MUD32库
换成32G144K专用的DSP32库就可以了
{:hecai:}{:hecai:}{:hecai:}{:hecai:}{:hecai:}{:hecai:}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
移植 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类型的除法呢?
https://www.stcai.com/khs
STC32G144K246 的 MDU32库包含在DSP库中,
不是传统的 MDU32库
STC32G144K246 上用OLED显示数字
1、没有加载MDU32库,显示正常
2、加载MDU32库之后,显示结果都变成0
"加载了库文件 stc_usb_cdc_32g.lib 之后,计算结果就不正常;"
这里写错了吧,是加载stc32_mdu32_large.lib
可以复现
改用DSP库测试正常
深圳国芯人工智能有限公司-库函数
ercircle 发表于 2025-12-12 14:25
改用DSP库测试正常
深圳国芯人工智能有限公司-库函数
果然!换上专门的库就正常了{:hecai:}
帮{:baoquan:}用上下面的万能板,发视频/图片
页:
[1]