深圳做网站j华信科,杭州建电商网站多少钱,怎么卸载电脑上wordpress,嘉瑞建设有限公司网站必须类型一致的判断才能正常
double a-0.4;
if(a -0.2){print(低电平);
}这段代码可能未必如你所愿的运行. 小于号的判断一定要类型一致, 尤其是牵扯到双精度类型的判断… 一定要保证符号 两边的数据类型一致才有可能得到你想要的结果. 代码里 -0.4 默认…必须类型一致的判断才能正常
double a-0.4;
if(a -0.2){print(低电平);
}这段代码可能未必如你所愿的运行. 小于号的判断一定要类型一致, 尤其是牵扯到双精度类型的判断… 一定要保证符号 两边的数据类型一致才有可能得到你想要的结果. 代码里 -0.4 默认可能是float类型. 有的编译器默认是double类型. 一定要测试过才行.
不要使用 malloc函数获取内存
float* aa (float*)malloc(1000 * sizeof(float));
float* bb (float*)malloc(1000 * sizeof(float));
float* cc (float*)malloc(1000 * sizeof(float));for (i 0; i signal-size; i)
{ sindata[i] sin(aa[i]);cosdata[i] cos(aa[i]); printf(%d at Phase %f sin is %f, cos is %f \r\n,i,referencePhase, referenceSin[i] , referenceCos[i] );
}如果是这样的代码, 在PC上基本上是不会出什么问题, 如果是在STM32单片机上. 这么写估计会跑出来一大堆的问题. 为了这个问题我调试了大半天. 最终的原因在 动态分配内存 malloc() 函数上, 不一定能正确获得存储空间. 期初以为是float的精度不一致的问题, 逐行 printf 对比后才发现. 是malloc() 的问题. 改成
float aa[1000] {0};
float bb[1000] {0};
float cc[1000] {0};for (i 0; i signal-size; i)
{ sindata[i] sin(aa[i]);cosdata[i] cos(aa[i]); printf(%d at Phase %f sin is %f, cos is %f \r\n,i,referencePhase, referenceSin[i] , referenceCos[i] );
}把存储数据的变量改成全局静态的. 基本上不会出错.
不要在函数中初始化变量,尤其是大的数组变量. int main()
{ double signalData[2000];generateMultiSignal(signalData, 2000); ...
}这段代码中signalData 犯了2个错误, 1.在main函数中定义, 2.这里只是声明一个数组变量, 并非是初始化一个数组变量. 改成下面这么写就没问题了.
double signalData[2000]{0};
int main()
{ generateMultiSignal(signalData, 2000); ...
}强制类型转换会丢失一个数值
float anglea 6.2900;
int indexb (int)(anglea * 100);
printf(indexbbb: %d, angle: %f\n, indexb, anglea);理论上应该得到的是 indexbbb: 629, angle: 6.2900 但实际上得到的是 indexbbb: 628, angle: 6.2900 比实际值少了一个1?
float anglea 6.29000001;
int indexb (int)(anglea * 100);
printf(indexbbb: %d, angle: %f\n, indexb, anglea);这样输出的值就是正常的. 具体原因不知.
开启DSP加速. 引用的lib库文件一定要正确.
引用 arm_cortexM4l_math.lib 时
arm_sin_f32(123456) 输出123456 正确的lib库应该是用 lf 的浮点库. arm_cortexM4lf_math.lib
害我找了1天的bug啊… 另外如何开启DSP加速, 请参考下面的几篇文章
https://blog.csdn.net/WandZ123/article/details/125593908 https://zhuanlan.zhihu.com/p/462911261 https://blog.csdn.net/m0_74923693/article/details/136857288
printf 必须数据格式一致
double age 18.0;
printf(age %f \r\n, age);这会输出 age 0.00 正确代码如下 double age 18.0;
printf(age %f \r\n, (float)age);