task_msg_bus_sample.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include <board.h>
  2. #include "task_msg_name_user_def.h" //这行放到#include "task_msg_bus.h"前面先定义
  3. #include "task_msg_bus.h"
  4. #define DBG_TAG "task.msg.bus.sample"
  5. #define DBG_LVL DBG_LOG
  6. #include <rtdbg.h>
  7. static void msg_wait_thread_entry(void *params)
  8. {
  9. struct task_msg_args args;
  10. while(1)
  11. {
  12. /*
  13. //测试 task_msg_wait_until
  14. task_msg_wait_until(TASK_MSG_NET_REDAY, RT_WAITING_FOREVER, &args);
  15. LOG_D("task_msg_wait_until => args.msg_name:%d, args.msg_args_json:%s", args.msg_name, args.msg_args_json);
  16. rt_free(args.msg_args_json);
  17. */
  18. //测试 task_msg_wait_any
  19. const enum task_msg_name name_list[4] = {TASK_MSG_OS_REDAY, TASK_MSG_NET_REDAY, TASK_MSG_NET_REDAY3, TASK_MSG_NET_REDAY5};
  20. task_msg_wait_any(name_list, sizeof(name_list)/sizeof(enum task_msg_name), RT_WAITING_FOREVER, &args);
  21. LOG_D("task_msg_wait_any => args.msg_name:%d, args.msg_args_json:%s", args.msg_name, args.msg_args_json);
  22. if(args.msg_args_json)
  23. rt_free(args.msg_args_json);
  24. }
  25. }
  26. static void msg_publish_thread_entry(void *params)
  27. {
  28. static int i = 0;
  29. while (1)
  30. {
  31. if(i % 3 == 0)
  32. {
  33. task_msg_publish(TASK_MSG_OS_REDAY, "{\"os_reday\":true}");
  34. }
  35. else if(i % 3 == 1)
  36. {
  37. task_msg_publish(TASK_MSG_NET_REDAY3, "{\"net_reday\":true,\"ip\":\"10.0.0.20\"}");
  38. }
  39. else
  40. {
  41. task_msg_publish(TASK_MSG_NET_REDAY5, "{\"net_reday5\":true,\"ip\":\"192.168.0.50\"}");
  42. }
  43. rt_thread_mdelay(1000);
  44. i++;
  45. }
  46. }
  47. static void net_reday_callback(task_msg_args_t args)
  48. {
  49. LOG_D("net_reday_callback => args->msg_name:%d, args->msg_args_json:%s", args->msg_name, args->msg_args_json);
  50. }
  51. static void os_reday_callback(task_msg_args_t args)
  52. {
  53. LOG_D("os_reday_callback => args->msg_name:%d, args->msg_args_json:%s", args->msg_name, args->msg_args_json);
  54. }
  55. static int task_msg_bus_sample(void)
  56. {
  57. //初始化消息总线(线程栈大小, 优先级, 时间片)
  58. task_msg_bus_init(1024, 25, 10);
  59. //订阅消息
  60. task_msg_subscribe(TASK_MSG_NET_REDAY5, net_reday_callback);
  61. task_msg_subscribe(TASK_MSG_OS_REDAY, os_reday_callback);
  62. //创建一个等待消息的线程
  63. rt_thread_t t_wait = rt_thread_create("msg_wait", msg_wait_thread_entry, RT_NULL, 512, 20, 10);
  64. rt_thread_startup(t_wait);
  65. //创建一个发布消息的线程
  66. rt_thread_t t_publish = rt_thread_create("msg_pub", msg_publish_thread_entry, RT_NULL, 512, 15, 10);
  67. rt_thread_startup(t_publish);
  68. }
  69. INIT_APP_EXPORT(task_msg_bus_sample);