您的位置:首页 > 其它

TinyOS的个人见解2之ncc编译过程

2015-11-16 12:28 302 查看
首先大家熟悉的肯定是iar或者keil,又或者TI给出的CCS还是叫CSS搞不清楚,也就是eclipse+arm-none-eabi-gcc。

iar不多说,确实好用,也是TI推崇的,keil对2530的支持要慢很多。

也许确实你习惯了IAR或者keil,但是我要说的是这玩意都是要收费的,实际上开源的东西你最终还是要回到llinux下来,为什么非得花很多功夫把代码移植到keil和iar下来,我搞不明白。今天移植这个明天呢,别人出新版本了你再去移植?你确定你非得每次都去将底层GCC或者arm-none-eabi-gcc支持的代码改成iar支持的代码。

NCC的编译过程是分平台的,也就是nesc连接器采用的编译器,

一,51系列,比如2530,编译过程是:

1,nesc=gcc(make原语),nesc调用gcc先将nesc语言编写的组件链接编译成app.mangle.c文件,;

2,调用peil脚本,将app.mangle.c中的驱动部分,如中断,IO口,结构体(nx_structstruct编译后会默认gcc的__attribute__((packed))(主要是注释掉__attribute__((packed)))等函数转换成编译器(keil,sdcc,iar)支持的类型C文件,对此你可能修改的还得不少地方,比如6lowpan等库的一些结构体中结构成员是xxx.data;xxx.code,这些玩意是iar等编译器的关键字,好吧替换吧,有兴趣的可以去看我的2530源码的perl脚本,大家也就知道简单的代码背后作者还是付出了很多的辛苦的。


题外话:当然结构体那些对于keil这些编译器的结构体对齐是#pragma pack(n)了,但是对于51单片机是字节对齐的哈,基本不管,也就是nx_struct这个关键字是常用的也是应该关注的,gcc下的结构体对齐;

3,再调用51编译器,keil等,编译连接app.c,生成app.hex

二,telosb,其实就是msp430单片机,编译过程不介绍了,比2530简单,直接用msp430gcc;对于micaz是avrgcc

三,cc2538(cc2538cb),编译过程则比2530简单很多

ncc=arm-none-eabi-gcc nesc直接使用arm-none-eabi-gcc编译连接,对比2530发现确实简单很多,支持性也强了很多

这里也就解释了很多朋友安装了tinyos到cygwin下,貌似nesc编译器有些不合作,出错,那是一位低版本的nesc编译器支持的gcc版本问题,你的gcc版本太高了所致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: