TinyOS的个人见解3‘之认识平台

        现在你手里应该有应该有tinyos的源码了,OK第一件事情是去阅读一下,licences和其他该阅读的read等文件,你将会知道这个组件是谁提供的,哪些平台驱动是谁或者哪个公司写的,保持对程序员之间的尊重也了解一下平台的版权问题。
下面介绍一下底层相关的:
你生成的代码需要平台运行,那么tinyos最有名的平台应该就是telosb,同步介绍新平台,也就是作者移植的平台cc2538cb;在此主要还是针对tinyos2.2.12release版本的目录结构,后面会捎带说明为什么不是现在github上的做法。
很重要的是你要知道下面的环境变量:有可能是启动bashshell的时候自动export,也有可能是你手动去source xx.sh
TOSROOT
TOSDIR=$TOSROOT/tos
MAKERULES=$TOSROOT/support/make/Makerules

对于github上最新版本则有所替换,具体去看他的make目录下的read文件


相关的目录为TOSDIR/chips和TOSDIR/platforms
TOSDIR/chips相对比较简单,主要是一些底层的驱动的文件,如timer何uart,rf等等
TOSDIR/platforms相对比较重要的是.platforms文件,注意前缀是‘.’,在linux/ubuntu下可以在该目录下按下ctrl+h键显示这种隐藏文件,这个文件是你移植平台让makefile找到tinyos库组件的关键文件,你可以将库组件,TOSDIR/chips下的组件目录添加到这个文件中,
指定nesc编译器调用如ncc=msp430gcc/ncc=arm-none-eabi-gcc,指定编译选项和平台的相关如添加TOSDIR/chips下的RF驱动目录到编译路径:
push ( @includes, qw(
%T/chips/cc2538/rf
}
cc2538cb
@opts = qw(
-gcc=arm-none-eabi-gcc
-mcpu=cortex-m3
-nostartfiles
-fnesc-target=env
-fnesc-no-debug
);
push @opts, "-fnesc-scheduler=TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask" if !$with_scheduler_flag;
指定内存占用字节数:
$ENV{NESC_MACHINE} = "structure_size_boundary=32, pointer=4,4 float=4,4 double=8,4 long_double=8,4 short=2,2 int=4,4 long=4,4 long_long=8,4 int1248_align=1,2,4,4 wchar_size_size=4,4 char_wchar_signed=false,true";

TOSDIR/platforms下的组件主要是完成系统时钟的初始化,LED的初始化等工作;
当然github上最新的代码的做法是将这个文件删除了,改为在support/make下添加xxx.platform文件,tinyos介绍make将会说明为什么我在移植cc2538cb平台的时候要保留2.2.12release的做法。

你可能感兴趣的:(TinyOS的个人见解3‘之认识平台)