NQC - язык программирования роботов LEGO

Настоящее не является официальным документом или веб-сайтом LEGO®. LEGO® и Spybotics® являются торговыми марками LEGO Group. Автор данного сайта никак не связан ни с компанией LEGO Group, ни с ее подразделениями или представительствами. Все права на торговые марки и зарегистрированные торговые знаки являются собственностью их владельцев. Автор не несет ответственности за повреждение компьютеров, потерю данных и иной прямой или косвенный ущерб, могущий возникнуть в результате использования сведений из данного обзора. Copyright © Magus 2003; изображения ©LEGO 2002, если не указано иного. All rights reserved.
Если вы пока не нашли нужную вам информацию на сайте, оставьте свой вопрос или пожелания здесь !

RoboClub
 

Главная страница
 

Новости
 

Устройство
 

Описание стандартных программ и миссий
 

Программирование
- инструменты
- программы
 

"Битвы роботов"
 

Проекты
 

Компоненты и конструкции
 

Алгоритмы и поведение
 

FAQ
 

Downloads
 

Ссылки
 

Соревнования роботов
 

Наша библиотека
 

Видеотека
 

Форумы по робототехнике
 

Голосования
 

Доска объявлений ("Барахолка")
 

"Обратная связь"
 

Who is who?
 

Гостевая книга
 
Подписка на новости:
Е-Mail:
Формат писем:
Подписаться
Отказаться

NQC, что означает Not Quite C ("Не совсем Си") - простой специализированный язык программирования высокого уровня, созданный Дейвом Баумом для написания программ для некоторых роботов LEGO. В настоящее время NQC позволяет программировать роботов семейства Mindsorms (RCX и RCX2), а также CyberMaster, Scout и Spybotics.

Встроенное программное обеспечение роботов LEGO ("firmware"), содержит интерпретатор байтовых кодов, которые, собственно, и являются той программой, которую робот выполняет. Компилятор NQC транслирует исходный текст программы, написанный на NQC, в байткоды LEGO.

NQC, как следует из названия, похож на язык С, поэтому, по сравнению с MindScript или LASM, гораздо быстрее осваивается теми, у кого уже есть некоторый опыт в программировании. Очень простой прикладной программный интерфейс (API) NQC, в отличие от очень мощного но объемного API MindScript'а, позволяет быстро начать писать собственные программы.

Краткое введение в NQC для программистов

Программисту, писавшему программы на С или С++, обычно достаточно просто пролистать руководство по NQC, либо посмотреть образцы программ, чтобы начать писать свои собственные. Поэтому далее будут отмечены только некоторые особенности NQC, отличающие его от других языков программирования.

Задачи

Роботы LEGO могут выполнять несколько задач одновременно (например, управлять двигателями и в то же время отслеживать состояние датчиков). Число задач определяется типом робота: RCX поддерживает 10 задач, Spybotics - 8, Scout - 6, CyberMaster - 4.

Задачи определяются через ключевое слово task. Программа должна иметь по крайней мере одну задачу с именем main, которая и будет выполнятся при начале работы программы. Запуск задачи производится командой start, остановка - stop.

Функции

Функции используются для облегчения программирования: таким образом группы операторов, объединенные в функцию, могут быть вызваны при необходимости. В отличие от подпрограмм, функции имеют тип inline, то есть при компиляции программы текст функции будет вставляться в каждое место ее вызова.

Функции могут быть переданы аргументы, однако, в отличие от большинства языков программирования, в NQC функции НЕ возвращают значения (поэтому же, кстати, определяются через ключевое слово void).

Подпрограммы

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

  • подпрограммы не используют аргументов и не возвращают значений;
  • подпрограмма не может вызвать другую подпрограмму;
  • число подпрограмм в программе ограничено типом робота (8 подпрограмм для RCX, 4 для CyberMaster, 4 для Scout, 32 для Spybotics).
  • Переменные и константы

    Все переменные в NQC одного типа - 16-битовые знаковые целые, декларируются, соответственно, через ключевое слово int. Аналогично, константы могут быть только числовыми - целыми или шестнадцатеричными. Число переменных в программе зависит от типа робота: программы для Scout могут иметь до 10 переменных, для остальных роботов - до 32.

    Глобальные переменные определяются вне блоков кода и доступны для всех задач, функций и подпрограмм. Локальные переменные определяются внутри блока кода и доступны только внутри этого же блока. Если переменной не требуется быть глобальной, ее следует сделать настолько локальной, насколько возможно.

    Массивы

    Массивы поддерживаются только RCX2 и Spybotics и имеют следующие ограничения:

  • размер массива явно указывается при его объявлении;
  • при объявлении массива нельзя выполнить его инициализацию, значения элементам должны быть явно назначены в самой программе;
  • массив не может быть аргументом функции (но отдельный элемент массива - может);
  • ни к массиву, ни к эго элементам не применимы операции инкремента (++) и декремента (--), а также комбинированные операторы (+= и т.п.).