contiki SLIP代码分析

contiki SLIP代码分析前言    本文通过分析slip代码,结合C语法,体会contiki系统的文件的编写风格。
摘要由CSDN通过智能技术生成

contiki SLIP代码分析

前言

    本文通过分析slip_radio代码,结合C语法,体会contiki系统的文件的编写风格,理解contiki中的SLIP协议

正文

对于Contiki OS,一个任务(线程)slip_radio的加载比较常见的方法是使用AUTOSTART_PROCESSES

对于一个线程,通常可以看到三部分

1,//线程声明PROCESS(xxxx_process, "xxxx process");

2,//线程加载AUTOSTART_PROCESSES(&xxxx_process);

3,//线程实体PROCESS_THREAD(xxxx_process, ev, data)

对于slip_radio_process,具体有

//线程声明

PROCESS(slip_radio_process, "Slip radio process");

//线程加载

AUTOSTART_PROCESSES(&slip_radio_process);

//线程实体

PROCESS_THREAD(slip_radio_process, ev, data)

PROCESS_THREAD(slip_radio_process, ev, data)
{
  static struct etimer et;
  PROCESS_BEGIN();

  init();//slip初始化
  NETSTACK_RDC.off(1);
#ifdef SLIP_RADIO_CONF_SENSORS
  SLIP_RADIO_CONF_SENSORS.init();    //传感器
#endif
  printf("Slip Radio started...\n");

  etimer_set(&et, CLOCK_SECOND * 3); //设置事件定时器

  while(1) {
    PROCESS_YIELD();

    if(etimer_expired(&et)) {
      etimer_reset(&et);
#ifdef SLIP_RADIO_CONF_SENSORS
      SLIP_RADIO_CONF_SENSORS.send();
#endif
    }
  }
  PROCESS_END();
}
 在slip_radio_process线程实体中,无操作是如下格式
 PROCESS_BEGIN();
 etimer_set(&et, CLOCK_SECOND * 3);
   while(1) {
 PROCESS_YIELD();
   if(etimer_expired(&et)) {
      etimer_reset(&et);
}

这里注意集中应用程序上的分析,暂不分析OS

初始化init();

在init()中可以看到

static void
init(void)
{
#ifndef BAUD2UBR
#define BAUD2UBR(baud) baud
#endif
  slip_arch_init(BAUD2UBR(115200));
  process_start(&slip_process, NULL);
  slip_set_input_callback(slip_input_callback); //设置输入回调函数
  //input_callback=slip_input_callback 映射
  packet_pos = 0;
}

第一初始化硬件UART 115200

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值