RIOT物联网操作系统
嵌入式系统中,最好用,生态最好的是Linux
空间小于 1.5kB,支持芯片多。
riot操作系统是一个开源的物联网操作系统。官网提供了一个强大的功能,函数、文件、名称查找功能。
可以通过riot提供的例程去学习是一条很快的学习方法,例程里面包含了数据联网层的无线通信,udp无线通信,rpl,border routers,coap协议等功能。
riot是一个纯C语言编写的操作系统。我没有使用过contiki,但是我觉得riot确实是很好用的操作系统。之后我会慢慢介绍一下riot的一些东西,包括io口的控制,adc测试,uart,数据链路层无线通信,udp通信,rpl。
1. 开发环境
在ubuntu环境中,下载交叉编译环境:
https://launchpad.net/gcc-arm-embedded/+download,下载linux版本的,然后解压后,将路径加入到PATH变量中,即可使用。
然后切换目录:
cd RIOT/examples/hello-world
直接make即可编译,生成了伟大的helloworld应用。
PS:
如果碰到:fatal error:sys/cdefs.h: No such file or directory|
执行如下命令:apt install libc6-dev-i386
2. 文件结构
重要的文件夹,分别是board,core,cpu,dist,doc,drivers,examples,pkg,sys,tests
2.1 core
core文件夹包含了riot的内核文件,包含了riot中的:线程管理,消息管理,关键数据结构,一些格式定义等。包含了riot中main函数线程的创建,和空闲线程的创建。
2.2 board、cpu
board这个文件夹中包含了riot支持的硬件平台,其中包括arm的,ti的等等。这个文件夹的主要作用是把硬件平台编译需要的文件联系起来,这样硬件平台才能够编译。cpu这个文件夹中,包含了每个硬件平台的基础底层驱动文件。Cpu文件夹在前期的编程中会频繁的使用到。例如cc2538
2.3 drivers
这个文件夹就和它的命令一样,提供了一些其他外设的驱动,比如enc28j60,dht11等。同时该文件夹中还包含了硬件平台底层驱动的头文件。
2.4 sys、net
sys中是非常重要的文件夹,包含了riot的系统运用的代码。cpu文件夹中的东西是底层的,而sys中的应用是高层的。
而sys文件夹下的net文件夹,包含了riot网络部分的文件,包括数据链路层的文件,网络层的,传输层的,应用层的。可以找到sixlowpan,udp,rpl,border routers等功能。riot提供了强大的gnrc模块,在无线传输方便使用异常的简便。
2.5 examples
examples文件夹里面提供了经典的例程,只要掌握了这几个例程的功能,riot的大部分功能就学会了。推荐学习顺序:hello-world,default,gnrc_networking,gnrc_border_router,microcoap_server,posix_sockets。
2.6 tests
tests中提供了各个功能的详细测试程序。riot里面包含的功能机会都可以在这里面找到测试的实例。而且这些功能机会支持所有的硬件平台。
2.7 pkg、dist、doc
pkg里面提供了一些外部库驱动,比如libcoap、openwsn等库驱动。
dist提供了一些工具,doc提供了一些文档,这部分自己去官网看看就好,目前我还没有用到这部分的东西。
下图中显示了这几个文件夹的架构层次。图中标着貌似很简单,但是在程序中,需要慢慢的运用,然后再反过来看这幅图就能理解,图中的文件为什么是这样的结构了。
2.8 复位函数
复位之后的第一个函数\RIOT\cpu\cortexm_common\vectors_cortexm.c
在这个路径中找到函数voidreset_handler_default(void),这个函数是复位后的第一个运行的函数,里面可以自己去看看里面具体做了一些什么事。值得注意的是函数kernel_init(),位于路径\RIOT\core\kernel_init.c。
这个函数里面创建了两个线程,空闲线程,main函数线程。
3. Makefile解读
Makefile中, “APPLICATION”含义是工程的名称,可以在这里任意选择自己想定义的名称。"BOARD ?="的意思是选择的硬件平台,可以改成了cc2538dk。
或者编译的时候直接指定参数,例如:makeBOARD=cc2538dk
然后会在bin文件家中,得到cc2538dk文件夹,其中包含一个bin文件,可以通过软件工具烧写到开发板上或者自制的硬件板中。
4. 参考
RIOT操作系统:
http://blog.csdn.net/mx1252111/article/details/52585401
源代码:
https://github.com/RIOT-OS/RIOT
IoT的那些操作系统
https://zhuanlan.zhihu.com/p/23618181
官网网址:
API查找网址是
http://www.riot-os.org/api/index.html
学习例程