contiki学习心路历程

  • Post author:
  • Post category:其他



0.前言


这篇博文是我个人的阶段性总结。大概1年半之前,我在图书馆中找到了一本书《基于IP的物联网架构、技术与应用》,书中描述了IPv6技术在物联网中的应用,我觉得这或许是物联网发展的方向,书中描述了contiki操作系统,contiki区别于zigbee pro是基于IPV6、6LowPAN技术的开源操作系统。当时我便下定决心要把这个contiki“用起来”,实现哪怕实现点对点的无线通信。今天我实现了,也痛哭了一场。虽然点对点通信是一件看似非常简单的事情,但是却需要非常多的基础知识。下面我就说说我个人的学习经历,希望对各位有用,也非常欢迎交流。


1.不要为专业找借口


学习contiki需要非常多的基础知识,包括嵌入式硬件、嵌入式软件、通信、网络、射频、嵌入式操作系统等等。只要觉得对contiki有兴趣就可以入手学习,我也坚信一定可以学好用好。本人专业机械工程,你没有看错我也没有写错,我的确是学习机械工程的。说实话在嵌入式上面的基础比较薄弱,所以我也告诉自己更加需要努力学习。既然机械工程的能把contiki用起来,那么我坚信电子信息工程、通信、计算机等相关专业入手学习contiki也一定会有所收获。




2.做好规划,耐心学习


contiki现在算是“小众”操作系统(希望以后不是),所以网上的资料较少,学习起来真的比较困难。也不可能今天刚听说contiki可以实现IPV6,明天IPV6报文就可以在RF芯片之间飞来飞去了。所以我在一年之前做了一个规划,我当时在自己的笔记本上记下了日期——2012年4月27日。那天给自己做了一个路线图,一条是IPV4学习路线,一条是CC2430/CC2530学习路线,两条路线一合并,加上6LowPAN技术的学习,把contiki“用起来”也变成顺理成章的事情。现在回过头来看看,我真的是这么做的。虽然中途多次想要放弃,学习的历程也是断断续续,但是终于有了一个结果也算没有白费。




3.用好嵌入式以太网


contiki是面向IPV6的操作系统,要想深入理解IPV6我个人认为应该先学好IPv4,为IPv6的学习与应用打好基础。在我个人路线图的第一个分支中细分为两步,第一步是ENC28J60的学习,第二步是uIP的学习应用。在《基于IP的物联网架构、技术与应用》一书中介绍,contiki通过uIPV6实现6lowPAN,uIPv6即从uIP演化而来。有了想法便开始逐渐实施,购买带以太网接口的STM32开发板,仔细分析ENC28J60的驱动代码,阅读uIP的手册等等。期间购买了很多图书,虽然花了不少钱(当时还是学生非常拮据)但是收获颇丰。国外有一个开源的以太网项目名为AVRNET。我通过这个项目学习了ENC28J60的驱动代码,并在STM32平台上逐步修改AVRNET项目中的以太网协议栈代码,从ENC28J60驱动,ARP协议,ICMP协议,UDP协议,TCP协议和HTTP协议,一步一步学习稳步实现,这样TCP IP协议本身的学习就完成了,我个人认为效果还不错。经过前面的学习,uIP、套接字这些内容的学习便比较顺利。如果非要从uIP或者lwIP开始学习嵌入式以太网,我觉得可能会面临更大的困难(诶,自己本科的时候并没有学习过TCP IP的相关课程,所以只能慢慢自学)。总之建议大家稍稍耐心一点。




STM32NET学习笔记 ARP和Ethernet部分





uIP学习笔记





4.认真研究一款无线RF芯片


开始研究contiki之前,自己也从未使用过一款无线RF芯片。我个人喜欢看书而不喜欢在网上狂找资料,我买了一本《ZigBee技术实践教程——基于CC2430/CC2431的无线传感网络解决方案》,在这本书中学习了无线传感网络的基本知识。不过也有少许遗憾,书中关于RF的部分讲解不多。之后便详细分析了CC2430 software example,CC2430的无线部分也逐步熟悉了。随后CC2430逐渐被CC2530取代,研究contiki的进度也非常缓慢,自然想过放弃。当时告诉自己,若contiki不成功就实现zigbee pro吧。又购入了一本图书《ZigBee无线传感网络设计与实现》,书中言简意赅的展示了zigbee pro的实现和使用,在学习的过程中又加深了RF芯片的理解。




CC2530 RF部分使用 ——实现点对点收发






5.学习一款嵌入式操作系统


contiki本质来说是一款操作系统,虽然是事件触发机制而不是freertos或ucos的抢占机制,但是殊途同归,contiki从某些层面来说和freertos和ucos相似。若能够熟练使用ucos的话,对学习contiki也大有帮助。总是,和前面3点一样,耐心打好基础才是王道,最后做到触类旁通。




FreeRTOS STM32移植笔记





FreeRTOS学习笔记——任务间使用队列同步数据






6.总结






contiki的使用经验特别是IPV6部分的内容会在以后的博文中和大家慢慢分享。在这里我特别感谢一下我的“头像”,感谢她的鼓励,感谢她每天都坚持提醒我早点休息,感谢她一直认为我应该登上“不正常人类研究中心”。


呵呵,不多说了,还是低头继续努力吧!


【学习contiki还顺带学习了linux的知识,这就是“树莓派”的故事了】