contiki学习笔记01

contiki学习笔记01

contiki操作系统是基于事件驱动的,系统运行可以看作是在不停的处理事件的一个过程。它给我印象最深刻的地方是设计的太巧妙了,不像ucos以及RTX等操作系统在切换任务时需要进行压栈和出栈等操作,它切换“任务”(这里应该叫进程,process)是利用C语言关键字switch来的(这里说的有点片面,不但可以利用switch来,还可以用另外一种方式来实现,不过编译器得支持C99才行)。先来看一下主函数:

int main()
{
    bsp_init();                           /* 外设初始化 */
    clock_init();                         /* 系统时钟初始化 */
    process_init();                       /* 进程初始化 */
    process_start(&etimer_process, NULL); /* 启动系统进程 */
    autostart_start(autostart_processes); /* 启动用户进程 */

    while (1)
    {
        do
        {
        } while (process_run() > 0);
    }
}

上面就是主函数部分,非常简洁明了。下面主要来看一下process_run()这个函数:

int process_run(void)
{
    /* 处理轮询事件,可以理解成最高优先级事件 */
    if (poll_requested)
    {
        do_poll();
    }

    /* 处理队列中的一个事件 */
    do_event();
    /* 返回剩下未处理的事件+轮询的个数 */
    return nevents + poll_requested;
}

poll_requested是轮询标志位,当有一个需要尽快处理的进程时候,就把这个变量置一;然后处理队列中的事件,每次只处理一个事件。

流程图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值