你了解STM32吗?对IAR优化选项你知道多少

STM32 IAR 优化选项介绍

大家好,我是单片机一哥,这篇文章给大家介绍一下STM32 IAR优化选项的设置

IAR优化选项包括:无优化、低等级优化、中等优化、高等优化。

8ce2b8c57b34b7140e33fd3a00979eee.png

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得回复一哥///

d1a1c4a6c8c363a2642ccc0f1dad3a4f.png

公共子表达式压缩

公共子表达式压缩是较为常见的优化方式,这种方式既能够较少代码的大小,也能够缩短运行的时长,编译器可能会依据代码高低文产生愈加复杂的优化结果,假如对数组或矩阵进行访问时,须要的数组索引计算,有的时候代码中可能会使用大量的宏,虽然在代码中比较简洁,但也可能在代码中产生很多反复计算,编译器使用这种优化也会有很好的结果。

在公共子表达式压缩优化中,不仅会使用寄存器,也有可能会使用在内存中的临时变量,但是由于局部代码的执行被优化,所以优化后的代码可能会比较难进行调试。

7266599bbbac63661d1ce186d931d191.png

循环展开

循环展开是在编译时已确定须要循环的次数,将循环体展开,来降低每次循环循环体外的运算开销。

这种优化适用于小循环,由于小循环的循环体外运行开销比重比较大,降低循环次数会明显提高整体的执行效率。显然,这种循环的展开会增加代码的大小,但是编译器会屡次进行试探性编译,然后计算编译后辈码的执行速度和大小,并依据用户的选择来决定如何进行优化。同样,优化后的代码与原来的代码有很大的不同,也会造成调试上的艰难。

e74a38a1d3c5396b4ffdbdaf77acba61.png

函数内联

函数内联能够减少函数调用时产生的运行开销,缩短执行时长,但可能会增加代码的大小,一般情况下,选择代码量优先时使用该优化不会增加代码的大小。

是否进行函数内联优化取决于编译器进行的试探性编译。

同样,优化后的代码可能比较难进行调试。

2727dc4b23e6ad144811f6ce934e218a.png

循环不变量外提

在许多循环中,通常有一些表达式或运算的结果在循环中是不会改变的,那么这部分内容可以将其转移到循环外部,就可以节省许多循环的工作量。

这种优化通常既可以节省代码空间,也可以提高运行的效率,但同样会导致优化后的代码比较难进行调试。

a3ecec29a89be51d20077f9590412cb9.png

基于类型的别名分析

当两个或者多个的指针访问同一个地址时,其中任意一个变量或者指针就称为其他变量或者指针的别名变量。

假如程序中存在别名变量,会使程序优化变得非常艰难,由于在编译时不可能知道一个指定地址上的数据是否被变更了。

基于别名分析的优化,假设所有访问都是基于被访问对象所声明的类型,这样能够由编译器来判断是否有多个指针访问了同一块存储区。

对于规范C或者C++程序,这种优化能够减少代码的大小,降低执行时长。

对于非规范的C或者C++程序,可能会导致生成错误的代码。

静态变量重组

一般的情况下,全局和静态变量的位置是根据编译器编译的先后次序进行分配。使用静态变量重组优化后,同一模块中的静态和全局变量会被重新组织,尽量靠近在一起,这样编译器就能够使用同一个机制来访问多个变量。

ce68c3444592e751876bdb42910d7d31.png

指令规划

合理的汇编指令规划能够有效发挥处理器的处理能力,能够将资源访问冲突导致的流水线等待降到最低。

8cb8523987c38b25f482f60c5aeb334e.png

其他代码优化

a4bfe8c61ef884f2b4de5f9fb818f058.png

优化选项调整的次序:从低到高级,从部分到全局。

·在程序设计中,假如对个别等级的函数须要进行精确的优化调整,能够使用预处理命令,单独定制函数的优化选项。

·有些时候在进行读写共享变量、读写外设寄存器端口或者运行存在副作用的其他操作时,不希望编译器进行调整运算或赋值次序、删除认为没有作用的代码、将变量分配在通用寄存器里等等这些优化操作,那么能够使用volatile对所要操作的对象进行说明。

一般可以在以下情况使用volatile

·对象的值会在编译器不知道的情况下发生改变,例如外设寄存器的值发生改变;

·程序进行的操作具有副作用,例如连续读或写某外设寄存器两次,硬件上具有特定的意义;

·有多个程序共享被操作的对象,例如操作系统中的多个任务,主程序和中断服务程序。

使用volatile后,被声明的变量不会被分配在通用寄存器中,程序对这些变量的访问次序也不会被编译器改变,对变量的访问不会被删除。

想要学习单片机的朋友 ,做毕业设计的同学,关注我们,回复一哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在进行STM32F429芯片的FreeRTOS移植到IAR开发环境时,首先需要将FreeRTOS源代码添加到工程中。这可以通过将源代码复制到项目目录下,在IAR中添加工程文件来实现。在IAR软件中,选择“Project”菜单,然后选择“Add Files”选项,将FreeRTOS源代码添加进来。 然后,需要在IAR中进行一些配置以适配STM32F429芯片和FreeRTOS。首先,在IAR中打开STM32F429芯片的启动文件,修改适配FreeRTOS所需的堆栈大小和任务优先级等参数。 接下来,在FreeRTOSConfig.h文件中定义与STM32F429芯片相关的硬件和中断配置,包括时钟配置、任务堆栈大小、中断优先级等,并根据实际应用需求进行配置。 然后,在IAR中设置编译器选项,确保正确的编译FreeRTOS相关源文件。这包括设置编译器的优化等级,并确保所有的FreeRTOS文件都被编译。 完成以上配置后,就可以编译代码并下载到STM32F429芯片上运行。在运行之前,可以根据实际需要配置任务、信号量、队列等FreeRTOS的相关组件。 最后,在IAR中使用调试工具可以对移植后的FreeRTOS进行调试,查看任务执行情况、调度器工作情况、中断处理等。 综上所述,移植STM32F429芯片的FreeRTOS到IAR开发环境中需要进行一系列的配置和调试工作,以确保FreeRTOS能够在该开发环境中正常运行。这样能够充分利用STM32F429芯片的资源和功能,并实现多任务、实时调度等特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机一哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值