NesC (network embedded systems C)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:29, 22 мая 2016.
NesC
Парадигма императивный
Стабильная версия 1.1.3 / 14 декабря 2004
Лицензия New BSD
Портал: NesC
Под влиянием
C

NesC (network embedded systems C - сетевой язык Си для встроенных систем) - это компонентный событийно-ориентированный язык программирования, использующийся для создания приложений для платформы TinyOS. NesC - расширение языка Си (то есть код на Си полностью корректен для компилятора nesC), добавляющее дополнительные возможности в TinyOS - среду, созданную для встроенных устройств, которые используются в беспроводных сенсорных сетях.

Модули

Модули реализации компонентов спецификации с кодом C:

module-implementation:
implementation { translation-unit }

,где translation-unit представляет собой список объявлений и определений C. Заявления верхнего уровня модуля translation-unit относятся к области применения компонента-реализации модуля. Эти заявления имеют неопределенную степень и могут быть любым стандартным объявлением C или определением, заявлением или определением задач, реализацией команд или событий.

Конфигурации

Конфигурации реализуются компонентной спецификацией путем соединений или проводки, а также набора других компонентов:

configuration-implementation:
implementation { component-listopt connection-list }

Component-list перечислены компоненты, которые используются для создания этой конфигурации, connection-list определяет, как эти компоненты соединены друг с другом и со спецификацией к конфигурации.

Пример приложения

Ниже показана структура (компоненты и соединения) простого приложения Blink, который мигает светодиодом раз в секунду:

Blink.gif

Исходный код для Blink состоит из двух частей: проводки в Blink и фактической логики приложения (C-код) в BlinkM

Blink:

/*
 *  Copyright (c) 2000-2002 The Regents of the University  of California.  
 *  and Copyright (c) 2002 Intel Corporation 
 *  All rights reserved.
 */
configuration Blink {
}
implementation {
  components Main, BlinkM, ClockC, LedsC;

  Main.StdControl -> BlinkM.StdControl;
  BlinkM.Clock -> ClockC;
  BlinkM.Leds -> LedsC;
}

BlinkM:

/*
 *  Copyright (c) 2000-2002 The Regents of the University  of California.  
 *  and Copyright (c) 2002 Intel Corporation 
 *  All rights reserved.
 *
 * Implementation for Blink application.  Toggle the red LED when the
 * clock fires.
 */
module BlinkM {
  provides interface StdControl;
  uses interface Clock;
  uses interface Leds;
}
implementation {
  bool state; /* the state of the red LED (on or off)   */

  /* Initialize the component.
   * @return Always returns SUCCESS */
  command result_t StdControl.init() {
    state = FALSE;
    call Leds.init();
    return SUCCESS;
  }

  /* Start things up.  This just sets the rate for the clock component.
   * @return Always returns SUCCESS */
  command result_t StdControl.start() {
    return call Clock.setRate(TOS_I1PS, TOS_S1PS);
  }

  /* Halt execution of the application.
   * This just disables the clock component.
   * @return Always returns SUCCESS */
  command result_t StdControl.stop() {
    return call Clock.setRate(TOS_I0PS, TOS_S0PS);
  }

  /* Toggle the red LED in response to the Clock.fire event.  
   * @return Always returns SUCCESS */
  event result_t Clock.fire() {
    state = !state;
    if (state) {
      call Leds.redOn();
    } else {
      call Leds.redOff();
    }

    return SUCCESS;
  }
}

Ссылки

  1. nesc
  2. nesc ref