一个关于编译器优化选项问题的解决

这篇具有很好参考价值的文章主要介绍了一个关于编译器优化选项问题的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因为当前项目单片机容量不够使用,打算开启编译器优化,结果在使用KEIL编译器优化后,程序在发送Modbus数据时,程序直接跑飞了

先说结论:

最后发现是局部变量指针作为了DMA的内存地址参数,导致当DMA连续搬运数据时,实际那个局部变量已经被释放,导致DMA搬运数据的过程中出现错误,但是为什么没优化之前没有问题,实在难以理解

确认现象:

   当单片机回复上位机的时候就会跑飞,接收不会有问题。

寻找错误:

一个关于编译器优化选项问题的解决

 文章来源地址https://www.toymoban.com/news/detail-845575.html

一个关于编译器优化选项问题的解决

  •  修改单个文件的编译优化等级,发现只有当bsp_modbus.c文件无优化的时候才是正常
  • 确定是该文件的程序有问题。
  • 通过在线调试发现只有回复异常码时才会卡死:
void MODS_SendAckErr(u8 *pbyBuf,u8 byErrCode)
{
     static u8 byTxbuf[3] = {0};

    byTxbuf[0] = pbyBuf[0];        
    byTxbuf[1] = pbyBuf[1] | 0x80;    
    byTxbuf[2] = byErrCode;        

    MODS_SendWithCRC(byTxbuf, 3);
}

就是  byTxbuf出错,把 byTxbuf换成静态的就好了

 

一个关于编译器优化选项问题的解决

 

 指针传递不会过程中不会有被释放的风险。

 

到了这里,关于一个关于编译器优化选项问题的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++类和对象终章——友元函数 | 友元类 | 内部类 | 匿名对象 | 关于拷贝对象时一些编译器优化

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 、 Linu

    2023年04月15日
    浏览(29)
  • TS编译器选项——指定编译ES版本和模块化使用规范

    compilerOptions是TS的编译器选项,主要在tsconfig.json文件中用于对ts编译为js文件时进行配置 \\\"compilerOptions\\\" : { 配置项 } 版本可以为如下版本:\\\'es3\\\', \\\'es5\\\', \\\'es6\\\', \\\'es2015\\\', \\\'es2016\\\', \\\'es2017\\\', \\\'es2018\\\', \\\'es2019\\\', \\\'es2020\\\', \\\'es2021\\\', \\\'es2022\\\', \\\'esnext\\\'. 版本可以为如下版本:\\\'none\\\', \\\'commonjs\\\', \\\'amd\\\', \\\'system\\\', \\\'u

    2024年02月04日
    浏览(40)
  • Visual Studio编译器编译时出现“请选择有效启动项”问题的解决办法

    使用visual studio打开的是一个文件夹并不是一个项目,找不到启动项是正常的。 我们使用visual studio从现有代码创建项目即可。 上面如果默认创建Windows应用程序项目运行项目时就可能会出现 错误 LNK2019 无法解析的外部符号 _WinMain@16,函数 \\\"int __cdecl invoke_main(void)\\\" (?invoke_main@@

    2024年02月11日
    浏览(88)
  • 解决keil5.38编译stm32报四个错误问题,无需更换ARM5编译器

     以上为错误截图,一下为错误信息 Start/core_cm3.c(445): error: non-ASM statement in naked function is not supported   uint32_t result=0;   ^ Start/core_cm3.c(442): note: attribute is here uint32_t __get_PSP(void) __attribute__( ( naked ) );                                           ^ Start/core_cm3.c(465): error: paramet

    2024年02月11日
    浏览(70)
  • 解决VScode中:C/C++编译器错误导致头文件报错问题

    一、软件安装 VScode安装网址:https://code.visualstudio.com/ 进入网址,直接download即可。 VScode软件很好安装,下载完安装包之后。 双击安装包 选同意 选下一步 接下来将框中全部打√ 之后一路“下一步”即可。先不用启动。 二、C/C++编译器下载安装 编译器mingw-w64下载网址:http

    2024年02月02日
    浏览(43)
  • 编译器的过度优化

    编译器在进行优化的时候,可能为了效率而交换不相关的两条相邻指令的执行顺序。也就是指令重排,这也就引发了一些问题,下面就带大家看两个经典的问题。 第一个例子来自单例模式的双加锁,下面是典型的双加锁的单例模式代码: 上面的代码看起来没问题,并且采用

    2023年04月21日
    浏览(22)
  • Maven项目打包,出现提示 Lombok 版本和 jdk 的编译器不兼容问题,解决办法。

    class lombok.javac.apt.LombokProcessor (in unnamed module @0x7d21852b) cannot access class com.sun.tools.javac.processing.JavacProcessingEnvironment (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.processing to unnamed module @0x7d21852b 这些引用都是关于Java编译器插件Lombok的错误信息。Lombok是一个

    2024年02月05日
    浏览(39)
  • VSCode + GCC编译器(MinGW)开发环境中文字符乱码问题踩坑与解决办法

    问题背景 在较长一段时间里,C/C++开发者所使用的集成开发环境(IDE)要么是比较重量级的 VS(Visual Studio) ,要么是 Codeblocks·、·Visual C++ 6.0 等轻量级IDE,又或者是诸如 notepad++、sublime text 等文本编辑器+ GCC编译器 +命令行工具的组合式开发环境。这几种开发方式要么太过庞

    2023年04月22日
    浏览(56)
  • Java编译器中的优化技术

              Java中的热点代码主要有两类,包括: 1、被多次调用的方法。 2、被多次执行的循环体。 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,它成为 “ 热点代 码 ” 是理所当然的。而后者则是为了解决当一个方法只被调用过一次或少量

    2024年02月15日
    浏览(30)
  • opencv_contrib扩展模块的安装(CMake编译器)及解决文件下载失败的问题(超详细)

    上篇文章介绍了Windows 10 64位系统下 Visual Studio 2015+OpenCV4.1.0下载安装及环境配置, Visual Studio 2015+OpenCV4.1.0 下载安装及环境配置_专注专心的博客-CSDN博客 本篇文章继续介绍,opencv_contrib扩展模块的安装(CMake编译器),并详细说明了“ffmpeg”、 “ippicv”、“data”、“xfeatures2d”等

    2024年02月14日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包