我正在与Rime合作,更具体地说是与runicast示例合作。一旦收到消息,我将其存储在链表中,然后我将事件发布到负责从链表中提取消息并处理它们的进程。我的代码是这样的:
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?
提前致谢
答案 0 :(得分:1)
是的,这很安全。网络堆栈操作在进程上下文中完成,并且Contiki进程不是抢占式的。所以任何与流程相关的操作都是“安全的”。
process_post
和process_poll
之间的主要区别在于前者会在进程事件缓冲区中放置一个新事件,而后者只会设置一个标志。所以第二种选择稍微有点效率。此外,从理论上讲,事件缓冲区可能已满,事件开始丢失,但非常不太可能成为问题。
我根本不会使用这些函数,而是直接在回调中进行处理以简化执行流程。