27,370
社区成员
发帖
与我相关
我的任务
分享
void FLRandomFlashing()
{
FLRandomFlashingParm_t __xdata p;
FLRandomFlashingParm_t __xdata* __xdata parm=&p;
PWM_Config(convertPin(parm->Pin));
PWM_Set(convertPin(parm->Pin),parm->StartPWM);
srand(TL0);
u32 durationCounter=0;
u16 PWM=parm->StartPWM;
u16 PWMRange=(parm->PWMUpperLimit)-(parm->PWMLowerLimit)+1;
u32 randomFlashingFragmentDuration;
u16 randomPWM;
u32 changeTimes;
int16_t increment;
while(durationCounter< (parm->TotalDuration))
{
randomFlashingFragmentDuration=((u32)rand())% (parm->FlashingFragmentDurationUpperLimit+1);
durationCounter+=randomFlashingFragmentDuration;
if(durationCounter>=(parm->TotalDuration))
{
randomFlashingFragmentDuration-= durationCounter-(parm->TotalDuration);
randomPWM=parm->EndPWM;
}
else
{
randomPWM=(rand()%PWMRange)+(parm->PWMLowerLimit);
}
changeTimes== ceilf(randomFlashingFragmentDuration /10);
increment =(int16_t)ceilf((int16_t)(randomPWM-PWM))/(int16_t)changeTimes;
while(1)//可以编译通过?!
//for(u32 i=0; i<changeTimes; ++i) 不能编译通过
{
PWM+=increment;
if(PWM>10000)
{
PWM=10000;
}
PWM_Set(convertPin(parm->Pin),PWM);
OSTaskSleep(OSM2T(10));
}
}
}