#include #include #include #include #include #include #include "has_task_msg.h" /* -------------------------- gui.c -------------------------- */ int gui_handle_cb(unsigned char module_id, const unsigned char *buf, unsigned int len) { switch (module_id) { case GUI: // 允许自己给自己发消息 printf("GUI 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); break; case SENSOR: printf("GUI 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); break; case ACM: printf("GUI 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); break; case WIFI: printf("GUI 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); break; case VOICE: printf("GUI 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); break; default: break; } } void *gui_function(void *arg) { uint8_t gui_publish_buffer1[5] = {1, 2, 3, 4, 5}; // GUI发布的数据1 uint8_t gui_publish_buffer2[5] = {2, 7, 8, 9, 10}; // GUI发布的数据2 uint8_t gui_publish_buffer3[5] = {3, 12, 13, 14, 15}; // GUI发布的数据3 has_msg_publish(GUI, gui_publish_buffer1, sizeof(gui_publish_buffer1)); // GUI发布消息 has_msg_publish(GUI, gui_publish_buffer2, sizeof(gui_publish_buffer2)); // GUI发布第二条消息 has_msg_publish(GUI, gui_publish_buffer3, sizeof(gui_publish_buffer3)); // GUI发布第三条消息 while (1) { usleep(500 * 1000); has_msg_handle(GUI, gui_handle_cb); // 处理一条GUI收到的消息,先入先出 } } /* -------------------------- sensor.c -------------------------- */ int sensor_handle_cb(unsigned char module_id, const unsigned char *buf, unsigned int len) { printf("SENSOR 正在处理模块 %d 的消息 消息长度:%d 数据[0]:%x\n", module_id, len, buf[0]); } void *sensor_function(void *arg) { const has_module_ID_e moude_ID = SENSOR; uint8_t sensor_publish_buffer1[5] = {1, 4, 3, 2, 1}; // SENSOR发布的数据 uint8_t sensor_publish_buffer2[5] = {2, 9, 8, 7, 6}; // SENSOR发布的数据 has_msg_publish(moude_ID, sensor_publish_buffer1, sizeof(sensor_publish_buffer1)); // SENSOR发布消息 has_msg_publish(moude_ID, sensor_publish_buffer2, sizeof(sensor_publish_buffer2)); // SENSOR发布第二条消息 while (1) { usleep(500 * 1000); has_msg_handle(moude_ID, sensor_handle_cb); // 处理一条SENSOR收到的消息,先入先出 has_msg_handle_latest(moude_ID, sensor_handle_cb); // 处理一条SENSOR最新收到的消息 if (has_msg_is_message_empty(moude_ID) != 0) // 判断是否还有消息未处理 { printf("模块:%d 还有%d条消息待处理\n", moude_ID, has_msg_get_message_number(moude_ID)); } has_msg_handle_by_module(moude_ID, sensor_handle_cb, GUI); // 处理一条SENSOR收到来自GUI的消息,先入先出,不处理其他模块发布的消息 has_msg_delete_all_message(moude_ID); // 删除SENSOR收到但还未处理的所有消息 } } int main(int argc, char const *argv[]) { pthread_t threads1; pthread_t threads2; int result; has_module_ID_e moude_ID; // 每个模块有属于自己的ID号 printf("hello\n"); has_msg_init(); // 消息初始化 /* -------------------------- gui -------------------------- */ result = pthread_create(&threads1, NULL, gui_function, NULL); if (result != 0) { perror("创建线程失败"); return EXIT_FAILURE; } /* ---------------------------------------------------- */ /* -------------------------- sensor -------------------------- */ result = pthread_create(&threads2, NULL, sensor_function, NULL); if (result != 0) { perror("创建线程失败"); return EXIT_FAILURE; } /* ---------------------------------------------------- */ while (1) { sleep(5); } return EXIT_SUCCESS; }