|
|||||||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[2] суффиксы. Так суффикс "l" или "L" показывает, что литерал должен рассматриваться как принадлежащий к типу long. Суффикс "u" или "U" указывает компилятору, что рассматриваемое целое значение не имеет знака (тип целое без знака). Возможно использовать комбинацию суффиксов. Результат, получаемый при этом, вполне предсказуем. Если константа не может быть соотнесена ни с одним из целых типов, то она рассматривается как double. Чтобы явно указать ее принадлежность к типу float, что кроме прочего экономит память, необходимо воспользоваться суффиксом "f" или "F". Символьные константы (char) записываются в одинарных кавычках типа a и могут быть размещены в переменных типа char. многобайтные символьные константы и переменные не поддерживаются. Строковые литералы (константы) записываются в двойных кавычках, например "мама мыла раму". Строковые константы сохраняются как const char * в ПЗУ. Рассмотрим следующие примеры: char * cp= "one"; const char * ccp = "two"; char ca[]= "two"; В первом случае указатель не const в результате чего будет выведено соответствующее предупреждение. Второй пример совершенно корректен и приведет к формированию в ПЗУ указанной строчки, а доступ к ней можно будет получить посредствам указателя ccp. Последний пример надо рассмотреть особо. Так в этом случае мы хотим получить строковую переменную (строку, размещенную в ОЗУ и позволяющую производить модификации). В этом случае будет создан код, который при запуске программы будет выделять в ОЗУ массив требуемого размера и переносить в него из ПЗУ указанную строку. 2.3 Тип данных - бит Как уже несколько раз отмечалось, операции с битами имеют важное значение и часто используются при программировании микроконтроллеров. Чтобы обеспечить максимальное удобство программиста при решении задач, связанных с манипуляциями отдельными битами, был введен дополнительный тип данных - бит (bit). Переменные этого типа описываются как обычно: static bit over flag; переменные типа бит не могут иметь модификатор auto и не могут передаваться в функцию в качестве аргумента, но функция может возвращать значение типа бит. По большому счету переменные этого типа ведут себя как обычные переменные типа unsigned char, но при этом могут принимать значение 0 или 1. Поэтому их удобно использовать для определения различных логических переменных и флагов. Такой подход значительно экономит оперативную память. Компилятор не позволяет создавать указатели типа бит или статически инициализировать переменные этого типа. Все операции с переменными типа бит выполняются с помощью бит-ориентированных инструкций ассемблера, насколько это вообще возможно, при этом создается очень эффективный и компактный код. Если попытаться присвоить переменной типа бит целое значение, то будет сохранен только младший бит. Если необходимо присвоить переменной типа бит 1 или 0 в зависимости от того равна нулю некоторая переменная или нет, то необходимо использовать следующий код: bitvar = char var != 0; Все переменные этого типа упаковываются таким образом, что 8 переменных займут до одного байта. 2.4 Использование бит-адресуемых регистров Возможность создавать битовые переменные может быть использована, для удобного доступа к отдельным битам служебных регистров. Дело в том, что мы можем описывать переменные с указанием абсолютного адреса: static unsigned char STATUS @ 0x03; При описании битовых переменных с указанием абсолютного адреса необходимо указывать абсолютный номер бита в непрерывном битовом поле, которое образуется из последовательности регистров. Например 3-тий бит в ячейке памяти с адресом 5 будет иметь абсолютный номер равный 5*8+3. Таким образом, если мы хотим эксклюзивно обращаться к биту PD регистра STATUS, то достаточно совершить следующий реверанс: fstatic bit PD @ (unsigned)&STATUS*8 + 3; Справедливости ради, хочу напомнить, что все стандартные регистры и служебные биты уже описаны до нас и за нас в файле заголовка <pic.h>. Лично от себя могу посоветовать использовать для описания подобных вещей следующий макрос: #definePORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) Используя этот скрипт, вы упрощаете себе жизнь и повышаете читабельность ваших программ: fstatic bit PD @ PORTBIT(STATUS, 3); или более жизненный пример: static unsigned char ptKeys @ &PORTB; static bit btLeft @ PORTBIT(ptKeys, 0); static bit btRight @ PORTBIT(ptKeys, 1); static bit btDown @ PORTBIT(ptKeys, 2); static bit btUp @ PORTBIT(ptKeys, 3); 2.58-бит - целые Компилятор PIC C поддерживает символьный тип как с указанием знака так и без. Для микроконтроллеров среднего класса этот тип является основным. По-умолчанию символьный тип (char) считается без учета знака. Чтобы это изменить можно воспользоваться опцией компилятора SIGNEDCHAR. Если использован указанный параметр, то возможно использование целых с учетом знака в диапазоне от -128 до +127 включительно или без учета знака (unsigned) от 0 до 255 включительно. В ламерской среде существует предрассудок, что тип данных char предназначен исключительно для хранения кодов символов ASCII. Но это глубокое заблуждение, тем более теперь, когда повсеместно применяются 16-и битовые кодировки. Реально же тип char это наименьший из существующих целых типов и ничем не отличается от своих больших собратьев. Исторически сложилось так, что на компьютерах, где С получил наибольшее распространение использовались кодировки, для которых тип char был идеальным хранилищем символов. Использовать же его для хранения чисел было не выгодно, так как адресация памяти была как минимум словами (16 бит), да и диапазон маловат для прикладных ПС программ. А вот для контроллера (конкретно того семейства о котором идет речь в этом труде) char - это родной тип и с ним он работает очень эффективно. Так что, если вы планируете использовать С для разработки встроенных систем на базе PIC-контроллеров, то привыкайте использовать тип char как основной. 2.616-бит - целые Для представления 16-и битных данных в PIC C есть 4 типа short, int, unsigned short, unsigned int. Котрые могут вмещать числа из диапазонов от -32768 до 32767 с учетом знака и от 0 до 65535 без учета знака. Как мы видим, в PIC C два типа int и short практически не имеют отличий. Это связано со стремлением соответствовать стандартам. И это очень серьезный довод, тем более что 8-ми битные целые числа поддержаны в полном объеме посредствам типа char, поэтому последний рекомендуется использовать вместо int, где это только возможно. 2.732-бит - целые Компилятор PIC C поддерживает два вид целых 32 битных чисел - long и unsigned long. Они могут содержать числа от -2,147,483,648 до 2,147,483,647 включительно и от 0 до 4,294,967,295 соответственно. В соответствии со стандартом ANSI на язык С, 32 бита - это наименьший размер для типа long. 2.8Числа с плавающей запятой Числа с плавающей запятой реализованы в соответствии со стандартом IEEE 754 (32 бита) и модифицированный IEEE 754 (24 бита). Для представления чисел с плавающей запятой используется два типа float и double. По умолчанию оба типа реализуют урезанный стандарт. Если требуется повышенная точность в вычислениях, то необходимо воспользоваться опцией компилятора -D32. В этом случае для типа double бедет использован полный IEEE 754. В соответствии со стандартом число с плавающей запятой представлено тремя полями (см. табл. 4): •знак - это один бит определяющий знак числа); •показатель степени - это 8-и битное дополнение до 127 показателя степени, если реальный показатель степени равен 0 то в это поле будет записано число 127; •мантисса - это мантисса числа (правая часть от десятичной точки), значащая часть числа с левой стороны от десятичной точки всегда равна 1 за исключением случая, когда само число равно нулю. Индикатором равенства всего числа нулю является равенство нулю показателя степени. Зная чему равны отдельные поля, можно легко расчитать чему равно сохраненное число, воспользовавшись следующей формулой: гт{л \Знак г\ {Показатель степени-127) л Число = { -1) -2Т.мантисса . Несколько примеров записи чисел с плавающей запятой в разных форматах приведены в таблице 5. Таблица 4 Форматы записи чисел с плавающей запятой
Таблица 5 Примеры записи чисел с плавающей запятой
|
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | |||||||||||||||||||||||||||||||