ST MCU Finder
安装免费手机应用,澳门威尼斯小吃登入:
寻找理想的ST MCU

澳门威尼斯小吃登入: [开发工具] rtx 互斥锁 锁死问题

永利游戏开户直营
186|4
楼主
本帖最后由 求进的心 于 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失败的原因,有遇到类似问题的小伙伴吗?求教了!
沙发
| 2019-11-6 08:53 | 只看该作者
while(length--)
     {
          Usart2_SendData( data );
          data++;          length--;
      }
length需要减两次吗
板凳
 楼主 | 2019-11-6 09:23 | 只看该作者
ayb_ice 发表于 2019-11-6 08:53
while(length--)
     {
          Usart2_SendData( data );

嗯嗯,笔误,只有一个,多谢多谢!
地板
 楼主 | 2019-11-6 10:22 | 只看该作者
现在排查发现,出问题的时候,或者os_mut_wait没调用成功,或者执行到os_mut_release函数时,任务ID已经变了
5
| 2019-11-8 09:48 | 只看该作者
昨天才写了一篇在freertos下printf 重入上锁的文章:http://www.kpo.ib733.com/freertos-printf.html
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
uc彩票正规 乐豪发娱乐官网直营网 尊龙娱乐网站 奥门皇冠赌场网上娱乐场 申博太阳城幸运农场走势图
澳门水舞间音乐登入 澳门观光塔自助餐如何登入 澳门购物攻略2013登入 澳门四季坐几路车登入 澳门赌场酒店招聘
澳门银河大厅有什么雕塑登入 豪博 浩博国际官网手机版 网络赌钱平台作弊方法登入 新濠影汇 效果图网上娱乐场
澳门星际娱乐官方 澳门太阳城网投网上娱乐场 pt老虎机首存优惠登入 澳门 赌城登入 百家樂是人操控的吗?登入