2017-04-12 37 views
2

我正在與Rime合作,更具體地說是與runicast的例子。一旦收到一條消息,我將它存儲在一個鏈表中,然後我將一個事件發佈到一個負責從鏈表中提取消息並處理它們的進程。我的代碼是這樣的:在Rime的回調函數中使用process_post安全嗎? - Contiki

static void recv_runicast(struct runicast_conn *c, 
          const linkaddr_t *from, uint8_t seqno) 
{ 

    /*code to insert the message into the linked list*/ 
    ... 

    /*Post an event to the process which extracts messages from the linked list */ 
    process_post(&extract_msg_from_linked_list, PROCESS_EVENT_CONTINUE, NULL); 
} 

我的問題是:它是安全的回調函數recv_runicast內使用process_post?或者我應該使用process_poll?

在此先感謝

回答

1

是的,它是安全的。網絡堆棧操作是在進程上下文中完成的,而Contiki進程不是搶先式的。所以幾乎所有與流程相關的操作都是「安全」的。

process_postprocess_poll之間的主要區別在於前者會在進程事件緩衝區中放置一個新事件,而後者將簡單地設置一個標誌。所以第二個選擇稍微有效一些。此外,理論上,事件緩衝區可能會變滿,事件開始丟失,但這很可能不會成爲問題。

我根本不使用這些函數,而是直接在回調中執行處理以簡化執行流程。

相關問題