3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍

RIOT操作系统的文件结构

        上一篇帖子中介绍了riot的下载和环境配置。这次介绍一下riot的系统文件架构。下面图中是下载完之后的riot操作系统的文件。这些文件夹的详细介绍在官网中有介绍。大家可以访问网站:http://www.riot-os.org/api/index.html。里面有几个重要的文件夹,分别是board,core,cpu,dist,doc,drivers,examples,pkg,sys,tests。这些文件夹中包含了我们需要的所有信息。下面我就简单的介绍一下我的理解。

3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第1张图片

    1、core

        core这个文件夹包含了riot的内核文件,这个文件夹里面包含了riot中的东西有:线程管理,消息管理,关键数据结构,一些格式定义等。其中最关键的是,这个文件夹中包含了riot中main函数线程的创建,和空闲线程的创建。

    2、board、cpu

        board这个文件夹中包含了riot支持的硬件平台,其中包括arm的,ti的等等。这个文件夹的主要作用是把硬件平台编译需要的文件联系起来,这样硬件平台才能够编译。cpu这个文件夹中,包含了每个硬件平台的基础底层驱动文件。cpu这个文件夹非常重要,前期的编程会频繁的使用到这个文件夹内的文件。

    3、drivers

        这个文件夹就和它的命令一样,提供了一些其他外设的驱动,比如enc28j60,dht11等。同时该文件夹中还包含了硬件平台底层驱动的头文件,这个非常重要。我会在下面的cc2538中介绍。

    4、sys、net

        sys中是一个非常重要的文件夹,里面包含了riot的精华部分,是riot的系统运用。到了后期,我们就很少去直接使用cpu文件夹了,因为cpu文件夹中的东西是底层的,而sys中的应用是高层的。使用高层的时候,就几乎可以脱离底层的东西了,直接调用一些函数就可以间接的去使用底层文件了。

        而sys文件夹下的net文件夹更是重中之重,这里面包含了riot网络部分的文件。其中包括数据链路层的文件,网络层的,传输层的,应用层的。因此,我们可以找到sixlowpan,udp,rpl,border routers等功能。riot提供了强大的gnrc模块,在无线传输方便使用异常的简便。。这个后面的帖子会介绍一下。

    5、examples

        examples文件夹里面提供了几个经典的例程,这几个例程非常非常的重要,可以说只要掌握了这几个例程的功能,riot的大部分功能就学会了。只要明白了shell命令去调试之后就可以很简单的去解析这些程序了。推荐学习的顺序是:hello-world,default,gnrc_networking,gnrc_border_router,microcoap_server,posix_sockets。

    6、tests

        tests中提供了各个功能的详细测试程序。riot里面包含的功能机会都可以在这里面找到测试的实例。而且这些功能机会支持所有的硬件平台。只要按照自己选择的硬件平台去编译就能根据测试结果去辅助学习了。。

        因此,比如spi或者定时器什么的不会,就可以在这里面学习了,然后仿照编程就好。

        好好运用这个文件夹是自己编程的必须之路。

    7、pkg、dist、doc

        pkg里面提供了一些外部库驱动,比如libcoap、openwsn等库驱动。

        dist提供了一些工具,doc提供了一些文档,这部分自己去官网看看就好,目前我还没有用到这部分的东西。


        下图中显示了这几个文件夹的架构层次。图中标着貌似很简单,但是在程序中,需要慢慢的运用,然后再反过来看这幅图就能理解,图中的文件为什么是这样的结构了。

   3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第2张图片


CC2538在RIOT中的相关基础介绍

        1、cc2538cpu中的基础底层驱动文件

        下图中,cc2538中包含了几个文件夹。

 3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第3张图片

        

        1、periph里面包含了gpio,spi,timer,uart等。

3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第4张图片


        2、radio中包含了cc2538射频模块的一些信息,cc2538的无线模块代码都在这里了,经过测试这些代码都是完整的。

3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第5张图片


        3、include中包含了上面几个文件中的头文件,同时cc2538.h这个头文件包含了cc2538的硬件寄存器的地址信息。

3、RIOT操作系统的文件结构和CC2538在RIOT中的相关基础介绍_第6张图片

        另一个头文件的地方在:\RIOT\drivers\include\periph这个文件夹中。一定要打开进去看看这些文件。。。。


        4、ldscripts文件夹中提供了不同版本的cc2538,因此在makefile中需要配置自己板子的文件,不过一般使用默认的就可以了。

        2、复位之后的第一个函数

        路径: \RIOT\cpu\cortexm_common\vectors_cortexm.c

        在这个路径中找到函数void reset_handler_default(void),这个函数是复位后的第一个运行的函数,里面可以自己去看看里面具体做了一些什么事。值得注意的是函数kernel_init()。

        3、kernel_init()

        路径: \RIOT\core\kernel_init.c

        这个问价下的函数里面创建了两个线程,空闲线程,main函数线程。因此我们可以在其他的文件里面直接定义main函数使用,就是因为这里已经定义了main函数线程。


        4、为什么cc2538的uart的波特率是115200?

        路径:\RIOT\boards\Makefile.include.serial

        riot的所有例程和测试例程都包含了uart。可以说uart是贯穿了riot的所有例程。路径中的定义了所有平台的波特率为115200,只要这里修改了,如果要使用其他硬件平台,波特率也会改变。对于cc2538中,我们也可以通过调用uart的驱动文件中的函数去修改波特率。这个一下讲不清,后面在专门介绍一下。


        今天就写到这里,下次介绍cc2538中gpio的使用。。。。。。。。。。。。


                                                                                                                                                               莫九玉 写于 2016.9.23


你可能感兴趣的:(RIOT,RIOT,操作系统,ubuntu,源码,结构)