wyl123237 2022-06-28 17:17 采纳率: 40%
浏览 56
已结题

宏定义函数,使得代码更简洁

我想实现一个功能,测试20路电机同时前进和后退,测试电机功能。
想开启20个线程,分别控制20个电机。线程回调函数很雷同,只有底层的GPIO 不一样。如果复制20份,显得代码很冗余(代码如下),有没有很简洁的方法定义20个函数?比如宏定义函数。

#define             MOTO1_DRV_EN                        PGout(9)
#define             MOTO1_DRV_DIR                        PGout(13)
#define             MOTO1_DRV_STEP                        PGout(11)

#define          MOTO2_DRV_EN                       PDout(3)
#define             MOTO2_DRV_DIR                      PAout(12)
#define             MOTO2_DRV_STEP                     PAout(11)

//dir 0--前进            1--后退
void  Moto1Ctrl(int iDir,int iSpeed,int iStep)
{
    int i;
    
    MOTO1_DRV_EN=LOW;
    MOTO1_DRV_DIR=iDir;
    
    for(i=0;i<iStep;i++)
    {
        MOTO1_DRV_STEP=HIGH;
        delay_us(1);
        MOTO1_DRV_STEP=LOW;
        delay_us(iSpeed);
    }
    
    MOTO1_DRV_EN=HIGH;
}

//dir 0--前进            1--后退
void  Moto2Ctrl(int iDir,int iSpeed,int iStep)
{
    int i;
    
    MOTO2_DRV_EN=LOW;
    MOTO2_DRV_DIR=iDir;
    
    for(i=0;i<iStep;i++)
    {
        MOTO2_DRV_STEP=HIGH;
        delay_us(1);
        MOTO2_DRV_STEP=LOW;
        delay_us(iSpeed);
    }
    
    MOTO2_DRV_EN=HIGH;
}

void moto1_tst_task(void *pvPara)
{    
    while(1)
    {                   
        Moto1Ctrl(0,MOTO1_SPEED, MOTO1_STEP);
        vTaskDelay(1000);
        Moto1Ctrl(1,MOTO1_SPEED, MOTO1_STEP);
        vTaskDelay(1000);
    }
}

void moto2_tst_task(void *pvPara)
{    
    while(1)
    {                   
        Moto2Ctrl(0,MOTO1_SPEED, MOTO1_STEP);
        vTaskDelay(1000);
        Moto2Ctrl(0,MOTO1_SPEED, MOTO1_STEP);
        vTaskDelay(1000);
    }
}

  • 写回答

5条回答 默认 最新

  • De-Chang Wang 2022-06-28 17:33
    关注
    获得1.10元问题酬金

    函数增加一个参数,表明GPIO号,函数内根据该参数区别代码

    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 创建了问题 6月28日

悬赏问题

  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源