contiki学习笔记——cc2530dk例程实践和UDP重启问题解决

0.前言
    最近收到很多关于contiki的邮件(2014年4月),而此时我正专注于开源硬件——树莓派【树莓派学习笔记——索引博文】。在回答各位contiki爱好者问题时我也重新关注和学习了contiki,略有收获和大家分享一下。
    【相关博文】——如果您初次接触Contiki请先阅读该博文,若不熟悉linux操作请前往IAR工程合集。
    【重要说明】
    例程以contiki sensinode分支为主,该分支和Contiki主分支存在差异,主要解决CC2530 UDP例程重启问题

    【关于UDP重启问题】
    收到很多关于使用CC2530运行UDP例程时重启的问题,重启的问题也困恼了我很久,重启的最根本问题便是CC2530的stack空间不足——更多的内容请参考【8051 Memory Spaces
    【contiki官方仓库】【contiki2.6发行版】【contiki2.7发行版】CC2530DK UDP例程均存在重启现象
    【contiki sensinode分支】无重启现象,contiki的版本停留在contiki-2.6。contiki sensinode分支修改了contiki core部分中至少tcpip.c和sicslowpan.c等文件的代码以尽可能的减少堆栈开销。
    
    【调试工具使用】
    由于linux中换行以\n结尾,而windows以\r\n结尾,在windows中调试例程需要修改串口调试工具中的设置,例如putty中。
    【\n变为\r\n】——修改设置见下图。

图1 回车换行设置

    【putty打开串口】——输入串口编号COM7,输入波特率115200,点击open。

图2 打开指定串口

    【下载hex文件】
    从Instant Contiki(Vmware虚拟机)中复制hex文件到windwos中某目录,然后使用smartRF Flash Programmmer。操作步骤如下。

图3 下载Flash

1.UDP例程
    本博文一反常态从较为复杂的例子开始,先尝试UDP IPv6例子。
    【说明】
    存在两个CC2530节点,一个作为客户端client,一个作为服务器端server。客户端定期向服务器端发送UDP数据包,服务器接收UDP数据包并直接返回。【如果发现例程没有效果,请参考【contiki学习笔记——IEEE802.15.4地址变为IPv6地址】修改client.c中的代码】
 
    【操作】——cd指令进入例程目录。server操作和client操作相似。
    cd contiki-sensinode-cc-ports/examples/cc2530dk/udp-ipv6/
    make server


图4 cd和make操作


图5 输出结果

    【运行结果】——稳定运行之后,server和client开发板 红色LED几乎同时闪烁。前几个UDP数据包会发生数据包丢失的情况,问题原因尚未找到。

图6 server串口输出结果


图7 client输出结果
    
2.hello world例程
    【说明】
    Contiki最简单的例子,通过串口输出Hello world!
    【操作】
    cd contiki-sensinode-cc-ports/examples/cc2530dk/
    make hello-world

图8 hello-world例程
    
3.blink-hello例程
    【说明】建立两个任务,两任务同时通过串口打印数据。测试Contiki的定时器和阻塞API。
    【操作】
    cd contiki-sensinode-cc-ports/examples/cc2530dk/
    make blink-hello
    【运行结果】

图9 blink-hello例程

4.timer-test例程
    【说明】测试Contiki的多种定时器,包括etimer和rtimer。
    【操作】
    cd contiki-sensinode-cc-ports/examples/cc2530dk/
    make timer-test
    【运行结果】

图10 timer-test例程

5.sensor-demo例程
    【说明】
    通过CC2530的片内AD转换通道获得芯片内部温度,通过按下BUTTON按钮捕获外部中断。
    由于开发板存在差异,需要修改platform/cc2530dk/dev目录下的button-sensor.c文件,BUTTON1由P0_1变为P0_5,修改内容见红色字样
#if MODEL_CC2531
#define BUTTON1_PORT 1
#define BUTTON1_PIN 2
#define BUTTON2_PORT 1
#define BUTTON2_PIN 3
#else
#define BUTTON1_PORT 0
#define BUTTON1_PIN 5 /* P0_1 change to P0_5*/
#endif
    【操作】
    cd contiki-sensinode-cc-ports/examples/cc2530dk/
    make sensor-demo
    【运行结果】

图11 sensor-demo例程

6.总结和展望
    花些时间整理以前的Contiki博文并和这篇结合起来。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值