本帖最后由 求进的心 于 2019-11-5 23:15 编辑
小伙伴们,你们有遇到过互斥锁,锁死的情况吗?具体情况是这样的:
有三个进程:
A进程,优先级为10(优先级最高)
B进程,优先级为9(优先级次之)
C进程,优先级为8(优先级最低)
其中A进程和C进程,会调用串口发送函数f_uart2_send_byte,函数体如下:
f_uart2_send_byte(uint8_t * data, uint16_t length)
{
uint32_t time_out =1000; //1000ms超时
os_mut_wait_(&g_uart2_mux_tx, 0xFFFF);
while(length--)
{
Usart2_SendData( data );
data++; length--;
}
while( ( SET != Usart2_GetFlagStatus(USART_FLAG_TC) ) && time_out )
{
os_dly_wait(1); //sleep 1ms
time_out--
}
os_mut_release(& g_uart2_mux_tx);
}
代码运行一段时间后,会出现如下情况:
进程A,一直处于WAIT_MUT的状态,优先级为10;
进程B,处于正常运行的状态,优先级为9;
进程C,处于正常运行状态,优先级为10
调试发现,进程C调用f_uart2_send_byte函数时,os_mut_release函数的返回值为OS_R_NOK,也即是解锁失败了,从而导致进程A,一直在wait,还没查出release失败的原因,有遇到类似问题的小伙伴吗?求教了!
|