LAOXU 发表于 2023-2-26 18:26
下面为不外挂 STC32G_MDU32库 编译的(编译后代码长度不同), 另, 例程中, 变量拷贝时未修改, 如下图, 请自 ...
好的,非常感谢楼主
加了 STC32G_MDU32库还是速度没有变化 看样子没有浮点硬件,运算还是有点慢 但比STC8快 不知道有哪位大师在做FFT的,有什么好的算法,提供参考一下
dannyzhu008 发表于 2023-2-27 16:17
加了 STC32G_MDU32库还是速度没有变化 看样子没有浮点硬件,运算还是有点慢 但比STC8快 不知道有哪位大师 ...
c251指令, 对浮点加减乘运算速度还行, 只是对除法运算, 使用了传统的移位加减法操作, 速度慢, 此运算库, 使用 MDU32单元, 利用算法, 改写原 C251的浮点数除法, 使得运算速度大幅度提升, 请看测试结果.
实测 浮点运算速度, 比原标准浮点运算, 速度 快了 3倍.
实测 浮点运算速度, 比原标准浮点运算, 速度 快了 3倍.
大家感受下,提速3倍,我没装 KEIL
神农鼎 发表于 2023-2-27 20:58
大家感受下,提速3倍,我没装 KEIL
啥意思没装KEIL怎么觉得怪怪得
我在忙生产,不做这些细节的小事N年了,大家自己要用的验证下
本帖最后由 zjiafu 于 2023-4-18 19:07 编辑
64位的里有个测试例子,下载修改测试发现LADD64和LSUB64会死机,什么情况?
#include <STC32G.H>
#include <long64.h>
#include <INTRINS.h>
volatile LONGLONGL1;
volatile LONGLONGL2;
volatile LONGLONGL6;
volatile LONGLONGL7;
void main(void)
{
u8 i=0;
WORD64(L1, 0x000000000, 0x00000000);
WORD64(L2, 0x000000000, 0x00001234);
do{
LADD64(L1, L2, L6);
LSUB64(L1, L2, L7);
i++;
}while(i>0) //循环256次
while(1);
}
我把子LADD64和LSUB64放在while()循环里,结果跳不出循环
后来调试发现i 的值一直是0XBB,所以跳不出循环,是不是"i"值被LADD64和LSUB64改变了?
zjiafu 发表于 2023-4-18 16:44
64位的里有个测试例子,下载修改测试发现LADD64和LSUB64会死机,什么情况?
你好,我查了一下,内存冲突,keil 将临时变量优化了。
目前只找到两个解决方法:
1、 u8 i=0; 前面加 volatile
即 volatileu8 i=0;
2、 u8 i=0;设置成全局变量。
LAOXU 发表于 2023-2-4 20:20
STC32G_MDU32 标准数学函数库, 含以下库文件.
1. 浮点加减乘除法
浮点除法测试了一下,极端数值下处理结果与KEIL的不一致,比如0.07/9.99999e36,KEIL的结果是为0,而这个库的结果是一个错误的但也很小的数值