平台環境: 6261a
mtk平台mod和mod之間傳送訊息的流程
使用者使用的引數結構體
/* 訊息體的頭部 */
#define local_para_hdr \
kal_uint8 ref_count; \
kal_uint8 lp_reserved; \
kal_uint16 msg_len;
/* 在local_para_hdr 後面新增你的引數 */
typedef struct local_para_struct
;
申請訊息體空間的介面
/* 這個介面其實是乙個巨集定義 */
(void *)construct_local_para(
local_size, //訊息體長度
td_ctrl //不用配置
);
自定義了訊息體,並且用construct_local_para申請了空間之後就可以封裝為mtk佇列訊息的格式,進行傳送了。
mtk佇列訊息擁有固定的格式:
/* the interlayer message structure, which is exchanged between modules. */
typedef struct ilm_struct ilm_struct;
需要使用專用的介面分配佇列訊息體空間:
ilm_struct *allocate_ilm(module_type module_id);
新增到傳送佇列:
kal_bool msg_send_ext_queue(ilm_struct ilm_ptr);
dest mod需要處理對應的msg;
void module_main(task_entry_struct *task_entry_ptr)
default:
break;}}
free_ilm(&ilm_msg);
}
示例**
typedef struct
test_message_st;
kal_bool test_msg_send(
module_type src_mod,
module_type dest_mod,
sap_type sap_id,
msg_type msg_id,
local_para_struct *local_para_ptr,
peer_buff_struct *peer_buff_ptr
)kal_bool test_send_message_to_mod(kal_uint8 *data_p, kal_uint16 data_len)
請注意test_send_message_to_mod裡面注釋掉的memset, 如果這裡把整個test_message_st空間都寫0,會導致裡面的local_para_hdr空間也會是0, 這就導致dest_mod在處理這個訊息的時候發生重啟 Kafka 傳送訊息流程
客戶端的幾個元件 一條訊息首先需要確定要被儲存到那個 partition 對應的雙端佇列上 其次,儲存訊息的雙端佇列是以批的維度儲存的,即 n 條訊息組成一批,一批訊息最多儲存 n 條,超過後則新建乙個組來儲存新訊息 其次,新來的訊息總是從左側寫入,即越靠左側的訊息產生的時間越晚 最後,只有當一批訊...
簡易App內部訊息通訊
之前文章介紹了用廣播去通知介面更新,這會兒又無法滿足我的要求 廣播進行訊息通訊 廣播的好處 我現在又為什麼不滿足於廣播?我的需求 為此我需要打的地基 大致的結構 show code created by gss on 2018 2 12 0012.public abstract class base...
Redis實現系列 集群內部訊息
集群內部訊息 集群中的各個節點通過傳送和接收訊息 message 來進行通訊,我們稱傳送訊息的節點為傳送者 sender 接收訊息的節點為接收者 receiver 節點傳送的訊息主要有以下五種 一條訊息由訊息頭 header 和訊息正文 data 組成,接下來的內容將首先介紹訊息頭,然後再分別介紹上...