硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5214|回复: 2
收起左侧

[ThreadX全家桶] 正确理解ThreadX事件标志组发送和接收函数的参数TX_AND和TX_OR(2022-11-17)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
发表于 2021-6-27 12:03:37 | 显示全部楼层 |阅读模式
ThreadX事件标志组发送和接收函数的TX_AND和TX_OR毫无关系,这点要特别注意。

发送函数tx_event_flags_set

1.png

接收函数tx_event_flags_get

5.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
 楼主| 发表于 2021-6-27 12:04:18 | 显示全部楼层
举例:

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: AppTaskMsgPro
  4. *        功能说明: 消息处理,这里用于接收事件标志。
  5. *        形    参: thread_input 是在创建该任务时传递的形参
  6. *        返 回 值: 无
  7.         优 先 级: 3
  8. *********************************************************************************************************
  9. */
  10. static void AppTaskMsgPro(ULONG thread_input)
  11. {
  12.         ULONG actual_events;
  13.         UINT status;
  14.         
  15.     while(1)
  16.     {
  17.                
  18.                 status = tx_event_flags_get(&EventGroup,     /* 事件标志控制块 */
  19.                                                                         BIT_ALL,         /* 等待标志 */
  20.                                                                         TX_OR_CLEAR ,    /* 等待任意bit满足即可 */
  21.                                                                         &actual_events,  /* 获取实际值 */
  22.                                                                         TX_WAIT_FOREVER);/* 永久等待 */
  23.                
  24.                 if(status == TX_SUCCESS)
  25.                 {
  26.                         switch (actual_events)
  27.                         {
  28.                                 case BIT_ALL:                          
  29.                                         /* 接收到bit1和bit0都被设置的消息 */
  30.                                         printf("接收到bit0和bit1都被设置的消息\r\n");
  31.                                         break;
  32.                                
  33.                                 case BIT_0:                          
  34.                                         /* 接收到bit0被设置的消息 */
  35.                                         printf("接收到bit0被设置的消息\r\n");
  36.                                         break;
  37.                                
  38.                                 case BIT_1:                         
  39.                                         /* 接收到bit1被设置的消息 */
  40.                                         printf("接收到bit1被设置的消息\r\n");
  41.                                         break;
  42.                                
  43.                                 default:      
  44.                                         break;
  45.                         }
  46.                
  47.                 }
  48.         }
  49. }

  50. /*
  51. *********************************************************************************************************
  52. *        函 数 名: AppTaskUserIF
  53. *        功能说明: 按键消息处理
  54. *        形    参: thread_input 创建该任务时传递的形参
  55. *        返 回 值: 无
  56.         优 先 级: 4
  57. *********************************************************************************************************
  58. */
  59. static void AppTaskUserIF(ULONG thread_input)
  60. {
  61.         uint8_t ucKeyCode;        /* 按键代码 */

  62.         (void)thread_input;
  63.                   
  64.         while(1)
  65.         {        
  66.                 ucKeyCode = bsp_GetKey();
  67.                
  68.                 if (ucKeyCode != KEY_NONE)
  69.                 {
  70.                         switch (ucKeyCode)
  71.                         {
  72.                                 case KEY_DOWN_K1:                          /* K1键按打印任务执行情况 */
  73.                                          DispTaskInfo();
  74.                                         break;
  75.                                
  76.                                 case KEY_DOWN_K2:                          /* K2键按下, 发送事件标志,置位bit0 */
  77.                                         tx_event_flags_set(&EventGroup, BIT_0, TX_OR);
  78.                                         break;
  79.                                
  80.                                 case KEY_DOWN_K3:                          /* K2键按下, 发送事件标志,置位bit1 */
  81.                                         tx_event_flags_set(&EventGroup, BIT_1, TX_OR);
  82.                                         break;
  83.                                

  84.                                 default:                     /* 其他的键值不处理 */
  85.                                         break;
  86.                         }
  87.                 }

  88.         tx_thread_sleep(20);
  89.         }
  90. }
复制代码


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
 楼主| 发表于 2022-11-17 10:16:39 | 显示全部楼层
获取临时值,要用这个函数获取

2YCH`$S1F~U4)`@~KDD2GFM.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-7 03:22 , Processed in 0.152861 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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