Применение typedef, struct и union


Полезные описания переменных

Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать.

Полезные ссылки

Взято и переработано с сайта
http://www.butovo.com/~zss/cpp/struct.htm
http://cppstudio.com/post/9172/

Синтаксис структур.

Структуры в языке С аналогичны массиву тесно связанных атрибутов. Однако, в отличие от массива, структура позволяет иметь смешанные атрибуты различных типов данных.
Структура создается при помощи ключевого слова struct, за которым следует имя_типа (имя структуры) и список элементов. Описание структуры заканчивается точкой с запятой, т.к. оно является оператором:

Пример описания структуры:

Эта структура описывает новый тип данных stboat и содержит три текстовых поля, одно целое и одно действительное.
С описанной структурой не связывается никакая переменная. Для создания новой переменной используется оператор (слово struct является необязательным):

Для вышеприведенного примера можно создать переменную used_boat:

Если со структурой связывается только одна переменная, то ее можно объявить непосредственно в описании структуры перед точкой с запятой. Имя_типа в этом случае можно опустить:

Доступ к элементам структуры.

Для обращения к отдельным элементам структуры используется операция обращения к члену структуры – “точка”. Она разделяет имя структурной переменной и имя поля, например

Элементы структуры обрабатываются также, как и любые другие переменные С, необходимо только использовать операцию “точка”.
Можно создавать массивы структур и указатели на структуру, для обращения к элементам структуры предусмотрен оператор “->” (стрелка, он состоит из знаков минус и больше).

Передача структур в функции.

В функцию информация о структуре может передаваться как по значению, так и по ссылке. В первом случае в функцию передается копия структуры, что может снизить эффективность программы.
При передаче по ссылке копирование не выполняется, однако функция получает доступ к элементам структуры и может их изменять.
Можно также использовать указатели на структуру.

Структуры и битовые поля.

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

В таких структурах можно использовать только целочисленные типы:

Объединения.

Объединения – еще один тип данных, которые можно использовать различным образом. К примеру, некоторые данные в одном случае могут рассматриваться как целые, а в другом – как числа с плавающей точкой. По виду объединения напоминают структуры. Объединение тоже содержит несколько типов данных, однако эти данные занимают одну и ту же область памяти.
В структурах описанные данные располагаются последовательно в памяти, а в объединениях они наложены друг на друга.
Например? структура:

Будет располагаться в памяти последовательно

номер байта название переменной тип
байт 0 tipe[0] char
байт 1 tipe[1] char
байт 2 title char
байт 3 year int
байт 4

В объединении, например:

расположение переменных в памяти, типа наложение

номер байта переменная c invalue fvalue
байт 0
байт 1
байт 1
байт 2

Переменная с будет иметь значение младшего байта переменных invalue и fvalue…

Объединение создается при помощи ключевого слова union:

К членам объединения можно обращаться так же, как и к членам структур, либо через операцию “точка”, либо через операцию “->” – для указателей:

Вариант объединения структур

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

в этом варианте, компилятор XC16 v 1.26 разместил данные long с байта 4

Дополнительные средства (typedef и enum).

При помощи оператора typedef можно связать новые типы данных с существующими:

После такого описания можно использовать real вместо double.
Использовать typedef необходимо с осторожностью. Слишком много новых типов могут ухудшить читаемость программы.
Перечисляемый тип данных enum позволяет определить список последовательных целых чисел, каждое из которых имеет собственное имя. Объявление перечисляемого типа выглядит следующим образом:

Здесь имя1, имя2,… – это имена констант. Им можно присваивать целочисленные значения. Если значения отсутствуют, то предполагается, что они последовательно увеличиваются на единицу, начинаясь с нуля. Память под эти константы во время выполнения не выделяется, поэтому удобно использовать этот оператор для создания констант, если не указывать имя_типа и переменную:

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

Поскольку имена эквивалентны последовательным целым значениям, то с ними можно выполнять арифметические операции. Фактически в данном примере переменной current_month присваивается целочисленное значение 12.

Создание внешних переменных которые должны быть доступны из подключаемых библиотек

Например есть библиотека spi.h, в ней необходимо описать объединение и сделать так чтобы она была доступна в основной программе

В самом файле где предстоит использовать надо описать

дополнение возможно…



Это может быть интересно


  • Интерактивные LedИнтерактивные Led
    Тема проекта   продолжение следует…. Это может быть интересно Метки:LED
  • MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
    Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на  Cи для емкостной сенсорной кнопки, датчика приближения и слайдера. В записи нет …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики Диапазон измерения …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Плата в корпусе Датчики температуры DS18B20 Схема подключения Вывод данных на ПК Установка дополнительных резисторов Назначение выводов This jQuery slider was created with the free EasyRotator for WordPress plugin from …
  • Moving average – скользящее среднееMoving average – скользящее среднее
    Скользящая средняя, скользящее среднее (англ. moving average, MA) — общее название для семейства функций, значения которых в каждой точке определения равны среднему значению исходной функции за предыдущий период. Скользящие средние обычно используются с данными временных рядов для сглаживания краткосрочных колебаний …
  • LCD индикаторы на драйвере ML1001LCD индикаторы на драйвере ML1001
     ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. Описание драйвера  …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить в работе …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, добавим выход …
  • ch-светомузыка и AK4113ch-светомузыка и AK4113
    Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это такое, так …
  • Простой цифровой милливольтметр постоянного токаПростой цифровой милливольтметр постоянного тока
    Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля и времени реакции на …



В записи нет меток.

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.