工作经验总结:C语言中重复步骤的程序结构优化

本文探讨了如何优化单片机中重复步骤的程序结构,以应对多路通道操作的挑战。通过引入配置文件和应用文件的分离,使得在新增或减少通道时只需修改配置,而应用代码保持简洁易读。这种优化降低了代码冗余,提高了可维护性和调试效率。
摘要由CSDN通过智能技术生成

一、重复步骤的程序结构优化

1、重复步骤的程序例举

以单片机为例,重复的操作其实涉及很多方面,例如:多路PWM通道的输入捕获、多路PWM通道的输出控制、多路ADC的采集等等。即:当涉及对一个外设的多路通道的操作时,就会 产生重复步骤。

以多路PWM输入捕获为例子,最简单的PWM输入捕获的结构代码如下:

uint8_t pwm_get_period(uint8_t channel)
{
    uint8_t period;

    switch (channel)
    {
    case channel0:
        DoSomething();
        break;
    case channel1:
        DoSomething();
        break;
    ......
    
    default:
        break;
    }

    return period;
}

以上结构很简单容易实现,但是有以下缺点:

  • 当通道数增多的时候,代码会变得冗余,不容易修改
  • 修改完后,调试麻烦,容易在细节上出错

2、重复步骤的程序优化

对于整体的程序结构,最好修改成应用+配置的模式。即:当我们要对程序进行修改的时候,仅需要在配置文件中进行改动,对于应用文件中不需要或者仅做小部分的改动。

还是以前面的PWM输入捕获为例子,优化如下:

(1)配置文件:设计一个结构体将跟PWM输入捕获需要修改的内容,尽量全部囊括在该结构体中,设置宏定义索引

#define PWM_IN_CHANNEL_CNT      2

#define PWM_IN_CHANNEL_0        0
#define PWM_IN_CHANNEL_1        1

typedef struct PwmInChannelCfg
{
    uint8_t channel;
    uint8_t flag;
    uint8_t Port;
    uint8_t Pin;

    uint32_t *statusReg;
    uint32_t *dataReg;
};


const PwmInChannelCfg PwmInChannel[PWM_IN_CHANNEL_CNT] = {
    {PWM_IN_CHANNEL_0, flag1, Port8, Pin1, &(TAUB0.CSR0), &(TAUB0.CDR0)},
    {PWM_IN_CHANNEL_0, flag2, Port8, Pin2, &(TAUB0.CSR0), &(TAUB0.CDR0)},

}

(2)应用文件:使用配置文件中的通道结构体来进行程序的编写

uint8_t pwm_get_period(uint8_t channel)
{
    uint8_t i, period;
    uint8_t flag, port, pin;
    uint32_t *statusReg, *dataReg;

    for(i = 0; i < PWM_IN_CHANNEL_CNT; i++)
    {
        if(channel == PwmInChannel[i].channel)
        {
            flag = PwmInChannel[i].flag;
            port = PwmInChannel[i].port;
            pin = PwmInChannel[i].pin;

            statusReg = PwmInChannel[i].statusReg;
            dataReg = PwmInChannel[i].dataReg;
        }
    }

    ........

    return period;
}

做以上修改后有以下几个优点:

  • 新增或者减少通道时候,仅需要在配置文件中做修改宏定义,和对PwmInChannel中的内容进行修改
  • 应用文件中的代码变得更加简单易读,不会太过冗余,并且不管是新增或者减少通道,应用文件中的代码不需要进行改动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不吃鱼的猫丿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值