Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Читать онлайн Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 11 12 13 14 15 16 17 18 19 ... 150
Перейти на страницу:

В микроконтроллерах семейства 68НС12, переменные размещаются в ячейках памяти ПЗУ или ОЗУ. Переменная, которая не изменяет своего значения в течение выполнения программы, именуется константой и хранится в ПЗУ. Переменная, значение которой изменяется в процессе исполнения программы, должна храниться в ОЗУ. Например, предположим, что некоторый контроллер связан с датчиком температуры посредством аналого цифрового преобразователя. Прикладная программа должна постоянно обновлять значение температуры в памяти контроллера. Для этого объявим переменную с именем temp (от слова temperature — температура) и разместим ее в ОЗУ МК. Приведенный ниже фрагмент программы на Си демонстрирует, как обратиться к размещенной в ОЗУ переменной temp и отобразить ее значение на дисплее. Заметим, что номера строк в приводимых фрагментах программ не являются частью записи операторов языка Си и не должны присутствовать в исходном тексте программы, подлежащем компиляции. Они введены искусственно для ссылки на отдельные операторы при обсуждении конструкций языка Си.

1 while (1)

2 {

3  temp = *(unsigned char volatile*)(0х1000);

4  printf(The current temperature is %dn, temp);

5 }

Данный фрагмент кода предполагает, что переменная с именем temp создана (объявлена) ранее, и также ранее реализован фрагмент кода на Си для опроса аналого цифрового преобразователя с целью обновления значения температуры. Для определенности в строке 3 мы сами присваиваем этой переменной значение $1000 в шестнадцатеричном коде (или 4096 в десятичной системе счисления). Префикс 0x служит в Си для обозначения шестнадцатеричной системы счисления. Не следует тревожиться, если не все записи в данном примере ясны для Вас. Пройдет немного времени, Вы закончите изучение материалов данной главы, и все рассмотренные примеры станут для Вас простыми и понятными.

В приведенном фрагменте переменная temp может быть объявлена как глобальная или как локальная переменная. Назначение статуса переменной (глобальная или локальная) определяет программист посредством записи оператора для объявления переменной в определенном месте текста программы. Глобальная переменная должна быть объявлена вне всех функций данной программы. В то время как локальная переменная объявляется внутри той функции, в которой используется. Мы рассмотрим способы объявления переменных после обсуждения в следующем параграфе типов данных, используемых в программах на Си.

3.2. Типы данных в Си

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

Спецификация типа Описание Размер, байт Допустимый диапазон чисел char Однобайтовое целое со знаком 1 –128 ÷ +127 unsigned char Однобайтовое целое без знака или символ из набора символов системы ASCII 1 0 до 255 int Целое значение естественного размера (машинное слово) со знаком 2 –32768 ÷ +32767 short int Целое значение естественного размера (машинное слово) со знаком 2 –32768 ÷ +32767 unsigned int Целое значение естественного размера без знака 2 от 0 до 65535 long int Целое значение двойного естественного размера (два машинных слова) со знаком 4 –2147483648 ÷ +2147483647 float Число в формате с плавающей запятой 4 ±1,176E–38 ÷ ±3,40E+38 double Не рекомендуется для использования 8 ±1,7E–308 ÷ ±1,7E+308 

Табл. 3.1.  Спецификация типов данных языка Си, используемых компилятором ICC12

Область памяти, отводимая для хранения объекта типа char, всегда составляет один байт. Размер области памяти, отводимой для хранения объектов int и long, определяется типом используемого компилятора. Как правило, int — машинное слово длиною в 16 бит, long двойное машинное слово, т.е. 32 бита. Формат и размер области памяти объектов float и double также зависит от типа используемого компилятора. В данном случае приведены значения для компилятора Си из среды разработки ICC12.

Служебные слово unsigned (без знака) используется вместе с целочисленными типами. Указание служебного слова unsigned перед спецификацией типа целочисленного значения определяет использование его старшего разряда. Для целых чисел со знаком старший разряд используется для хранения знака, что приводит к сужению диапазона модуля допустимых значений. В целых числах без знака старший разряд используется как дополнительный разряд числа, следовательно, диапазон допустимых значений расширяется. По умолчанию, т.е. без указания служебного слова unsigned, переменные типа char, int и long всегда считаются знаковыми. Числа в формате с плавающей запятой типов float и double также всегда знаковые.

В сочетании со спецификацией типа int возможно применение служебного слова short (короткий). Служебное слово short используется для сужения типа int до «короткого» целого. Применение служебного слова short имеет смысл, когда длина машинного слова микроконтроллера составляет четыре и более байтов. В этом случае спецификация типа short int соответствует целому числу, разрядностью в половину машинного слова. В случаях, когда машинное слово составляет два байта, спецификации типов int и short int совпадают (например, в 16-ти разрядном микроконтроллере HCS12). В некоторых компиляторах языка Си разрешается опускать слово int в спецификации типа short int и использовать одно слово short.

Слово long, обозначающее целое число, соответствующее двойному машинному слову, является таким же служебным словом как unsigned и применяется перед спецификацией типа int для его расширения до «длинного» целого (до двойного машинного слова). Однако в языке Си разрешается опускать слово int в спецификации типа long int и использовать одно слово long.

В дополнение к рассмотренным выше основным типам данных в языке Си существуют пять дополнительных типов данных:

• Array — массив, набор элементов одного типа;

• Pointer — указатель, переменная, которая содержит адрес переменной определенного типа;

• Structure — структура, набор элементов различного типа;

• Union — объединение, одна область памяти для двух различных типов данных;

• Function — функция, являясь сама определенным типом данных, может генерировать типы данных и возвращать типы данных.

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

В языке Си в простейшем случае синтаксис определения переменной или какого либо другого объекта данных выглядит так:

<спецификация типа> <идентификатор>

В более сложных случаях указывается также способ доступа к переменной и/или класс ее хранения:

<способ доступа/класс хранения> <спецификация типа> <идентификатор>

При объявлении массива может быть задано число элементов и их значения:

char a[10]

int m[] = {5,10,4000,34}

Первое поле, <способ доступа/класс хранения>, используется для задания типа памяти, куда должна быть помещена переменная. Второе поле, спецификация типа, содержит определение типа из табл. 3.1. Третье поле, идентификатор, содержит в себе придуманное программистом имя переменной. Четвертое поле, в котором проставлено численное значение или строка символов для массива, необязательное. Оно необходимо, если программист в строке объявления переменной желает также задать ее начальное значение, т.е. инициализировать переменную. Ниже приведен пример определения двухбайтовой переменной с именем «change» в целочисленном формате со знаком (тип int в соответствии с табл. 3.1):

int change;

Точка с запятой в конце строки должна быть проставлена обязательно, поскольку она обозначает завершения выражения в тексте программы на Си.

Имя переменной может быть произвольным, но оно не должно совпадать с зарезервированными в языке Си служебными словами:

1 ... 11 12 13 14 15 16 17 18 19 ... 150
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт.
Комментарии