浮点运算硬件和格式化浮点变量打印有冲突
32F12K54系列单片机,我出现的问题: 当使用 浮点运算单元 时格式化打印会出现问题,关闭浮点运算单元,格式化打印没有问题。我的格式化打印函数为:
void print_uart3(volatile char *stringg, ...)
{
volatile char stringx;//一个足够长的字符串
va_list arg;
va_start(arg,stringg);
vsprintf(stringx,stringg,arg);
va_end(arg);
uart3_sendstr(stringx); //发送函数 可以是oled usart spi 。。。。字符串格式
}
uart3_sendstr是串口发送函数,可以替换为其他的字符串打印函数。
若我使用 print_uart3("%f\n",a); 将float类型变量a打印出来,将会使单片机不停重启。
若我使用 print_uart3("%d\n",a); 将int类型变量a打印出来,则单片机正常运行。
若我关闭浮点运算单元
则单片机正常打印浮点数。
我的问题代码在附件中
请求各位帮忙解决。
FPMU库是不开源的,我也不知道什么原因,不要同时用就好了 下图是我使用DMA串口发送数据的情况,发送的数据会时不时抖动以下,在到达某个值的时候突然出现一片乱码
我使用的是STC32F12K54单片机
若不使用DMA发送数据,改使用串口发送,数据就不会发送乱码
(百思不得其解)
代码打包好了,关于上一个问题,我把串口3输出改成串口1输出,浮点冲突不见了.
这两个是用于切换使用普通串口发送和使用DMA串口发送的代码.
DebugLab 发表于 2024-8-8 22:23
FPMU库是不开源的,我也不知道什么原因,不要同时用就好了
我需要快速计算FOC的输出,通过串口观察驱动器的状态,如果没有DMA,发送数据会非常慢,会影响FOC的计算速度,而FOC的计算频率对电机控制有很大性影响.所以不得不把串口DMA和FPMU一起使用 这个问题有一定的代表性,我也关注一下
keil C251编译器,用到lib库文件时,不要使用“REMOVEUNUSED”。
把“REMOVEUNUSED”删掉试试:
本帖最后由 杨光宇 于 2024-8-10 14:56 编辑
乘风飞扬 发表于 2024-8-9 11:13
keil C251编译器,用到lib库文件时,不要使用“REMOVEUNUSED”。
把“REMOVEUNUSED”删掉试试:
...
我试试,没用,还是有乱码
闭源的东西调试起来很麻烦啊 乘风飞扬 发表于 2024-8-9 11:13
keil C251编译器,用到lib库文件时,不要使用“REMOVEUNUSED”。
把“REMOVEUNUSED”删掉试试:
...
试过了,没用
32F12K54设计改进中,尚未定型量产,请改PCB,
用速度实际更快的 8051U-34K64-LQFP48取代
页:
[1]
2