|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[3] Необходимо запомнить, что самый старший бит мантиссы (бит, который рсположен слева от десятичной точки) не сохраняется и считается равным 1, кроме случая, когда показатель степени равен нулю, что означает, что все чило равно нулю. 2.9 Статические переменные Глобальные или статические переменные могут располагаться по абсолютному адресу. Для этого в описании переменной используется специальная конструкция "@ <адрес>". Например: [[volatile unsigned char Portvar @ 0x06; Такое описание дает возможность обращаться к абсолютному адресу 0х06 посредствам переменной Portvar. Надо учитывать, что в этом случае компилятор не резервирует память под размещение этой переменной. С точки зрения ассемблера это описание выглядит следующим образом: I Portvar equ 06h Запомните, что ни компилятор ни компоновщик не производят никаких проверок на счет перекрытия абсолютных переменных. Другими словами, ответственность за правильное размещение абсолютных переменных полностью ложиться на плечи программиста. Основной целью данной конструкции является дать возможность напрямую связывать служебные регистры контроллера с переменными. Чтобы разместить переменные, описанные пользователем, по абсолютным адресам, необходимо поместить их в одну секцию и указать компоновщик разместить эту секцию по определенному адресу. Подробнее смотрите описание директивы #pragma psect. 3 Структурные типы данных и строки 3.1Структуры и строки HI-TECH C поддерживает структурные типы данных struct и union любого размера от одного байта и более, но не стоит забывать и о физических размерах доступной памяти. Переменные структурного типа могут быть переданы в качестве аргумента в функцию и возвращены ей в качестве результата. Позволю себе заметить, что, в соответствии со стандартом, аргументы передаются в функцию по значению, то есть намного гуманнее по отношению к объему кода и расходу памяти передавать не сами структуры а указатели (ссылки) на них. Тем более, что PIC C полностью поддерживает указатели на структурные типы. 3.2Битовые поля Внутри структурных типов могут быть организованы, так называемые, битовые поля. Такое поле начинается с младшего бита того слова в котором оно будет размещаться. Битовые поля размещаются внутри 8-ми битных слов. Если поле не удается разместить в текущем байте структуры, то размещение продолжается в следующем байте. Битовые поля никогда не пересекают границу между 8-ми битовыми областями, выделенными для данной структуры. Например: struct { unsigned hi : 1; unsigned dummy : 6; unsigned lo : 1; } foo @ 0x10; В данном случае структура будет занимать один байт по адресу 0х10. При этом поле hi будет соответствовать нулевому биту, а lo - 7-му биту регистра по адресу 0х10. Младший бит поля dummy будет располагаться в первом, а старший - в 6-м битах регистра 0х10. Если структура описана как показано выше, то она будет размещена по абсолютному адресу и память под ее размещение выделяться не будет. Если необходимо определить битовое поле, которое содержит неиспользуемые области, то можно указать безымянные поля: struct { unsigned hi : 1; unsigned : 6; unsigned lo : 1; } foo @ 0x10; 3.3 Строки в ОЗУ и ПЗУ Анонимные неизменные строки (строковые литералы) всегда располагаются в ПЗУ и могут быть доступны только через const-указатели. В следующем примере строка "Мама мыла раму" является строковой константой и размещена в ПЗУ. Поэтому к ней можно обращаться только через константный указатель: #define MATHER "Мама мыла раму" SendBuff(MATHER); Массивы переменных (в том числе изменяемые строки) должны быть проинициализированы как в следующем примере: char fred[] = "Мама мыла раму"; В этом случае мы получаем массив в ОЗУ. Этот массив инициализируется строкой "Мама мыла раму" при запуске программы. Образец строки хранится в ПЗУ. Анонимные неизменные строки в другом контексте будут квалифицированы как константы и доступны непосредственно в ПЗУ. Если необходимо передать строку в качестве аргумента функции, или сослаться на нее с помощью указателя, то указатель должен быть описан как const char *: void SendBuff(const char * ptr) { В этом случае вы вольны передавать в качестве аргумента как указатель на строку в ПЗУ, так и на строку в ОЗУ. Данные будут корректно обработаны в обоих случаях. |
Среды: 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 | ||