博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thread msg
阅读量:5328 次
发布时间:2019-06-14

本文共 3229 字,大约阅读时间需要 10 分钟。

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

demo.c

#include 
#include
#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!\n"); thread_msg_t msg=*((thread_msg_t *)para); { switch(msg.id){ case DEMO_TEST:{ printf("%d,%d,%s \n",msg.id, msg.len, msg.data); } break; } }}static void demo1_thread(void *para, uint16_t para_size){ printf("demo1_thread!\n"); 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!\n"); for(;;){ app_sched_execute(); } return 0;}

 

demo2.c

#include 
#include
#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!\n"); thread_msg_t msg=*((thread_msg_t *)para); { switch(msg.id){ case DEMO_TEST:{ printf("%d,%d,%s \n",msg.id, msg.len, msg.data); } break; } }}void demo1_thread(void *para, uint16_t para_size){ printf("demo1_thread!\n"); 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!\n"); for(;;){ app_sched_execute(); } return 0;}

转载于:https://www.cnblogs.com/dong1/p/9825036.html

你可能感兴趣的文章
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
深入理解基于selenium的二次开发
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>