Browse Source

ringbuffer这里会死循环,右电机错误码赋值前也校验一下

master
Lizongdi 6 days ago
parent
commit
b87ae5d001
  1. 17
      library/ringbuffer/ringbuffer.c
  2. 4
      project/paint_robot_new/paint_robot_new.c

17
library/ringbuffer/ringbuffer.c

@ -395,7 +395,6 @@ int rd_RingbufferGetchar(rd_ringbuf_t *rb, char *ch)
int rd_RingbufferDataLen(rd_ringbuf_t *rb) int rd_RingbufferDataLen(rd_ringbuf_t *rb)
{ {
if (!rb) return RD_INVALUE; if (!rb) return RD_INVALUE;
int iRet = 0;
unsigned short wi = ATOMIC_LOAD(&rb->m_sWriteIndex, unsigned short, ATOMIC_ORDER_ACQUIRE); unsigned short wi = ATOMIC_LOAD(&rb->m_sWriteIndex, unsigned short, ATOMIC_ORDER_ACQUIRE);
unsigned short ri = ATOMIC_LOAD(&rb->m_sReadIndex, unsigned short, ATOMIC_ORDER_RELAXED); unsigned short ri = ATOMIC_LOAD(&rb->m_sReadIndex, unsigned short, ATOMIC_ORDER_RELAXED);
@ -403,23 +402,13 @@ int rd_RingbufferDataLen(rd_ringbuf_t *rb)
unsigned char rb_m = ATOMIC_LOAD(&rb->m_bReadMirror, unsigned char, ATOMIC_ORDER_RELAXED); unsigned char rb_m = ATOMIC_LOAD(&rb->m_bReadMirror, unsigned char, ATOMIC_ORDER_RELAXED);
if (wi == ri) { if (wi == ri) {
iRet = (wb == rb_m) ? 0 : rb->m_iBufsize; return (wb == rb_m) ? 0 : rb->m_iBufsize;
} }
if (wb == rb_m) { if (wb == rb_m) {
iRet = wi - ri; return wi - ri;
} else { } else {
iRet = rb->m_iBufsize - (ri - wi); return rb->m_iBufsize - (ri - wi);
}
if (iRet >= 0)
{
return iRet;
}
else
{
log_e("wb = %d, rb_m = %d, wi = %d, ri = %d", wb, rb_m, wi, ri);
return 0;
} }
} }

4
project/paint_robot_new/paint_robot_new.c

@ -820,7 +820,7 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
g_stIV.Left_Motor_Err = uiFailtCode[1]; g_stIV.Left_Motor_Err = uiFailtCode[1];
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_LEFT_MOTOR, NULL, 0); MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_LEFT_MOTOR, NULL, 0);
} }
else else if (uiFailtCode[0] == 2)
{ {
g_stIV.Right_Motor_Err = uiFailtCode[1]; g_stIV.Right_Motor_Err = uiFailtCode[1];
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_RIGHT_MOTOR, NULL, 0); MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_RIGHT_MOTOR, NULL, 0);
@ -929,11 +929,11 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
log_a("Motor Error ! error code: left [%d] right [%d]", g_stIV.Left_Motor_Err, g_stIV.Right_Motor_Err); log_a("Motor Error ! error code: left [%d] right [%d]", g_stIV.Left_Motor_Err, g_stIV.Right_Motor_Err);
} }
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_POWER_DISABLE, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_STOP_ALL, NULL, 0); MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_STOP_ALL, NULL, 0);
if (g_stMK32.IsOnline == 0) if (g_stMK32.IsOnline == 0)
{ {
g_Is_All_Button_Reset = 0; g_Is_All_Button_Reset = 0;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_POWER_DISABLE, NULL, 0);
} }
break; break;
} }

Loading…
Cancel
Save