stm32F4单片机计算浮点数的时候偶发性出错的解决方法
发现问题
项目开发过程中,中断中要计算几个浮点数,仿真时发现浮点数经常性计算错误:计算结果不可能是负值,但却会计算出负值,而且与真实结果完全没有关联性.当时单片机使用的是STM32F429ZGT6,主频设置为192MHz,运行RTOS,开了十个定时器中断.以及几个外部中断
可能的原因
- 因为执行的函数是在中断中,而且这个函数还挺长,两三百行,所以想到是有可能进中断次数太多,导致栈溢出.将栈调大至0x1000即4K,还是不行,遂排查栈的问题.
- 设置的主频过高,导致单片机稳定性降低,因F429推荐主频是180M,我设置的是192M.将主频设置为180M后再次仿真仍然会出现这个问题,所以也不是超频的原因
- 片子有问题,虽说概率极低,但仍有可能.但是更换了好几块板子,仍然有问题,排除此原因.
- 芯片FPU配置有问题.但将FPU关掉后仍然会出现这个问题,遂排除
发现端倪
因为我设置一个数组,十个定时器中断每次运行此函数时都会将数组中对应的元素加一,然后在执行完成后减一,所以数组中的元素值同一时间只有可能有一个为1,但是仿真的时候却发现有的元素是非零值,甚至有的元素大于1,发现临界段中的代码也会被中断中止,原以为进入临界段会关闭总中断,但查看代码后发现,并没有关闭总中断操作,所以,问题应该是计算浮点数过程中,触发中断,然后可能是浮点数未能正常入栈,导致返回来继续执行时从栈中取出来的浮点数时乱码,从而导致偶发性计算错误.
解决方法
在需要计算浮点数的语句前面关闭总中断,计算完成后再开启总中断.这里使用keil独有的操作总中断函数__enable_irq()
和__disable_irq()
.加上这两句后,问题没有再出现过.
stm32F4单片机计算浮点数的时候偶发性出错的解决方法相关推荐
- php 浮点数比较 出错,PHP计算浮点数出错的解决方法
PHP计算浮点数出错的解决方法 发布时间:2020-06-26 14:37:49 来源:亿速云 阅读:111 作者:Leah 这篇文章将为大家详细讲解有关PHP计算浮点数出错的解决方法,文章内容质量较 ...
- php浮点数计算比较及取整不准确解决方法
原文:php浮点数计算比较及取整不准确解决方法 php有意思的现象,应该是很多编程语言都会有这样的现象.这个是因为计算机的本身对浮点数识别的问题..... [php] view plaincopy $ ...
- ”dpkg: 处理归档 /var/cache/apt/archives/XXXXXX(--unpack)时出错“的解决方法
"dpkg: 处理归档 /var/cache/apt/archives/XXXXXX(--unpack)时出错"的解决方法 参考文章: (1)"dpkg: 处理归档 /v ...
- Python3中使用map()结果出错的解决方法
Python3中使用map()结果出错的解决方法 2016年10月19日 16:18:34 阅读数:2783 在Python2中使用map()会返回一个列表,效果如下: >>> a= ...
- oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法
Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 ORA-12801: 并行查询 ...
- php的strpos不支持数字,php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创...
php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创 这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来! PHP 开源脚本语言 PHP(外文名: Hypertext Prep ...
- oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法
Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 sql;"> ...
- Unity 生成APK 出错的解决方法
Unity 生成APK 出错的解决方法 参考文章: (1)Unity 生成APK 出错的解决方法 (2)https://www.cnblogs.com/laomanong/p/5783599.html ...
- Vs2012使用strcpy出错之解决方法
Vs2012使用strcpy出错之解决方法 参考文章: (1)Vs2012使用strcpy出错之解决方法 (2)https://www.cnblogs.com/Robert_Hu/p/3208141. ...
最新文章
- easyui-treegrid移除树节点出错
- 一加6升级android p,一加6手机升级安卓P攻略 教你怎么更新安卓P Beta版
- OpenCV探索之路(三):滤波操作
- 怎么加载csv_python爬虫入门实战(四)!爬取动态加载的页面
- ORACLE多条件的统计查询(case when)
- 中除了某个数以外的_除了奇异博士以外漫威中九位超强法师,第四位活了一万七千年...
- vue 指令 v-bind
- 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
- Android 学习心得(2)——Android内置数据库SQLite
- pbl和sbl_PBL与SBL联合教学模式在妇产科教学中的应用研究
- iOS的view翻转动画实现--代码老,供参考
- tyvj P4879骰子游戏-美国70分
- 高品质深圳市地图shp数据arcgis软件道路地名县区边界水系地铁站点2021年
- python 合并两个txt文件
- 《惢客创业日记》2020.08.01(周六)七月份的工作总结
- 风声日期时间选择器的一些小小的使用心得
- 10个比较有用的jQuery插件
- 南锣鼓巷大变样,最新逛吃全攻略收好!
- PDF格式怎么修改内容,怎么给PDF加页码
- AAAI2020论文列表(中英对照)
热门文章
- vue学习,制作扫雷游戏
- 前端开发IDE之webstorm简单介绍
- 用proxyee-down快速下载百度网盘大文件
- nodejs+vue+elementui生鲜食品o2o商城系统express
- centos8 yum太慢_如何提高Linux安装软件的速度?给CentOS8配置DNF/YUM国内下载源
- 90后的结婚率不到10%?用Python采集了几千条相亲文案。让你告别单身。
- python:实现meme生成器(附完整源码)
- Android开发之仿微信底部导航切换(Compose版本)附加源码下载
- FPGA-自动售货机verilog
- 大航海时代5服务器维护,《大航海时代5》停运公告