1.前言
    contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统。国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有那么响亮的中文名称。如果还没有中文名称的话,就干脆叫它“康提基”(来自wifi百科)。
    本从分析最简单基础的led驱动部分。contiki的led驱动可简单分为抽象接口和具体实现两部分。由于contiki需要适应多种平台,所以contiki提供了控制LED的三大接口,分别是:
    void leds_arch_init(void)    LED初始化函数
     unsigned char leds_arch_get(void) LED状态获取函数
     void leds_arch_set(unsigned char leds)    LED状态设置函数
各LED状态按位排列,例如最低位为LED1的状态,最低位为1则LED点亮,最低位为0则LED熄灭。以此类推。
    平台说明
    【硬件平台】CC2530    
    【软件平台】IAR EW8051 / Instant Contiki 2.7
2.相关文件
    2.1 leds.c和leds.h
    该文件为led驱动代码的抽象接口,具体代码如下:
void leds_init(void);
void leds_blink(void);
unsigned char leds_get(void);
void leds_on(unsigned char leds);
void leds_off(unsigned char leds);
void leds_toggle(unsigned char leds);
void leds_invert(unsigned char leds);
    而另外三个函数便是以上抽象接口的具体实现,具体代码如下:
void leds_arch_init(void);
unsigned char leds_arch_get(void);
void leds_arch_set(unsigned char leds);

    2.2 leds-arch.c
以-arch结尾的一般都是接口实现的代码,再如rime-arch.h。该部分代码可位于contiki/cpu/cc253x,也可以位于contiki/platform/cc2530dk。该文件在哪不重要,重要的该文件本质为led的驱动。(学习contiki的过程中,我总是纠结哪些文件应该在哪个文件夹,其实这并不重要,重要的是看懂这些文件到底有什么功能)
虽然代码接口部分显得非常简单,但是如果认真查看leds中的具体代码,还是颇费功夫。contiki具备能量消耗统计功能,任何LED的操作都会被统计分析。个人认为这种能量统计机制非常有特色,有时间可以深入研究。
3.具体实现
具体代码如下:
/* H/W Connections */
#define LED1_PIN    P1_0
#define LED2_PIN    P1_1
#define LED3_PIN    P1_4/* P0DIR and P0SEL masks */
#define LED1_MASK   0x01
#define LED2_MASK   0x02
#define LED3_MASK   0x10
#define LED4_MASK   0x02
/*---------------------------------------------------------------------------*/
void
leds_arch_init(void)
{P1SEL &= ~(LED1_MASK | LED2_MASK | LED3_MASK);P1DIR |= (LED1_MASK | LED2_MASK | LED3_MASK);
}
/*---------------------------------------------------------------------------*/
unsigned char
leds_arch_get(void)
{unsigned char v;v = (unsigned char) (LED1_PIN | (LED2_PIN << 1) | (LED3_PIN << 2));return v;
}
/*---------------------------------------------------------------------------*/
void
leds_arch_set(unsigned char leds)
{LED1_PIN = leds & 0x01;LED2_PIN = (leds & 0x02) >> 1;LED3_PIN = (leds & 0x04) >> 2;
}
/*---------------------------------------------------------------------------*/

