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版本太高了所致
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版本太高了所致
相关文章推荐
- 建造者模式
- 火车
- 文档分享-Activiti 5.16 用户手册
- SQL SERVER 2008 R2安全配置与防暴力破解
- ASCII码之和最大
- #ifndef #define #endif
- jsp+servlet+javabean实现数据分页方法完整实例
- tomcat 内存溢出错误记录
- PHP-数组生成xml数据
- 用Wireshark简单分析HTTPS传输过程-抓包过程
- 理解LSTM网络
- 修改Linux时间一般涉及到3个命令: date, clock, hwclock
- DRBD+Heartbeat+MySQL高可用
- css 定制Suckerfish下拉菜单
- PHP开发安全问题总结
- Redis配置不当可导致服务器被控制,已有多个网站受到影响 #通用程序安全预警#
- process Launch Failed:failed to Get the Task for Process XXXX(解决方案)
- Android多线程下实例
- poj 1150 The Last Non-zero Digit 求排列数的最后非零数
- 内核zImage的制作(initramfs)