Начиная с этого момента для описания синтаксических правил языка программирования С-51 применяются синтаксические диаграммы. Поясним основные понятия и обозначения, которые в них используются.

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

Терминальными называются имена, входящие в текст программы так, как они написаны. Например, терминальными именами являются символьные или строковые константы. В синтаксических правилах такие терминальные имена заключаются в апострофы и кавычки соответственно.

Нетерминальные имена — это понятия, которые выводятся при помощи синтаксических правил с использованием других нетерминальных и терминальных имен, а также символов. Нетерминальные имена будем начинать с заглавной буквы и использовать для их написания курсивный Шрифт Courier, например, Спецификатор класса памяти.

Элементы синтаксических правил, заключенные в квадратные скобки ([]), являются необязательными.

Итак, вооружившись этим набором несложных понятий и договоренностей, приступим к описанию синтаксиса языка программирования С-51.

Объявление переменной в этом языке представляется в следующем виде:

[Спецификатор класса памяти] Спецификатор типа

[Спецификатор типа памяти] Описатель ['=' Инициатор]

[, Описатель ['=' Инициатор]]…

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

Спецификатор типа — одно или несколько ключевых слов, определяющих тип объявляемой переменной. В языке С-51 имеется стандартный набор типов данных, используя который, можно сконструировать новые (уникальные) типы данных. Перечень стандартных типов данных С-51 приведен в табл. 9.6.

Инициатор — задает начальное значение или список начальных значений, которое (которые) присваивается переменной при объявлении.

Спецификатор класса памяти — определяется одним из ключевых слов языка С-51: auto, bit, extern, register, sbit, sfr, sfrl6 static, и указывает, каким образом и в какой области памяти микроконтроллера будет распределяться память под объявляемую переменную, с одной стороны, а с другой — область видимости этой переменной, т. е. из каких программных модулей можно будет к ней обратиться.

Спецификатор типа памяти — определяется одним из шести ключевых слов языка С-51: code, data, idata, bdata, xdata, pdata, и указывает, в какой области памяти микроконтроллера будет размещена переменная.

Компилятор С51 обеспечивает следующие расширения ANSI-стандарта языка программирования С, необходимые для программирования микроконтроллеров семейства MCS-51:

— области памяти;

— типы памяти;

— модели памяти;

— описатели типа памяти;

— описатели изменяемых типов данных;

— битовые переменные и данные с битовой адресацией;

— регистры специальных функций;

— указатели;

— атрибуты функций.

Типы данных bit, sbit, sfr и sfri6 являются расширением языка программирования С-51 для поддержки процессора 8051. Они не описаны стандартом ANSI, поэтому к ним нельзя обращаться при помощи переменных-указателей.

Категории типов данных

Основные типы данных определяют с использованием следующих ключевых слов.

Для целых типов данных: bit, sbit, char, int, short, long, signed, unsigned, sfr, sfrl6.

Для типов данных с плавающей запятой: float.

Переменная любого типа может быть объявлена как неизменяемая. Это достигается добавлением ключевого слова const к спецификатору типа.

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

Примеры использования ключевого слова const:

const float A=2.128E-2;

const В=286;     //подразумевается const int В=286

Отметим, что переменные со спецификатором класса памяти размещаются во внутреннем ОЗУ. Неизменяемость контролируется только на этапе трансляции. Для размещения переменной в ПЗУ лучше воспользоваться спецификатором типа памяти code.

Целочисленный тип данных
Перейти на страницу:

Поиск

Похожие книги