找回密码
 立即注册
查看: 44|回复: 6

[已解决]请教关于STC32G144K246和MDU32库的u32除法问题

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:616
  • 最近打卡:2025-12-16 09:31:43

35

主题

440

回帖

4053

积分

荣誉版主

积分
4053
发表于 5 天前 | 显示全部楼层 |阅读模式
问题已经解决~~~~~
之前数学库用的是32G12K的MUD32库
换成32G144K专用的DSP32库就可以了


截图202512121433143950.jpg


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

移植 STC32G144K246 的OLED驱动的时候,发现一个问题,显示数字的函数,不论输入的数值是多少,显示的结果都是0。

然后写了个测试程序,查看输入的数值和位数

  1. void ShowNum( u32 num )
  2. {
  3.         u32 numtemp = num;
  4.         u8 HLimit = 0;
  5.         
  6.         numtemp = num;
  7.         
  8.         printf_usb("num = %lu ,  ", num);
  9.         printf_usb("numtemp = %lu ,  \r\n\r\n", numtemp);
  10.         
  11.         while( numtemp )
  12.         {
  13.                 HLimit ++;
  14.                 numtemp = numtemp/10;
  15.                 printf_usb("HLimit = %d , ", HLimit);
  16.                 printf_usb("numtemp = %lu \r\n", numtemp);
  17.         }
  18. }
复制代码


调用 ShowNum函数,填入数值 1234567,

  ShowNum( 1234567 );

串口助手显示的结果是

截图202512121334298327.jpg


numtemp 的值经过一次 /10 计算之后,直接变成0了。


而这个函数在 STC32G12K128 上运行,则可以正常显示结果
截图202512121334496792.jpg


========================================================

几番尝试之后发现

1、
如果在 while 循环里进行除法计算的地方,把变量 numtemp 的数据类型强制转换成float类型,
        numtemp = (float) numtemp/10;
就可以显示正确的计算结果。

2、
在创建 STC32G144K246 STC32G12K128 的工程的时候,都添加了 MDU32硬件数学库
截图202512121309303472.jpg
STC32G12K128 的工程中,有没有这个库,计算结果都正确;
而在 STC32G144K246 的工程里,
加载了库文件stc32_mdu32_large.lib 之后,计算结果就不正常;
不加载这个库文件的话,计算结果就变正常了

3、
还是在计算除法的那一行
在加载了MDU32库的情况下如果除数是2的倍数,计算结果也正常
截图202512121338142817.jpg
如果除数是其它数值(比如3、5、10等等),就会出现直接变成0的情况

===================================================



第一次遇到这个问题,之前在 8H、32G12K 、AI8051U 上都能正常计算,AI8051U也是加载了MDU32+TFPU库的。
u8、u16之类其它的数据类型也都计算正常。

请问除了不加载MDU32库,怎么才能在 STC32G144K246 上正常计算u32类型的除法呢?









截图202512121300418795.jpg
截图202512121302312400.jpg
截图202512121317518793.jpg
截图202512121318067054.jpg
截图202512121321517392.jpg
截图202512121323027546.jpg
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:266
  • 最近打卡:2025-12-16 08:29:17

812

主题

1万

回帖

2万

积分

管理员

积分
21282
发表于 5 天前 | 显示全部楼层
https://www.stcai.com/khs
截图202512121432304062.jpg
STC32G144K246 的 MDU32库包含在DSP库中
不是传统的 MDU32库

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:616
  • 最近打卡:2025-12-16 09:31:43

35

主题

440

回帖

4053

积分

荣誉版主

积分
4053
发表于 5 天前 | 显示全部楼层

STC32G144K246 上用OLED显示数字

1、没有加载MDU32库,显示正常
截图202512121411446107.jpg


2、加载MDU32库之后,显示结果都变成0
截图202512121412484697.jpg
截图202512121413569931.jpg


能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-12-16 08:53:16
已绑定手机

97

主题

3864

回帖

8332

积分

荣誉版主

无情的代码机器

积分
8332
发表于 5 天前 | 显示全部楼层
"加载了库文件 stc_usb_cdc_32g.lib 之后,计算结果就不正常;"

这里写错了吧,是加载stc32_mdu32_large.lib

可以复现
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:389
  • 最近打卡:2025-12-16 08:53:16
已绑定手机

97

主题

3864

回帖

8332

积分

荣誉版主

无情的代码机器

积分
8332
发表于 5 天前 | 显示全部楼层

点评

果然!换上专门的库就正常了  详情 回复 发表于 5 天前
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:616
  • 最近打卡:2025-12-16 09:31:43

35

主题

440

回帖

4053

积分

荣誉版主

积分
4053
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2025-12-12 14:25
改用DSP库测试正常
深圳国芯人工智能有限公司-库函数

果然!换上专门的库就正常了
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:266
  • 最近打卡:2025-12-16 08:29:17

812

主题

1万

回帖

2万

积分

管理员

积分
21282
发表于 5 天前 | 显示全部楼层
用上下面的万能板,发视频/图片
截图202512121435087130.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-17 03:00 , Processed in 0.133796 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表