andrewz 发表于 2016-9-29 09:45:43

全部改成C代码后,程序正常了.
至少说明,48MHz单片机条件下,C的效率还是比C++高.
改C的过程中,似乎明白为什么库函数关于寄存器的操作都是用的结构体加指针,因为这样和C++的结构差不多,改起来也比较方便.
似乎以后可以先用C++开发,再转C优化.
:lol

nongxiaoming 发表于 2016-9-29 11:59:46

是不是你的串口收发栈溢出了,导致另外的任务栈乱掉了?

andrewz 发表于 2016-9-29 12:29:58

nongxiaoming 发表于 2016-9-29 11:59
是不是你的串口收发栈溢出了,导致另外的任务栈乱掉了?

不是的.

cloudcn 发表于 2016-9-29 12:49:34

是不是中断函数与任务函数共享变量了?
在任务函数修改可能在中断函数使用的变量最好把中断临时关掉,注意中断关掉时间不要过长,

__disable_irq();
__enable_irq();

andrewz 发表于 2016-9-29 12:52:44

cloudcn 发表于 2016-9-29 12:49
是不是中断函数与任务函数共享变量了?
在任务函数修改可能在中断函数使用的变量最好把中断临时关掉,注意 ...

双缓冲,不会有这个问题.

cloudcn 发表于 2016-9-29 15:39:53

andrewz 发表于 2016-9-29 12:52
双缓冲,不会有这个问题.

方便的话可工程粘出来,研究下?
c++不频烦的删除和创建对象效率不会比c差太多,没准是对象或指针没处理好造成的

andrewz 发表于 2016-9-29 16:23:48

目前问题已经规避了.
在C下面不会出现由于串口导致的float崩溃问题.
但是在更加高端的F407上面,即使用C++也没有发现float崩溃.
:lol
DMA在C语言下面可能又不是一个好的选择.或许是自己用得还不习惯.
现在每10ms发送8个byte,接收还有float运算都能正常工作.
:lol

nongxiaoming 发表于 2016-9-29 21:45:18

没发现这种问题,一直做项目都是所有串口dma,用得双双的

andrewz 发表于 2016-9-30 10:01:51

:lol
现在每个大周期,1.5ms里面发送8个byte也没有问题,相当于用115200的波特率实现了53333的有效波特率.
:lol:lol
如果没错的话,是可以发送16个byte没有问题的~

mark0668 发表于 2016-9-30 11:55:11

关注一下这个问题
页: 1 2 3 [4] 5
查看完整版本: 【STM32F051K8U6】串口中断发送数据影响float运算.