4.范例
在main开始的部分,可初始化LED即调用leds_init()。定义一个任务,该任务实现LED闪烁,间隔时间为1s。在这个任务中还涉及contiki任务的基本结构,etimer的使用。具体代码如下:
#include "contiki.h"
#include "dev/leds.h"
/*---------------------------------------------------------------------------*/
PROCESS(blink_process, "Blink");
AUTOSTART_PROCESSES(&blink_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(blink_process, ev, data)
{static struct etimer et;PROCESS_BEGIN();while(1) {etimer_set(&et, CLOCK_SECOND);                    // etimer溢出周期为1sPROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));leds_on(1);                                       // 打开LED1etimer_set(&et, CLOCK_SECOND);PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));leds_off(1);}PROCESS_END();
}

5.总结
leds部分实现还算简单易懂,写这些东西主要为了理解contiki的具体结构,理解contiki的设计思路。那么接下来便可切入rtimer部分。 请注意rtimer为一种定时器而rime则是一种协议栈,两者都是contiki的一个部分,相差一个字母t,但是完全不同。

contiki 学习笔记 leds实现部分相关推荐

  1. Contiki学习笔记——Cooja启动失败

    Contiki学习笔记--Cooja启动失败 Cooja启动 Cooja启动 进入Terminal: cd Contiki/tools/cooja ant run 出现错误: Could not fi ...

  2. contiki学习笔记03

    contiki学习笔记03 contiki是基于事件型驱动的操作系统,它传递事件的方式有两种,同步和异步. process_post_synch函数是同步,调用它可以马上执行相关的线程:process ...

  3. contiki学习笔记之leds

    1.介绍 不断学习,不断忘记,总感觉学了就忘,结果啥都没剩下.所以有写下来的想法了. contiki 一个非常小的操作系统,尤其是对内存有优化.操作系统完全用C语言编写,可移植性非常好.具体可以去co ...

  4. contiki学习笔记(一)

    本学期开始学习contiki,主要是将contiki os应用于cc2530.学习的时候,发现国内的资料很少,故边学习边写一些笔记,方便自己查看. 一.contiki简介 Contiki是一个开源的. ...

  5. contiki学习笔记 etimer部分

    1.前言     contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...

  6. contiki学习笔记(二)CTK图形界面

    CTK 图形界面 Contiki 工具包(CTK)为康智奇系统提供了图形用户界面 Modules CTK device driver functions CTK设备驱动程序功能 CTK设备驱动程序功能 ...

  7. contiki学习笔记(七)contiki系统

    八.contiki进程 contiki编程的核心文档 contiki的一个进程由一个单一的原线程组成. Files file process.c contiki进程内核的实现. file proces ...

  8. contiki学习笔记(四)、contiki系统UDP通信原理(单播、多播、RPL介绍)

    (1).simple_udp_register()函数 contiki\core\net\ip /*该函数简化contiki系统中基于UDP协议的Socknet接口操作,函数体中包含了udp_new( ...

  9. contiki学习笔记(五)ctimer和etimer

    四.callback timer 回调计时器(ctimer) Callback timer(回调计时器) Contiki system ctimer模块提供了一个计时器机制(机制)调用指定的C函数ct ...

最新文章

  1. php service locator,Yii源码解读-服务定位器(ServiceLocator)
  2. 手把手教你全家桶之React(一)
  3. 纯CSS实现侧边栏/分栏高度自动相等
  4. HEVC/H265 HM10.0 分析(一)NALread.cpp
  5. Java8 基础数据类型包装类-Long
  6. 数字水印技术的原理、实现及其应用
  7. vue + element插件Popover弹出框
  8. LTspice基础教程-033.绘制电容阻抗特性曲线
  9. 对于自己(Android)秋招的一点总结(感慨)
  10. html5三国策略,HTML5新游《乱弹三国》今日首曝
  11. 如何快速搭建好看的个人博客(完整配置与源码)
  12. 开发一个APP有多难?APP开发流程、开发成本揭秘
  13. 浅入浅出LuaJIT
  14. Centos-openstack-Rocky-ironic部署
  15. 被win10的诸多功能无法使用折腾个半死
  16. ISO9001质量管理体系认证
  17. java 一般方法_java有哪些方法
  18. 统计学“诺贝尔”奖——考普斯总统奖(COPSS Presidents' Award)
  19. 用Python来绘制自己的个人足迹地图,精确到市级别
  20. 连接服务器显示615,D-Link DIR 615无线路由器设置

热门文章

  1. 【行业应用】浅谈AI如何在电力行业落地
  2. 电脑的计算机自动打开文件,为什么电脑开机后会有一个文件夹自动打开
  3. 论文学习笔记:CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes
  4. android中dalvik虚拟机参数
  5. 【NOIP 2017】Day2 T3 列队
  6. python大赛对名_用100行Python爬虫代码抓取公开的足球数据玩(一)
  7. FFmpeg支持QUIC
  8. 【python】openpyxl常用方法
  9. OAuth 2.0 基础(2)
  10. 会议记录怎样做得又快又好?一分钟学会录音转文字