继续上一篇文章已经过去很久了。工作原因也正式开始接触contiki。上次已经简单将cooja跑起来,这次来看一下基本的demo吧。
contiki里面已经有一些适配的硬件平台,手上没有相关硬件,最简单的就是编译本地native版本了。当执行make没有指定target参数,便执行相当于执行make target=native
额,好像还没有说在哪个目录。直接上图:
hello-world-example.csc :上一篇文章提到过的cooja仿真文件;Makefile:这是工程Makefile,后续说明hello-world.c : 程序代码主文件执行make:
执行生成文件:
Make文件内容很简单:
大概意思就是定义了编译hello-world这个目标文件,然后将顶层的Makefile.include包含进来。如果想详细分析make过程,可执行make -n 观察编译执行的命令情况。
最后就是hello-world.c
咋一看,就这几行代码,便实现了contiki的基本框架!还是稍微解释一下好了:contiki是事件驱动的系统,它并非像linux那样有完整的内核,所以你可以直接把contiki看成一个裸机,只不过在一直跑while循环罢了。但是麻雀虽小,五脏俱全。contiki也集成了文件系统coffe, 轻量级协议栈uIP, 以及...反正就几乎有实现三层以上的很多协议,在app目录有源码;
解释下源码,首先是PROCESS(hello_world_process, "Hello world process");
展开一下结果,就是
PROCESS(hello_world_process, "Hello world process");
PROCESS_THREAD(name, ev, data);
struct process hello_world_process = { NULL, process_thread_hello_world_process };
什么?!展开之后好像就定义声明了一个结构体struct process?是的,你没看错,增加一个子例程就是定义一个struct process结构体就好了!那PROCESS_THREAD是啥?让我们也占到定义展开来看看。
继续深挖PT_THREAD;
./core/sys/pt.h:99:#define PT_THREAD(name_args) char name_args
这么说PT_THREAD就是个函数指针嘛! PROCESS_THREAD也就是最后就变成了一个...函数声明。
然后接着深挖struct process有什么东西,
这下应该明朗了,就是声明了一个struct proces结构体,然后实现里面的thread函数,完成初始化。
只不过,这一些都在PROCESS和PROCESS_THREAD宏定义完成了,这些对于有C语言基础的同学都不难...
最后我们再来看PROCESS_THREAD(hello_world_process, ev, data):
参数ev和data后面会讲到。我们先来看里面的函数体内容:
结构体里面是PROCESS_BEGIN()开头,退出由PROCESS_END()结尾,这是固定格式。先记住就好了。
以上,就实现了一个PROCESS处理,或者可以理解为相当于linux的一个进程吧。不过差别还是挺大的。
这一篇就先这样吧。
极速赛车稳赚4码定义一个struct process结构体就好了!那PROCESS_THREAD是啥?让我们也占到定义展开来看看。继续深挖PT_THREAD;
./core/sys/pt.h:99:#define PT_THREAD(name_args) char name_args
这么说PT_THREAD就是个函数指针嘛! PROCESS_THREAD也就是最后就变成了一个...函数声明。
然后接着深挖struct process有什么东西,
这下应该明朗了,就是声明了一个struct proces结构体,然后实现里面的thread函数,完成初始化。
只不过,这一些都在PROCESS和PROCESS_THREAD宏定义完成了,这些对于有C语言基础的同学都不难...
最后我们再来看PROCESS_THREAD(hello_world_process, ev, data):
参数ev和data后面会讲到。我们先来看里面的函数体内容:
结构体里面是PROCESS_BEGIN()开头,退出由PROCESS_END()结尾,这是固定格式。先记住就好了。
以上,就实现了一个PROCESS处理,或者可以理解为相当于linux的一个进程吧。不过差别还是挺大的。
这一篇就先这样吧。