OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4625|回复: 2

ucosiii向队列发数据线程的优先级大于收数据的线程优先级,就一直发送不成功

[复制链接]

0

主题

5

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-11-20
在线时间
2 小时
发表于 2019-11-25 21:12:29 | 显示全部楼层 |阅读模式
4金钱
本帖最后由 吕彦朋 于 2019-11-25 21:14 编辑

最近在用ERF32的蓝牙板子搞ucosiii的开发:
两个线程:
高优先级线程向队列发送数据。
低优先级线程接收数据。

发送数据到线程时一直提示err code 17。如果把两个线程的优先级改成一样的就没问题。
求助大家是否有思路。

  1.   OSTaskCreate(&App_Task_test,                         /* Create the Start Task.                               */
  2.                "Thermometer Task",
  3.                App_Task_test_void,
  4.                0,
  5.                APP_CFG_TASK_THERMOMETER_PRIO+2,
  6.                &App_test[0],
  7.                (APP_TEST_SIZE / 10u),
  8.                APP_TEST_SIZE,
  9.                0,
  10.                0,
  11.                0,
  12.                (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  13.                &err);
复制代码
  1.   OSTaskCreate(&App_TaskThermometerTCB,                         /* Create the Start Task.                               */
  2.                "Thermometer Task",
  3.                App_TaskThermometer,
  4.                0,
  5.                APP_CFG_TASK_THERMOMETER_PRIO+3,
  6.                &App_TaskThermometerStk[0],
  7.                (APP_CFG_TASK_THERMOMETER_STK_SIZE / 10u),
  8.                APP_CFG_TASK_THERMOMETER_STK_SIZE,
  9.                0,
  10.                0,
  11.                0,
  12.                (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  13.                &err);
复制代码
下面是创建队列
  1.     CORE_DECLARE_IRQ_STATE;
  2.     CPU_CRITICAL_ENTER();
  3.     RTOS_ERR err;
  4.     OSQCreate(&test_Queue,"test_Queue",50,&err);
  5.     APP_ERROR_CHECK_BOOL(RTOS_ERR_CODE_GET(err) == RTOS_ERR_NONE);
  6.     CPU_CRITICAL_EXIT();
复制代码
下面是发送到队列和接收队列
  1. static uint8_t data_t = 1;
  2. void test_q_t(void)
  3. {
  4. #if 1
  5.     RTOS_ERR err;
  6.     data_t++;
  7.     LOG(LEVEL_DEBUG, "---t = %d", data_t);
  8.     OSQPost((OS_Q*)&test_Queue, (void*)&data_t, (OS_MSG_SIZE)1, (OS_OPT)OS_OPT_POST_FIFO,  (RTOS_ERR*)&err);
  9.     LOG(LEVEL_DEBUG, "---err Code = %d", err.Code);
  10. #endif
  11. }

  12. static char *recv_data = NULL;
  13. void test_q_r(void)
  14. {
  15. #if 1
  16.     RTOS_ERR err;
  17.     OS_MSG_SIZE recv_size = 1;
  18.     recv_data = OSQPend(&test_Queue, 0, OS_OPT_PEND_BLOCKING,&recv_size,NULL,&err);
  19.     LOG(LEVEL_DEBUG, "---r = %d", *recv_data);
  20. #endif
  21. }
复制代码



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-11-20
在线时间
2 小时
 楼主| 发表于 2019-11-26 20:19:59 | 显示全部楼层
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2019-11-28 02:04:04 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 22:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表