реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Структура в Си, Что это такое?
Anjey_N
сообщение Aug 9 2007, 07:30
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Пытался сам понять из книжек что такое структура и зачем она применяется но ничего не понял! Может ли кто-нибудь объяснить зачем она нужна?
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Aug 9 2007, 08:56
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



удобство обращения к данным.

например если надо описать токую сущность как например человек. создаем тип данных "структура", поля которой: имя фамилия пол телефон...
затем можем создать несколько переменных такого... уже нового типа, а не стандартный int float. Создаем пееременную ВАСЯ тип которой вот такач вот структура, описанная мной ранее. Затем МАШу можем создать.

И к Маше и к Васе будет удобно обращаться. Хочешь узнать телефончик Маши не надо ни цветов дарить ни конфет. Все просто:

МАША.phone

smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 9 2007, 09:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(jorikdima @ Aug 9 2007, 11:56) *
удобство обращения к данным.

К перечисленным удобствам следует добавить union-ы.
И главное не забываем про паковку структур и скрытие нюансов обращения к данным не равным разрядности процессора.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zhevak
сообщение Aug 9 2007, 10:04
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



не забываем про удобство копирования структур. smile.gif


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 9 2007, 11:04
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Структура это такая абстракция, которая введена в ЯВУ для того, чтобы человеку было удобно работать с данными. Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.
Преобразовать абстрактные структуры к реальным данным это задача компилятора. Основная проблема при этом возникает при упаковке и выравнивании структур. А все из-за того, что у разных CPU/MCU разные разрядность шины и способ обращения к данным. Например, у большинства 16-ти разрядных CPU нельзя сделать обращение к 16-битному слову по нечетному адресу. Поэтому, если допустим в неупакованной структуре вы опишите две байтовые (8-ми битные) переменные и попытаетесь обратиться к ним как к одной 16-разрядной переменной, то на разных CPU/MCU можете получить различающиеся артефакты. Поэтому не забывайте о выравнивании структур.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 9 2007, 12:14
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Цитата(rezident @ Aug 9 2007, 14:04) *
Самому же процессору/микроконтроллеру структуры по барабану, он работает не с абстракциями, а с реальными адресами/данными.

Хочу уточнить. Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).
Так что чем использовать разрозненные объекты -- я бы склонялся к использованию структур
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 9 2007, 14:35
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(korobov_michael @ Aug 9 2007, 18:14) *
Как раз для АВР его система команд "помогает" компилятору С может сгенерировать очень качественный код при работе со структурами (см. AN035).

Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 9 2007, 20:48
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Цитата(rezident @ Aug 9 2007, 17:35) *
Компилятор Си основывается на системе команд MCU, поэтому не совсем понятен контекст вашей фразы. Помочь компилятору может сам программист. Точнее его стиль написания программы на Си. Если программист пишет, предполагая как бы он писал эту же программу на ASM, то и компилятор сгенерирует код близкий к предполагаемому.

М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 9 2007, 21:18
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(korobov_michael @ Aug 9 2007, 23:48) *
М-да, пожалуй, коряво получилось... Имелось ввиду, что при использовании структуры при последовательном обращении к полям структуры компилятор задействует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров


Не буду Вам возражать. Возможно немного огорчу. smile.gif Если Вы даже и не используете структуру, то компилятор разрозненные данные тоже групирует и также использует косвенный режим адресации со смещением, являющийся частью архитектуры, что и приводит к более оптимальному коду по сравнению с рядом других контроллеров

Хотя это никоим образом не умаляет важность и удобство структур. smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 9 2007, 21:47
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Не хочу чтобы еще и здесь затевались религиозные "войны" типа AVR vs PIC. Просто считаю, что упоминание AVR в контексте данной тематики структур излишнее. Далеко не один только AVR имеет косвенную адресацию wink.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 9 2007, 21:49
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ Aug 10 2007, 00:18) *
Если Вы даже и не используете структуру, то компилятор разрозненные данные тоже групирует...

Точнее может попытатся разобраться с разрозненными даными. И возможно это ему удастся хорошо.
Вопрос только в том зачем усложнять кому-то понимание задачи, если задачу можно просто и без напрягов более четко объяснить.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 07:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016