queue处理片段
scp-firmware/framework/src/fwk_thread.c
noreturn void __fwk_thread_run(void)
{
for (;;) {
while (!fwk_list_is_empty(&ctx.event_queue))
process_next_event();
process_isr();
fwk_log_unbuffer();
}
}
scp-firmware在完成了所有的初始化操作后,执行的就是这个循环,然后永不退出。初看这可能不是很理解,这里面有三个重要的链表: free_event_queue, event_queue, isr_event_queue 所有的操作都是围绕这三个队列展开。
这三个队列在这里进行初始化,传入的event_count为64个。
int __fwk_thread_init(size_t event_count)
{
struct fwk_event *event_table, *event;
event_table = fwk_mm_calloc(event_count, sizeof(struct fwk_event));
/* All the event structures are free to be used. */
fwk_list_init(&ctx.free_event_queue);
fwk_list_init(&ctx.event_queue);
fwk_list_init(&ctx.isr_event_queue);
for (event = event_table; event < (event_table + event_count); event++)