中级会员
 
- 积分
- 280
- 金钱
- 280
- 注册时间
- 2015-6-11
- 在线时间
- 56 小时
|
1金钱
//USART3 发送任务
void USART3_send_task(void *p_arg)
{
u8 i=0;
u8 m=0;
OS_ERR err;
p_arg = p_arg;
while(1)
{
/************************************主体部分******************************************************/
if(i<200) i++;
if(USART3_CS) continue;
if(reg_rs||i>125) //未处于发送状态时返回,限时400ms
{
i=0;
if(++m%3)//3次中有1次进入else选项
{
if(reg_sendup3)
{
USART3_send_cj(0x11,0,0);//升档指令
reg_sendup3--;
}
else if(reg_senddown3)
{
USART3_send_cj(0x22,0,0);//降档指令
reg_senddown3--;
}
else
USART3_send_cj(0,0,0);//巡查指令
}
else
USART3_send_cj(0,0,0);//巡查指令
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
OSTimeDlyHMSM(0,0,0,4,OS_OPT_TIME_HMSM_STRICT,&err); //延时4ms
}
}
中间标出的“主体部分”是我原来的程序,放在一个普通的函数里,函数放在一个4ms的扫描任务中,当reg_rs变量不等于0时,或400ms超时后进入if内。每12ms进入一次巡查任务,另外2次,4ms一次进入判断升降档指令是否不等于0(按键按下后升降档指令reg_sendup3=10),发送最多10次命令,当对方回复后会立即清零reg_sendup3,即便对方未收到也最多发送10次。
现在已经把这个函数从原来的扫描任务中单独拿出来,放在一个ucos“任务”中,但是这样好像跟我原来的没什么区别,我尝试使用事件标志来代替reg_sendup3,但达不到我之前能达到的效果,请教一下怎么改好呢?
|
|