发现问题

项目开发过程中,中断中要计算几个浮点数,仿真时发现浮点数经常性计算错误:计算结果不可能是负值,但却会计算出负值,而且与真实结果完全没有关联性.当时单片机使用的是STM32F429ZGT6,主频设置为192MHz,运行RTOS,开了十个定时器中断.以及几个外部中断

可能的原因

  1. 因为执行的函数是在中断中,而且这个函数还挺长,两三百行,所以想到是有可能进中断次数太多,导致栈溢出.将栈调大至0x1000即4K,还是不行,遂排查栈的问题.
  2. 设置的主频过高,导致单片机稳定性降低,因F429推荐主频是180M,我设置的是192M.将主频设置为180M后再次仿真仍然会出现这个问题,所以也不是超频的原因
  3. 片子有问题,虽说概率极低,但仍有可能.但是更换了好几块板子,仍然有问题,排除此原因.
  4. 芯片FPU配置有问题.但将FPU关掉后仍然会出现这个问题,遂排除

发现端倪

因为我设置一个数组,十个定时器中断每次运行此函数时都会将数组中对应的元素加一,然后在执行完成后减一,所以数组中的元素值同一时间只有可能有一个为1,但是仿真的时候却发现有的元素是非零值,甚至有的元素大于1,发现临界段中的代码也会被中断中止,原以为进入临界段会关闭总中断,但查看代码后发现,并没有关闭总中断操作,所以,问题应该是计算浮点数过程中,触发中断,然后可能是浮点数未能正常入栈,导致返回来继续执行时从栈中取出来的浮点数时乱码,从而导致偶发性计算错误.

解决方法

在需要计算浮点数的语句前面关闭总中断,计算完成后再开启总中断.这里使用keil独有的操作总中断函数__enable_irq()__disable_irq().加上这两句后,问题没有再出现过.

stm32F4单片机计算浮点数的时候偶发性出错的解决方法相关推荐

  1. php 浮点数比较 出错,PHP计算浮点数出错的解决方法

    PHP计算浮点数出错的解决方法 发布时间:2020-06-26 14:37:49 来源:亿速云 阅读:111 作者:Leah 这篇文章将为大家详细讲解有关PHP计算浮点数出错的解决方法,文章内容质量较 ...

  2. php浮点数计算比较及取整不准确解决方法

    原文:php浮点数计算比较及取整不准确解决方法 php有意思的现象,应该是很多编程语言都会有这样的现象.这个是因为计算机的本身对浮点数识别的问题..... [php] view plaincopy $ ...

  3. ”dpkg: 处理归档 /var/cache/apt/archives/XXXXXX(--unpack)时出错“的解决方法

    "dpkg: 处理归档 /var/cache/apt/archives/XXXXXX(--unpack)时出错"的解决方法 参考文章: (1)"dpkg: 处理归档 /v ...

  4. Python3中使用map()结果出错的解决方法

    Python3中使用map()结果出错的解决方法 2016年10月19日 16:18:34 阅读数:2783 在Python2中使用map()会返回一个列表,效果如下: >>> a= ...

  5. oracle 查看并行数据库,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 ORA-12801: 并行查询 ...

  6. php的strpos不支持数字,php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创...

    php使用strpos判断字符串中数字类型子字符串出错的解决方法 原创 这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来! PHP 开源脚本语言 PHP(外文名: Hypertext Prep ...

  7. oracle并行查询结果不唯一,Oracle数据库并行查询出错的解决方法

    Oracle的并行查询是使用多个操作系统级别的Server Process来同时完成一个SQL查询,本文讲解Oracle数据库并行查询出错的解决方法如下: 1.错误描述 sql;"> ...

  8. Unity 生成APK 出错的解决方法

    Unity 生成APK 出错的解决方法 参考文章: (1)Unity 生成APK 出错的解决方法 (2)https://www.cnblogs.com/laomanong/p/5783599.html ...

  9. Vs2012使用strcpy出错之解决方法

    Vs2012使用strcpy出错之解决方法 参考文章: (1)Vs2012使用strcpy出错之解决方法 (2)https://www.cnblogs.com/Robert_Hu/p/3208141. ...

最新文章

  1. easyui-treegrid移除树节点出错
  2. 一加6升级android p,一加6手机升级安卓P攻略 教你怎么更新安卓P Beta版
  3. OpenCV探索之路(三):滤波操作
  4. 怎么加载csv_python爬虫入门实战(四)!爬取动态加载的页面
  5. ORACLE多条件的统计查询(case when)
  6. 中除了某个数以外的_除了奇异博士以外漫威中九位超强法师,第四位活了一万七千年...
  7. vue 指令 v-bind
  8. 如果一栋楼起火谁赔偿_太原一辆快递车起火!赶紧看看有你的包裹没?
  9. Android 学习心得(2)——Android内置数据库SQLite
  10. pbl和sbl_PBL与SBL联合教学模式在妇产科教学中的应用研究
  11. iOS的view翻转动画实现--代码老,供参考
  12. tyvj P4879骰子游戏-美国70分
  13. 高品质深圳市地图shp数据arcgis软件道路地名县区边界水系地铁站点2021年
  14. python 合并两个txt文件
  15. 《惢客创业日记》2020.08.01(周六)七月份的工作总结
  16. 风声日期时间选择器的一些小小的使用心得
  17. 10个比较有用的jQuery插件
  18. 南锣鼓巷大变样,最新逛吃全攻略收好!
  19. PDF格式怎么修改内容,怎么给PDF加页码
  20. AAAI2020论文列表(中英对照)

热门文章

  1. vue学习,制作扫雷游戏
  2. 前端开发IDE之webstorm简单介绍
  3. 用proxyee-down快速下载百度网盘大文件
  4. nodejs+vue+elementui生鲜食品o2o商城系统express
  5. centos8 yum太慢_如何提高Linux安装软件的速度?给CentOS8配置DNF/YUM国内下载源
  6. 90后的结婚率不到10%?用Python采集了几千条相亲文案。让你告别单身。
  7. python:实现meme生成器(附完整源码)
  8. Android开发之仿微信底部导航切换(Compose版本)附加源码下载
  9. FPGA-自动售货机verilog
  10. 大航海时代5服务器维护,《大航海时代5》停运公告