掌上单片机实验室 — 程序阶段性完善(13)

        自构建程序框架开始,逐步根据需求增加了不少代码。在实现需求过程中,重点放在了需求的实现上,并无太在意代码的优化。

        在完成了小车行走功能及PID调速、参数自整定后,代码已经有了一定数量,需要阶段性的完善一下,以便后续的代码可以在一个相对简洁、高效的代码基础上继续构建。

        代码完善主要从以下方面考虑:

  1. 资源占用优化:即RAM、FLASH,目前主要压力还是RAM,减少不必要的消耗。
  2. 代码结构优化:增加程序逻辑性和可读性,减少冗长的代码,从工程上说,就是增加可维护性。

        以下就基于以上两方面对现有程序进行阶段性优化。

1、修改PID_v2 库,替换Double变量

        前面已经提过,Arduino 的 PID库用的都是Double变量,这对于MCU而言有点奢侈,而且按小车的控制精度,无需这么大的数据范围。自整定库在使用时已经根据实际变量的特性,修改了,此处参照PID自整定库的修改方式,将PID_v2库也拷贝到源文件目录,作为程序的一个类定义模块。

        修改后,除了Kp、Ki、Kd系数及几个计算相关的变量为浮点外,多数变量修改为整形数:

        修改后,进行了测试,在PID参数不变的情况下,调速效果无明显变化。

        毕竟MCU的内存有限,运算能力也有限,减少浮点运算一方面减少内存消耗,同时也提高了运算速度,PID调速这类功能使用频率还是很高的。

2、利用条件编译,减少内存占用

        PID参数自整定功能实现所需的代码及占用的内存均不小,而此功能在完成参数整定后一般不再需要,但完全删除又不可取,因为万一对象特性变化或感觉效果不好,需要优化呢?

        利用C语言的条件编译功能即可完美应对,将自整定功能作为编译选项,根据需要开闭,代码即可有很大的变化,这样也增加了程序的可靠性。

        同理,设计的速度及PWM记录功能也是为了配合参数整定而设置的,也可以用条件编译控制其是否需要。因为一个正常运行的程序,一般是不需要这类调试功能的。

3、优化看护任务代码

        原来看护任务的代码有点冗长,对于每个任务而言是相同的操作重复。

        为增加程序可读性,便于后续任务扩展,将程序中原来针对每个任务的看护变量定义为数组,利用循环方式处理,大大减少了代码,增加了可读性、可扩展性:

        这样,后续增加任务时,只需修改变量定义即可,代码部分无需修改。

4、升级Free RTOS库及STM32Duino

        这两个基础库还在不断更新,为避免后续编程遇到麻烦,借此机会,将两个库均更新。

        Free RTOS库更新版本为:10.3.1

   FreeRTOS 升级后, STM32FreeRTOSConfig.h 文件需要用新版本中的 FreeRTOSConfig_Default.h 替换;并根据原来的配置修改相应的配置。

        STM32Duino 升级为2.3.0,这个升级对代码没有什么影响。

        两个库均在Arduino IDE环境下完成升级。

        这样稍加整理、完善后,程序可以更加清晰,同时对自己所编写的逻辑也可以借此梳理一下,为后续增加新功能做好准备。

        学习编程,我以为最重要的是构思,即将需求转化为代码的过程,这个分为以下几个阶段:

  1. 需求梳理阶段,重在真正吃透需求的实质,搞清出到底要做什么?
  2. 程序构思阶段,重点是将需求分解为若干相对小的目标,找到相应的解决方式,以及可能用到的算法和处理手段。这个过程由于急于验证是否能达到目的,会忽略一些细节,用一些相对简单、粗暴的方式处理算法。
  3. 程序完善阶段,此时应该基本完成了需求,实现的预期的目标,这个阶段的重点是完善一些不足,优化算法和数据结构,消除bug,增加程序的可靠性、可读性、可维护性及可扩展性。

        三个阶段交替进行,程序呈螺旋方式递进,缺一不可。不能等到所有功能都实现再去完善,一是工作量太大,二是累积的隐患会影响后续程序的编写。

 ——————————————

文中代码下载:

链接:https://pan.baidu.com/s/13eHZGlcHKxtqOxV0u6rQ7A

提取码:a3ma

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入之梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值