• TinyOS的编译系统


    TinyOS的编译系统采用GNU Make,位于support/make文件中,包含各个平台的配置文件“*.target”和在这个平台上建立应用程序的“*.rules”文件。可以分为两个部分:使用nesc编译的公用部分 和 针对具体平台部分。

    简略步骤如下

    (0) TinyOS应用程序由nesC预编译器编译译形成一个“*.c”文件。(中间都会生成preHandler.pl文件)

        nesC预编译器由ncc和nescc两个工具组成(都有PERL语言编写)。

    (1) 将这个文件传递给合适的编译器或者工具,也就是针对具体硬件平台的编译器接受。

        

    通常有GCC,它适合于telos,mica,intlmote2系列。但是有一些平台如motorola, inter mcs51则不适合。

     具体编译操作时,首先可以参看support/make下的Makerules编译文件中,它根据“TOSMAKE_PATH”变量中所列的路径搜索“*.target”文件。"*.target"文件通常设置一些平台相关变量和提供编译平台的名称。并能过调用“TOSMake_include_platform”指向"*.rules"文件。“*.rules”文件由平台所配置的微处理器决定,因此通常几个平台共用一个“*.rules”文件。

    上文所用编译过程的平台限于telos,mica,intlmote2等,下面以不支持GCC编译器的芯片为例来说明。

    如CC2430支持的编译器为SDCC,KEIL,IAR。那么处理过程采用KEIL编译器。通过一个脚本程序,将经过nesC预编译生成的TinyOS应用程序转换成可以被KEIL接受的代码,然后送入KEIL编译器,最后下载到硬件,如下

        

    使用PERL语言编写Mangle脚本程序"mangleAppC.pl"文件实现以下功能:1)声明特殊寄存器(SFR)和特殊位变量(SBIT) 2)支持KEIL数据类型;3)去除与GCC有关的内联(inline);4)去除由NesC预编译生成的行编号; 5)用“__”代替“$”作为分隔标识符。6)修改中断向量。如将void_attribute ((interrupt))_vector_5 (void)改为 void _vector_5(void) interrupt 5

     

    一些文件内容和作用:

    1)      platform:在该文件中说明环境变量信息和基本编译参数,添加平台所用的硬件的代码目录,为nesC建立include路径;.platform文件是用perl脚本语言编写,由ncc解析。

    2)      hardware.h:该文件 用于对平台进行说明,设置非能用的、只针对平台的标识符,如常量、管脚的名称,以及引用其它的头文件,常包括说明MCU的头文件以及一些需要使用 ;

    3)      CC2430em.target:target文件的作用主要是让构建系统可以识别出我们移植的目标平台,在文件中需要定义平台名称及相关的变量。以及调用TOSMake_include_platform语句使用的.rules文件的编译规则;

    4)      Mcs51.rules本文件的内容就是生成目标平台的二进制/十六进制可执行代码时的编译说明,具体包括编译的环境、使用的工具、相关参数以及编译的步骤顺序。

    5)      Mcs51hardware.h:每个硬件体系都需要定义一组宏,这些宏定义就保存在这个头文件中,该头文件也会被包含在hardware.h中

     

     

     

     

     

  • 相关阅读:
    SSM-网站后台管理系统制作(4)---Ajax前后端交互
    SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码
    SSM-网站后台管理系统制作(2)---SSM基本工作原理
    SSM-网站后台管理系统制作(1)
    编译原理(龙书)-编译器制作
    Linux相关代码
    Python制作AI贪吃蛇
    S-DES算法实现(C++版本)
    照片收藏
    Python-制作抖音图片
  • 原文地址:https://www.cnblogs.com/dudu1990/p/2675293.html
Copyright © 2020-2023  润新知