我把任务的优先级提到最高了,临界区和互斥锁都试过了,为什么打印指令有时候会分包的?
static void servo_uart_protov4_proc(uint8_t dat)
{
rt_base_t level;
if (mxProtoV4Fifo.left_cnt > 0) {
if(mxProtoV4Fifo.left_cnt == 1)
{
servoUartPv4 = 1;
}
mxProtoV4Fifo.left_cnt--;
mxProtoV4Fifo.buff[mxProtoV4Fifo.add_cnt++] = dat;
if(servoUartPv4 == 1)
{
//level = rt_hw_interrupt_disable();
//rt_mutex_take(dynamic_mutex, RT_WAITING_FOREVER);
for (int8_t i = 0; i < 3+datalong; i++)
{
rt_kprintf("%02X ",mxProtoV4Fifo.buff[i]);
}
rt_kprintf("\n");
// rt_mutex_release(dynamic_mutex);
// rt_hw_interrupt_enable(level);
datalong = 0;
mxProtoV4Fifo.add_cnt = 0;
servoUartPv4 = 0;
}
} else {
if (mxProtoV4Fifo.add_cnt == 0) {
if (dat == 0xFF) {
mxProtoV4Fifo.buff[mxProtoV4Fifo.add_cnt++] = dat;
}else{
return ;
}
} else if (mxProtoV4Fifo.add_cnt == 1) {
if (dat == 0xF5) {
mxProtoV4Fifo.buff[mxProtoV4Fifo.add_cnt++] = dat;
} else {
mxProtoV4Fifo.add_cnt = 0;
}
} else if (mxProtoV4Fifo.add_cnt == 2) {
if (dat == mxp_fal_param_db->sid_pos || dat == 253 || dat == 254) {
mxProtoV4Fifo.buff[mxProtoV4Fifo.add_cnt++] = dat;
} else {
mxProtoV4Fifo.add_cnt = 0;
}
} else if (mxProtoV4Fifo.add_cnt == 3) {
if (dat >= 2 && dat <= 250) {
mxProtoV4Fifo.buff[mxProtoV4Fifo.add_cnt++] = dat;
mxProtoV4Fifo.left_cnt = mxProtoV4Fifo.buff[3];
datalong = mxProtoV4Fifo.left_cnt;
} else {
mxProtoV4Fifo.add_cnt = 0;
}
}
}
}