Санкт-Петербургский государственный университет
Опубликован: 14.07.2013 | Доступ: свободный | Студентов: 509 / 178 | Длительность: 06:03:00
Специальности: Программист
Лекция 4:

Автоматизированное управление мобильным роботом

7.10. nxtOSEK C++

Более удобный программный интерфейс реализован для C++. Каждый датчик и мотор является экземпляром соответствующего класса, а это перекладывает работу по инициализации и завершения работы переферийных устройств на конструкторы и деструкторы соответствующих классов, инкапсуирует методы, деля синтаксии интуитивно понятным. Хоть необходимость использования процедур ecrobot_device_initialize, ecrobot_device_terminate пропадает, тем не менее, для того что бы согласовать обектно ориентированный подход с функционалом ОС РВ nxtOSEK и предоставлять классам взаимодействие с процедурами обработки прерываний, все же необходимо использовать процедуру user_1ms_isr_type2 и описать событие ОС РВ.

Как правило, в процедуре user_1ms_isr_type2 достаточно вызывать одну функцию SleeperMonitor() которая необходима для корректной работы класса Clock и корректного взаимодействия с устройвами через I2C интерфейс.

Так же необходимо указать в описании основной задачи в OIL файле события EventSleepI2C и EventSleep. Это может выглядеть, например, так:

//событие EventSleepI2C
EVENT EventSleepI2C
{
    MASK = AUTO;
};
//событие EventSleepI
EVENT EventSleep
{
    MASK = AUTO;
};
//описание основной задачи с названием, например, TaskMain
TASK TaskMain
{
    AUTOSTART = TRUE
    {
      APPMODE = appmode1;
    };
    PRIORITY = 1;
    ACTIVATION = 1;
    SCHEDULE = FULL;
    STACKSIZE = 512;
    EVENT = EventSleepI2C;  //добавили событие EventSleepI2C
    EVENT = EventSleep;  //добавили событие EventSleepI2C
};

Надо помнить, что так как объектам 18ти классов (датчикам, соединениям, моторам) требуется инициализация и корректное завершение работы, их необходимо определять как глобальные объекты. В противном случае на дисплее появится сообщение об ошибке и для корректной работы устройство надо будет перезапустить. Глобальными должны быть экземпляры следующих классов: AccelSensor, Bluetooth, Camera, ColorSensor, CompassSensor, SonarSensor, IrSeeker, LegoLight, Motor, NxtColorSensor, PSPNx, Rs485, GyroSensor, LightSensor, RcxLightSensor, SoundSensor, TouchSensor.

7.10.1. Иерархия классов

В этом параграфе приведен список классов в алавитном порядке с учетом наследования. Многие методы классов созвучны функциям С интерфейса, поэтому подробно их описывать здесь не будем.

Все классы находятся в пространстве имен (namespace) "ecrobot", что бы использовать классы без приставки ecrobot:: необходимо указасть в начале программы using namespace ecrobot. Так же, что бы генерировался корректный машинный код, необходимо сделать указание компановщику (linker) компановать программу в стиле С, т.е. код программы должен быть заключен между extern "C"{ …код программы… }(см. пример в начале главы).

  • ecrobot::AccelSensor

    Клаcс работы с датчиком ускорения HiTechnic.

  • ecrobot::Bluetooth

    Класс работы с Bluetooth.

  • ecrobot::BTConnection

    Устанавливает соединение через Bluetooth.

  • ecrobot::Camera

    Класс работы с камерой NXTCamv2.

  • ecrobot::Clock

    Класс работы с системными часами.

  • ecrobot::ColorSensor

    Класс работы с датчиком цвета NXT.

  • ecrobot::CompassSensor

    Класс работы с компасом HiTechnic

  • ecrobot::Daq

    Класс для отправки внутренних данных NXT программе NXT GamePad.

  • ecrobot::GamePad

    Класс для дистанционного управления с помощью джойстика GamePad.

  • ecrobot::I2c
  • ecrobot::SonarSensor

    Класс работы с ультразвуковым датчиком.

  • ecrobot::IrSeeker

    Класс работы с инфракрасным датчиком.

  • ecrobot::Lcd

    Класс работы с дисплеем устройства NXT.

  • ecrobot::LegoLight

    Класс работы с датчиком освещенности NXT.

  • ecrobot::Motor

    Класс работы с серводвигателями NXT.

  • ecrobot::Nxt

    Класс работы с внутренними функциями устройства NXT (работа с кнопками, получение уровня заряда батареи).

  • ecrobot::NxtColorSensor

    Класс работы с датчиком цвета NXT.

  • ecrobot::PSPNx

    Класс работы с портом расширения для Sony Play Station.

  • ecrobot::Camera::Rectangle_T

    Вспомогательный класс для работы с камерой NXTCamv2.

  • ecrobot::Rs485

    Класс работы с интрфейсом RS485.

  • ecrobot::Sensor
  • ecrobot::GyroSensor

    Класс работы с гироскопом.

  • ecrobot::LightSensor

    Класс работы с датчиком освещенности.

  • ecrobot::RcxLightSensor

    Класс работы с датчиком освещенности RCX.

  • ecrobot::SoundSensor

    Класс работы со звуковым датчиком.

  • ecrobot::TouchSensor

    Класс работы с датчиком касания.

  • ecrobot::Speaker

    Класс работы с воспроизведением звука.

  • ecrobot::Usb

    Класс работы с USB.

  • ecrobot::VectorT < T >

    Класс, реализующий вектор из двух компонент.