你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F051K8U6】串口中断发送数据影响float运算.

[复制链接]
andrewz 提问时间:2016-9-26 17:36 /
阅读主题, 点击返回1楼
收藏 1 评论41 发布时间:2016-9-26 17:36
41个回答
andrewz 回答时间:2016-9-29 09:45:43
全部改成C代码后,程序正常了.
至少说明,48MHz单片机条件下,C的效率还是比C++高.
改C的过程中,似乎明白为什么库函数关于寄存器的操作都是用的结构体加指针,因为这样和C++的结构差不多,改起来也比较方便.
似乎以后可以先用C++开发,再转C优化.

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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崩溃.

DMA在C语言下面可能又不是一个好的选择.或许是自己用得还不习惯.
现在每10ms发送8个byte,接收还有float运算都能正常工作.

nongxiaoming 回答时间:2016-9-29 21:45:18
没发现这种问题,一直做项目都是所有串口dma,用得双双的
andrewz 回答时间:2016-9-30 10:01:51

现在每个大周期,1.5ms里面发送8个byte也没有问题,相当于用115200的波特率实现了53333的有效波特率.

如果没错的话,是可以发送16个byte没有问题的~
mark0668 回答时间:2016-9-30 11:55:11
关注一下这个问题
mcust.png
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版