我想实现一个功能,测试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);
}
}