zoukankan      html  css  js  c++  java
  • thread msg

    提取的nordic rf51xx/rf52xx sdk中的线程间消息通信机制,非常简洁

    demo.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "app_scheduler.h"
    
    #define SCHED_MAX_EVENT_DATA_SIZE          20      /**< Maximum size of scheduler events. */
    #define SCHED_QUEUE_SIZE                 200  /**< Maximum size of scheduler queue. */
    #define scheduler_init() APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE)
    
    typedef enum {
        THREAD_INIT,
        DEMO_TEST,
        //add your msg
    }msg_id_t;
    
    typedef struct {
      uint8_t id;
      uint8_t len;
      uint8_t *data;
    }thread_msg_t;
    
    static void msg_send_to_back(void *handler, void *msg, bool use_scher){
      if(handler==0)return;
      if(use_scher)
         app_sched_event_put(msg,sizeof(thread_msg_t),(app_sched_event_handler_t)handler);
      else
        ((app_sched_event_handler_t)handler)(msg,sizeof(thread_msg_t));
    }
    
    static void demo2_thread(void *para, uint16_t para_size)
    {
        printf("demo2_thread!
    ");
        thread_msg_t msg=*((thread_msg_t *)para);
        {
            switch(msg.id){
                case DEMO_TEST:{
                    printf("%d,%d,%s 
    ",msg.id, msg.len, msg.data);
                }
                break;
            }
        }
    }
    
    static void demo1_thread(void *para, uint16_t para_size)
    {
        printf("demo1_thread!
    ");
        const *data = "hello,world !";
        thread_msg_t msg={DEMO_TEST,sizeof(thread_msg_t),data};
        msg_send_to_back((void *)demo2_thread,&msg,true);
    }
    
    int main()
    {
        scheduler_init();
    
        thread_msg_t msg={THREAD_INIT,0,0};
        msg_send_to_back((void *)demo1_thread,&msg,true);
    
        printf("ready go!
    ");
        for(;;){
          app_sched_execute();
        }
        return 0;
    }

    demo2.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "app_scheduler.h"
    
    #define SCHED_MAX_EVENT_DATA_SIZE          20      /**< Maximum size of scheduler events. */
    #define SCHED_QUEUE_SIZE                 200  /**< Maximum size of scheduler queue. */
    #define scheduler_init() APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, SCHED_QUEUE_SIZE)
    
    typedef enum {
        THREAD_INIT,
        DEMO_TEST,
        //add your msg
    }msg_id_t;
    
    typedef struct {
      uint8_t id;
      uint8_t len;
      uint8_t *data;
    }thread_msg_t;
    
    void *demo1_thread_queue=0;
    void *demo2_thread_queue=0;
    
    static void msg_send_to_back(void *handler, void *msg, bool use_scher){
      if(handler==0)return;
      if(use_scher)
         app_sched_event_put(msg,sizeof(thread_msg_t),(app_sched_event_handler_t)handler);
      else
        ((app_sched_event_handler_t)handler)(msg,sizeof(thread_msg_t));
    }
    
    void demo2_thread(void *para, uint16_t para_size)
    {
        printf("demo2_thread!
    ");
        thread_msg_t msg=*((thread_msg_t *)para);
        {
            switch(msg.id){
                case DEMO_TEST:{
                    printf("%d,%d,%s 
    ",msg.id, msg.len, msg.data);
                }
                break;
            }
        }
    }
    
    void demo1_thread(void *para, uint16_t para_size)
    {
        printf("demo1_thread!
    ");
        const *data = "hello,world !";
        thread_msg_t msg={DEMO_TEST,sizeof(thread_msg_t),data};
        msg_send_to_back(demo2_thread_queue,&msg,true);
    }
    
    int main()
    {
        scheduler_init();
    
        demo1_thread_queue=(void *)demo1_thread;
        demo2_thread_queue=(void *)demo2_thread;
    
        thread_msg_t msg={THREAD_INIT,0,0};
        msg_send_to_back((void *)demo1_thread_queue,&msg,true);
    
        printf("ready go!
    ");
        for(;;){
          app_sched_execute();
        }
        return 0;
    }

    https://github.com/zhoudd1/scheduler

  • 相关阅读:
    怎么判断一个bug到底是前端的bug还是后端的bug
    charles抓包原理
    java基础|Properties文件解析
    java基础|break、continue和return
    Java使用JSONPath解析JSON完整内容详解
    10/23/2019
    有什么好怕的
    [转]一个急刹车,过路老人吓得病发身亡 司机要担责吗?
    [转]7岁女孩练舞下腰致残,舞蹈培训机构被判赔115万
    Salesforce权限管理
  • 原文地址:https://www.cnblogs.com/dong1/p/9825036.html
Copyright © 2011-2022 走看看