• Simulink 自动代码生成电机控制:Keil工程转到CubeIDE相关问题(2/2)


    目录

    程序下载运行掉进死循环 

    解决方法

    Keil和CubeIDE代码效率对比

    总结


    程序下载运行掉进死循环 

    Simulink 自动代码生成电机控制:Keil工程转到CubeIDE_卡洛斯伊的博客-CSDN博客

    话接上回,把Keil的工作转到子CubeIDE且编译成功了,但是程序调试时出现了问题,程序还没有运行,debug直接进入了Infinite_Loop 显示程序停在了WWDG_IRQHandler(). 但是看门狗是没有使能的。而且工作在Keil环境里编译下载运行调试都没有问题。切换到CubeIDE后变化的也就启动的汇编文件。刚刚开始以为是FPU没开,但是切换过来401的芯片默认是开FPU的。各种尝试无果,程序依然Main函数都进不去就死掉了。

    解决方法

    后来灵光一现,突然发现开发板上的主芯片是STM32F401RCT6,而CubeMX 所使用的芯片型号是STM32F401RET6. 为了确定是不是因为这个有两个方法。

    1. 用RET6的芯片试试,但是手上目前没有

    2. 把RET6的启动文件,Link文件都改成RCT6

    (1)替换启动文件和Link文件

      新建一个STM32F401RCT6的Project, 直接把生成的启动文件和Link文件替换,如下图替换好的启动文件和未替换的Link文件。

    (2)修改其他配置选择及文件

    修改MCU型号,如下图灰的不可选

    用记事本或者其他工具打开.cproject文件,找到RET,替换成RCT

     

     改完后重启CubeIDE,如下图所示: 

     

    修改makefile 

     如下图所示

     改完后编译下载调试,一切正常 

    Keil和CubeIDE代码效率对比

    Keil设置优化选项

    分别使用不同版本的编译器编译代码。 

    配置不同的优化等级。

    CubeIDE设置优化选项

    简单测试了下,Keil和CubeIDE对代码的优化还是不同的,这边由于测试工具的受限,只能通过IO翻转的方式来查看中断里程序执行的不同时间来进行对比。结果:所有优化选项电机都能正常运行。在电机能正常运行的情况下,CubeIDE的优化效果比Keil使用版本5的优化效率好但是没有版本6的效率高;O2以上的优化等级差不多,最好的优化效果是Keil使用版本6的编译器。以下仅供参考。

    总结

    如果想要让代码执行效率高,需要考虑不同编译器的版本,优化选项以及对系统是否有影响等。通过测试发现在Keil和CubeIDE两者中Keil编译器版本选择6编译出来的代码效率最好。在实际的开发中,为优化软件的执行效率也会尝试使用各种编译器让程序的速度和空间达到预期的结果。有机会再尝试IAR吧。

  • 相关阅读:
    Go的优雅终止姿势
    计算机视觉与深度学习 | 视觉里程计(Visual Odometry,VO)研究现状
    【csdn】gitcode初体验(开发云、Pages等)(持续更新)
    数字与字符串互转
    牛客练习赛#105(A-D)
    基于Netty模拟大量WebSocket客户端
    【JAVA】Tomcat的安装
    STM32CubeIDE(stm32f767)添加DSP库
    Jetpack:017-Jetpack中的对话框
    操作系统笔记
  • 原文地址:https://blog.csdn.net/weixin_42665184/article/details/127414057