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

 
 
> структуры в С, копирование в байтовый массив
tolik_zp
сообщение Apr 26 2007, 16:05
Сообщение #1


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

Группа: Участник
Сообщений: 127
Регистрация: 2-08-06
Пользователь №: 19 265



Имеется структура с элементами различных типов и массив типа char
вопрос: как все содержимое структуры скопировать в массив?

попробовал инициализировать указатель типа char на структуру и в цикле переписать - не проходит
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Apr 27 2007, 21:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



К сведению: union - платформозависимая штука и в плане переносимости - большой вопрос.

Второе наблюдение по жизни: простое приведение одного типа указателя к другому это хорошо, если при этом не рарушается требования по выравниванию адресов (что имеет место в случае ARM'ов, например).

Так что в каждом конкретном случае надо сначала подумать, что ты хочешь, чтобы процессор сделал, а потом уже это реализовать с учетом его архитектурных особенностей (мой приятель в институте говорил в таких случаях: поиграем в компьютер, т.е. посмотрим на программу "глазами" компьютера - очень полезно).
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 21:14
Сообщение #3


Гуру
******

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



Цитата(sergeeff @ Apr 27 2007, 21:01) *
К сведению:

К чьему сведению? Это я спрашиваю по причине того, что Ваш пост несколько выбивается из темы и не совсем понятен.
Цитата
union - платформозависимая штука и в плане переносимости - большой вопрос.

Прошу огласить проблемы с зависимостью и непереносимостью.
Цитата
если при этом не рарушается требования по выравниванию адресов (что имеет место в случае ARM'ов, например).

В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 27 2007, 22:27
Сообщение #4


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(zltigo @ Apr 27 2007, 22:14) *
В плане обсуждаемой "проблемы" это не существенно, поскольку начальные адреса структур и массивов всегда выравнены. Про изощренные способы доступа к элементам речь пока не идет.


1. Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают.
2. Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование - хотябы с точки зрения экономии ресурсов и памяти программ (процедура memcpy библиотечная и занимает эн-ое количество байт).
Что мы тут из пустого в порожнее-то, а?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 27 2007, 23:05
Сообщение #5


Гуру
******

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



Цитата(lks @ Apr 27 2007, 22:27) *
Проблемы когда не фсе функции стандарта языка поддерживаются в компиляторах - бывают.

Всему есть предел, те кто не поддерживают чего-то уже не существуют на рынке.
Если есть пример живого компилятора - в студию. Искать его очень просто - у него в прототипе функции memcpy() второй аргумент должен отличаться от (const void *). Я за двадцать с лишним лет таких не встречал.
Цитата
Простое совмещение адресного пространства в памяти - массивов и структур - гораздо красивее и правильнее чем примитивное копирование

Причем здесь красивее/не красивее? Повторяюсь - это две совершенно разные вещи не заменяющие друг друга. Как передача аргумента по значению не лучше/хуже и не красивее/уродливее передачи аргумента по ссылке. Используется то, что нужно в данный момент.
Цитата
Что мы тут из пустого в порожнее-то, а?

Лично я на этом закончил, а разговоры разговаривал исключительно по причине того, что раздел с этой темой называется "В помощь начинающему". И в этом месте мне кажутся особо неуместными мутные повествования о каких-то "некоторых компиляторах" и извращениях.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 08:12
Сообщение #6


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(zltigo @ Apr 28 2007, 00:05) *
Лично я на этом закончил,


Могли бы и не начинать.

to all:

А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель? (пусть даже на для компилятора ИАР).
Я пробовал сделать это на другом компиляторе у меня тоже не получилось.
Умные люди подсказывают что тип указателя должен быть void.
По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 28 2007, 09:56
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(lks @ Apr 28 2007, 12:12) *
А всеже интересно, когда указываете на структуру через амперсанд, какой тип данных должен иметь указатель?

Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"?

Цитата(lks @ Apr 28 2007, 12:12) *
(пусть даже на для компилятора ИАР).

От компилятора тут ничего зависеть не должно - это правила языка, компилятор, если он соответсвует Стандарту, должен выполнять предсказуемые действия. Иначе такой компилятор фтопку.

Цитата(lks @ Apr 28 2007, 12:12) *
Умные люди подсказывают что тип указателя должен быть void.

Как это? Приведите пожалуйста пример?

Цитата(lks @ Apr 28 2007, 12:12) *
По идее в момент инициализации данных можно описать массив указателей типа void и потом амперсанд структуры присвоить первому элементу этого массива.

Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 11:11
Сообщение #8


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(dxp @ Apr 28 2007, 10:56) *
Поясните пожалуйста, что Вы подразумеваете под "указанием на структуру через амперсанд"?
От компилятора тут ничего зависеть не должно - это правила языка, компилятор, если он соответсвует Стандарту, должен выполнять предсказуемые действия. Иначе такой компилятор фтопку.
Как это? Приведите пожалуйста пример?
Что такое "амперсанд структуры"? Это новый термин в языке? Покажите лучше, код, который имеете в виду, возможно, так будет понятнее и однозначее.




unsigned char *ptr;
struct BootSectorStruct
{
unsigned char JmpCmd[3];
unsigned char OEMName[8];
};

struct BootSectorStruct BootSector = {0xEB, 0x00, 0x90, "HaloWrld"};

ptr = &BootSector;
for (i=0;i<11;i++)
{
MMCWRData[i] = *ptr;
ptr++;
}

Хорошо, поясняю.

Значок & - называется амперсанд, или оператор указания.
Когда пишу "амперсанд структуры" - подразумеваю - &BootSector, т.е. получение адреса по которому располагается данные описанные в структуре.
Этот пример кода взят (судя по всему) из учебника - автором темы.
Никто не сомневается что он должен работать.
Автор темы попытался применить его в ИАР компиляторе - результат: не работатет.
Вопрос в том: почему он не работатет и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает.

Так лучше?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 28 2007, 14:01
Сообщение #9


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(lks @ Apr 28 2007, 15:11) *
Значок & - называется амперсанд, или оператор указания.

Неверно. & - это оператор взятия адреса, а не оператор указания.

Цитата(lks @ Apr 28 2007, 15:11) *
Когда пишу "амперсанд структуры" - подразумеваю - &BootSector, т.е. получение адреса по которому располагается данные описанные в структуре.

Какие данные? Все, что-ли?

"Амперсанд структуры" - это совершенно неверная терминология, отсюда и путаница, и вопросы. &BootSector - это адрес структуры (а не амперсанд). Употребляйте правильную терминологию и Вас правильно поймут.

Цитата(lks @ Apr 28 2007, 15:11) *
Этот пример кода взят (судя по всему) из учебника - автором темы.
Никто не сомневается что он должен работать.

unsigned char *ptr = &BootSector (где BootSector - структура), работать не должно и не работает.

Цитата(lks @ Apr 28 2007, 15:11) *
Автор темы попытался применить его в ИАР компиляторе - результат: не работатет.

Потому, что не должен он работать. Ни в каком компиляторе, а не только в IAR.

Цитата(lks @ Apr 28 2007, 15:11) *
Вопрос в том: почему он не работатет

Потому, что в этом выражении возникает элементарная несовместимость типов - нельзя указателю на один тип присваивать адрес объекта другого типа. Потому, что в этом случае работать с указателем будет небезопасно - компилятор, зная тип указателя, будет выполнять действия, пригодные к типу этого указателя, а на самом деле будет работать с объектом совершенно другого типа. Вслепую. Это источник очень гадких и трудноуловимых глюков. Статический контроль типов защищает от этой ситуации. Присваивать указателю void* разрешается потому, что с этим указателем ничего делать нельзя - к объекту не доступиться.

Цитата(lks @ Apr 28 2007, 15:11) *
и развивая мысль дальше - неплохо бы сделать совмещение начала адресов массива и структуры в памяти - тогда необходимость копирования данных из одного места в другое автоматически отпадает.

Глубины этой мысли я асилить не смог. biggrin.gif

Цитата(lks @ Apr 28 2007, 15:11) *
Так лучше?

No comments. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 15:22
Сообщение #10


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(dxp @ Apr 28 2007, 15:01) *
Неверно. & - это оператор взятия адреса, а не оператор указания.


Вот так, да?
Вы меня насмешили.
Тогда указатель на что будет указывать?
Кстати термин не я придумал : Энциклопедия языка Си. Я. Белецкий. М. Мир. Стр 52.

Цитата(dxp @ Apr 28 2007, 15:01) *
&BootSector - это адрес структуры (а не амперсанд). Употребляйте правильную терминологию и Вас правильно поймут.


Вы там это серъезно об этом?
Вот эта хрень "&" - собстно и называется амперсанд.
Так как (всеже) присвоить адрес структуры указателю?


Цитата(dxp @ Apr 28 2007, 15:01) *
нельзя указателю на один тип присваивать адрес объекта другого типа.
Потому, что в этом случае работать с указателем будет небезопасно - компилятор, зная тип указателя, будет выполнять действия, пригодные к типу этого указателя, а на самом деле будет работать с объектом совершенно другого типа.


Ну тогда обясните почему я всегда могу получить адресс массива через амперсанд не зависимо от типа данных, а от структуры не получается.
Я могу привести ссылку где утверждается, что в этом случае возможны ошибки чтения данных (в случае со структурой), и программисту надо быть внимательным.
Т.е. не предполагается что эта функция заблокирована.
Мы говорим о начальном адресе структуры, а не о типе данных.
Вот пример приведен во всех учебниках со структурой - а вы заладили - нельзя, нельзя.



Цитата(dxp @ Apr 28 2007, 15:01) *
Глубины этой мысли я асилить не смог. biggrin.gif
No comments. smile.gif


Чтож тут такого умного?
Полистайте какие-нибудь исходники написанные на языке Си - это типовая операция, вааще-то.
Вам сказать нечего - вот и придумываете разные предлоги.
Нет бы сказали честно - не пишем мы на Си - только на Дэлфи (фортране, или кто на чем).
:-)
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 28 2007, 17:21
Сообщение #11


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(lks @ Apr 28 2007, 19:22) *
Вот так, да?
Вы меня насмешили.
Тогда указатель на что будет указывать?
Кстати термин не я придумал : Энциклопедия языка Си. Я. Белецкий. М. Мир. Стр 52.

Не читайте больше эту книжку. Фтопку ее. Серьезно. Читайте Д.Ричи, Б.Керниган "Язык программирования С".

Цитата(lks @ Apr 28 2007, 19:22) *
Вы там это серъезно об этом?
Вот эта хрень "&" - собстно и называется амперсанд.

Да, эта хрень "&" действительно называется амперсандом. А вот эта хрень &BootSector в языках программирования С/С++ называется адресом объекта.

Цитата(lks @ Apr 28 2007, 19:22) *
Так как (всеже) присвоить адрес структуры указателю?

Код
typedef struct { ... } TBootSector;

TBootSector *p;
TBootSector BootSector;

p = &BootSector;


Если же хочется присвоить адрес структуры указателю на ДРУГОЙ тип, что является потенциально опасным, то это тоже можно сделать, но при этом надо сообщить компилятору, чтобы он не возмущался, что мы делаем эту опасную вещь осознанно. Для этого используется ручное преобразование типа:

Код
char *p;

p = (char*)&BootSector;


Я понятно объясняю? smile.gif

Цитата(lks @ Apr 28 2007, 19:22) *
Ну тогда обясните почему я всегда могу получить адресс массива через амперсанд не зависимо от типа данных, а от структуры не получается.

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

Цитата(lks @ Apr 28 2007, 19:22) *
Вот пример приведен во всех учебниках со структурой - а вы заладили - нельзя, нельзя.
Чтож тут такого умного?

Какой пример? Приведите его сюда, плиз. Со ссылкой на учебник.

Цитата(lks @ Apr 28 2007, 19:22) *
Полистайте какие-нибудь исходники написанные на языке Си - это типовая операция, вааще-то.
Вам сказать нечего - вот и придумываете разные предлоги.
Нет бы сказали честно - не пишем мы на Си - только на Дэлфи (фортране, или кто на чем).
:-)

Я уже много всякого полистал насчет и С, и С++, не надо меня отсылать. Не хочу показаться невежливым, но приходится констатировать факт, что Вы не знаете элементарных вещей из ЯП С и, что самое плохое (для Вас) и неприятное (для меня), упорствуете в этом невежестве.

P.S. Дельфи и фортран я почти не знаю, никогда на них ничего серьезного не писал. На Си действительно уже давно не пишу, все больше на С++, но в обсуждаемых аспектах эти языка почти совершенно одинаковы.

P.P.S. Что-то я утомился и желание вести эту дискуссию (в тоне последней Вашей фразы) у меня пропало. Всего Вам хорошего.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 28 2007, 22:26
Сообщение #12


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(dxp @ Apr 28 2007, 18:21) *
Какой пример? Приведите его сюда, плиз. Со ссылкой на учебник.


Еще один пример.

struct S {...}s;
struct S *ps;
ps=&s;

Программирование в среде Си для ПЭВМ ЕС. авторы. Стр 125.
Тоже в топку?


Цитата(rezident @ Apr 28 2007, 23:19) *
А что у вас в "такой конструкции" вызывает удивление?


Непонятно пока где описать этот тип данных - TBootSector *p;
Этот адрес потом непереписать в обычный указатель?
Ну и как на эту "баламутину" отреагирует Keil допустим.

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

Сообщение отредактировал lks - Apr 28 2007, 22:40
Go to the top of the page
 
+Quote Post
Legotron
сообщение Apr 28 2007, 22:58
Сообщение #13


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(lks @ Apr 28 2007, 23:26) *
И все же читал где-то, сейчас не могу вспомнить, не должно быть запрета на получение адреса структуры. Указатель на структуру должен быть всеже адресом первого байта в выделенном адресном пространстве, точно также как и в массивах - тип тут ни при чем.
Тут что-то с компиляторами.

Я делал когда-то таким образом:
Был массив, который представлял собой файл EMF формата. Там структуры записаны.
У меня было несколько разных типов структур и 1 указатель, который я каждый раз приводил к типу той структуры, которая мне нужна. И получал доступ к их полям. Тока с упаковкой структур (надо/ненадо) нужно быть внимательнее.
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 29 2007, 14:26
Сообщение #14


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(Legotron @ Apr 28 2007, 23:58) *
Я делал когда-то таким образом:
Был массив, который представлял собой файл EMF формата. Там структуры записаны.
У меня было несколько разных типов структур и 1 указатель, который я каждый раз приводил к типу той структуры, которая мне нужна. И получал доступ к их полям. Тока с упаковкой структур (надо/ненадо) нужно быть внимательнее.


Возможно, что это и вариант. Непонял пока.
Тут вопрос у меня очень похож - как у автора этой темы.
В корневом каталоге SD - FAT16 дискрипторы файлов по 32 байта.
Читаем данные секторами по 512 в буфер.
Само собой напрашивается путь чтобы таскать структуру с описанием переменных (дискриптор) - по буферу. Что-то вроде маски должно получиться.
По идее, нужно адрес байта в массиве - который легко извлекается - &BUFFER[i]; - присвоить началу структуры. Даже с получением адреса начала структуры проблемы нарисовались.
Пока не получилось.


Цитата(rezident @ Apr 29 2007, 01:35) *
Извините, но я не понимаю термина "обычный указатель".


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


Цитата(rezident @ Apr 29 2007, 01:35) *
Если минимальная адресуемая единица байт, то да - указатель на структуру будет указывать на первый байт структуры.
Неужели вы до сих пор не поняли/не осознали? blink.gif


Что я не понял/ не осознал?

Цитата(rezident @ Apr 29 2007, 01:35) *
Например, про детский мяч можно сказать что он:
- круглый (описание формы)
- даже шарообразный (описание формы)
- красного цвета (описание цвета)
- с двумя синими полосками (описание цвета)
- упругий (описание реакции на внешнее воздействие)
- резиновый (описание материала)
- не тонет в воде (описание плотности)
и т.п.


Вы блещете интеллектом, мне прямо не удобно...


Цитата(rezident @ Apr 29 2007, 01:35) *
Вам до сих пор еще не понятно?


Что мне еще до сих пор не понятно?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 29 2007, 15:29
Сообщение #15


Гуру
******

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



Цитата(lks @ Apr 29 2007, 14:26) *
Возможно, что это и вариант. Непонял пока.

Слава Богу, что хоть зародилась мысль, что что-то "Непонял", а то до этого момента складывалось впечатление, что просто какой-то мессия удостоил нас своим присутсутствием smile.gif. С попыткой встать на путь истинный, Вас!
Цитата
Читаем данные секторами по 512 в буфер.
Само собой напрашивается путь чтобы таскать структуру с описанием переменных (дискриптор) - по буферу. Что-то вроде маски должно получиться.
По идее, нужно адрес байта в массиве - который легко извлекается - &BUFFER[i]; - присвоить началу структуры.

Подсказка - байты не нужны. Массивы могут быть не только байтовые, но массивами структур.
Цитата
Когда вы извлекаете адрес переменной с помощью оператора амперсанд - вы получаете адрес переменной. Вы знаете тип переменной?

Прочитайте медленно и по слогам, что писал, например, dxp по поводу указателя на void.
Преред этим постарайтесь забыть, что Вы "опытный программист" на усеченном (стуктуры данных явно не использовали sad.gif )диалекте ASM под исключительно 8bit, контроллеры.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 29 2007, 15:49
Сообщение #16


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(zltigo @ Apr 29 2007, 16:29) *
Подсказка - байты не нужны. Массивы могут быть не только байтовые, но массивами структур.


Могут, могут. А память где для них брать?
Чтобы загрузить структуру предлагаете memcpy, а место в памяти пргограмм где взять?
Меня этот путь не устраивает.

Цитата(zltigo @ Apr 29 2007, 16:29) *
Прочитайте медленно и по слогам, что писал, например, dxp по поводу указателя на void.
Преред этим постарайтесь забыть, что Вы "опытный программист" на усеченном (стуктуры данных явно не использовали sad.gif )диалекте ASM под исключительно 8bit, контроллеры.


Я месяца полтора назад в Keil-е все это уже попробовал.
Структура у меня заполняется данными замечательно из буфера по указателю, но только когда я указывал на переменную внутри структуры. Это понятно?

Пример:
struct S{...}s;
struct S* ps;
ps=&s;
не работатет, хотя должен.
Я действительно программы пишу много и давно, только я не преподаватель информатики, я реальные вещи делаю, на реальном "железе". Общетеоретические иссенуации меня не интересуют.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 29 2007, 18:02
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Ладно, я еще поприкалываюсь
Цитата(lks @ Apr 29 2007, 14:49) *
Могут, могут. А память где для них брать?
Там же, где вы собираетесь брать ее для байтового массива. Или вы думаете, что байтовый массив занимает меньше места чем структура такого же размера? cranky.gif
Цитата(lks @ Apr 29 2007, 14:49) *
Чтобы загрузить структуру предлагаете memcpy, а место в памяти пргограмм где взять?
"Есть у нас студент, фамилия у него Горидзе, зовут его Авас, а доцент тупой". Переведите термин "загрузить структуру". zltigo предлагает использовать memcpy для КОПИРОВАНИЯ СОДЕРЖИМОГО СТРУКТУРЫ В БАЙТОВЫЙ МАССИВ, что собственно и спрашивалось в первом вопросе.
Цитата(lks @ Apr 29 2007, 14:49) *
Меня этот путь не устраивает.
Я месяца полтора назад в Keil-е все это уже попробовал.
Структура у меня заполняется данными замечательно из буфера по указателю, но только когда я указывал на переменную внутри структуры. Это понятно?
Если вы не умеете что-либо делать, то это не значит что это сделать невозможно и не нужно.
Цитата(lks @ Apr 29 2007, 14:49) *
Пример:
struct S{...}s;
struct S* ps;
ps=&s;
не работатет, хотя должен.
Работает, как и должен.
Код
    47          struct S{
     48              uint8_t i;

   \                                 In segment NEAR_Z, align 1, keep-with-next
   \   00000000                      REQUIRE `?<Segment init: NEAR_Z>`
     49          }s;
     50          struct S* ps;
   \                     ps:
   \   00000000                      DS 2
   \                     s:
   \   00000002                      DS 1

   \                                 In segment CODE, align 2, keep-with-next
     51          void Test()
   \                     ??Test:
     52          {
     53              ps = &s;
   \   00000000   ....               LDI     R16, LOW((ps + 2))
   \   00000002   ....               LDI     R17, (ps + 2) >> 8
   \   00000004   ....               LDI     R30, LOW(ps)
   \   00000006   ....               LDI     R31, (ps) >> 8
   \   00000008   8300               ST      Z, R16
   \   0000000A   8311               STD     Z+1, R17
     54              ps->i = 2;
   \   0000000C   E002               LDI     R16, 2
   \   0000000E   8302               STD     Z+2, R16
     55          }
   \   00000010   9508               RET
Цитата(lks @ Apr 29 2007, 14:49) *
Я действительно программы пишу много и давно, только я не преподаватель информатики, я реальные вещи делаю, на реальном "железе". Общетеоретические иссенуации меня не интересуют.
Прекрасно. Продолжайте вещи делать, только не лезьте теоретизировать о вещах, в которых понятия не имеете. Это уже не первое обсуждение, где вам указывают на ваше невежество.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
lks
сообщение Apr 29 2007, 19:24
Сообщение #18


Местный
***

Группа: Новичок
Сообщений: 493
Регистрация: 18-06-06
Пользователь №: 18 143



Цитата(Сергей Борщ @ Apr 29 2007, 19:02) *
Ладно, я еще поприкалываюсь


В чем прикол то?
Что тоже педагог?
Откуда вас тут столько набежало?
Педагоги-теоретики достали своей тупостью!


Цитата(Сергей Борщ @ Apr 29 2007, 19:02) *
Продолжайте вещи делать, только не лезьте теоретизировать о вещах, в которых понятия не имеете. Это уже не первое обсуждение, где вам указывают на ваше невежество.


Мне постоянно пытаются разные умники (вроде вас) указывать на что нибудь!
Тут скопляется ужастное количество лингвистов всех мастей - понятия не имеющих о реальных вещах.
А еще других пытаются учить.
Найдут какой-нибудь учебник - мусолят его, мусолят...
А потом умное лицо начинают делать..
Других людей жизни учить...
Спросишь по теме что-нибудь - одни вопли в ответ - типа: "почему не по учебнику спросил".
Учебник я и сам могу прочитать.

По вопросу того индикатора ЖКИ (которым вы меня попрекаете) - мне влом было искать тогда для вас этот ДШ.
Вам он всеравно не нужен был.
Одна болтовня потому-что.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- tolik_zp   структуры в С   Apr 26 2007, 16:05
- - o-henry   код в студию   Apr 26 2007, 16:10
|- - tolik_zp   Цитата(o-henry @ Apr 26 2007, 16:10)...   Apr 26 2007, 16:16
|- - o-henry   а приведение типов кто делать будет? ptr = (char*...   Apr 26 2007, 16:30
|- - dxp   Цитата(tolik_zp @ Apr 26 2007, 20:16) вот...   Apr 26 2007, 16:32
|- - lks   Попробуйте указать на переменную JmpCmd - т.е. ам...   Apr 26 2007, 20:30
|- - Сергей Борщ   Цитата(lks @ Apr 26 2007, 19:30) Попробуй...   Apr 26 2007, 22:25
||- - lks   Цитата(Сергей Борщ @ Apr 26 2007, 23:25) ...   Apr 26 2007, 23:10
||- - Сергей Борщ   Цитата(lks @ Apr 26 2007, 22:10) Вопрос г...   Apr 27 2007, 00:52
|- - zltigo   Цитата(lks @ Apr 26 2007, 20:30) а на пер...   Apr 26 2007, 23:19
- - v_shamaev   Цитата(tolik_zp @ Apr 26 2007, 17:05) Име...   Apr 26 2007, 16:10
- - zltigo   Цитата(tolik_zp @ Apr 26 2007, 16:05) поп...   Apr 26 2007, 16:16
- - rezident   Об чем сыр-бор? Явное приведение типов всяко лучше...   Apr 27 2007, 01:40
|- - tolik_zp   всем спасибо, работает. век живи - век rtfm   Apr 27 2007, 12:23
|- - lks   Цитата(tolik_zp @ Apr 27 2007, 13:23) все...   Apr 27 2007, 18:45
|- - zltigo   Цитата(lks @ Apr 27 2007, 18:45) Приведит...   Apr 27 2007, 18:57
|- - lks   Цитата(zltigo @ Apr 27 2007, 19:57) Для с...   Apr 27 2007, 19:53
|- - zltigo   Цитата(lks @ Apr 27 2007, 19:53) Ну может...   Apr 27 2007, 20:06
|- - o-henry   Цитата(lks @ Apr 28 2007, 10:11) Этот при...   Apr 28 2007, 11:53
||- - lks   Цитата(o-henry @ Apr 28 2007, 12:53)...   Apr 28 2007, 12:58
||- - Сергей Борщ   Цитата(lks @ Apr 28 2007, 11:58) Может ну...   Apr 28 2007, 13:28
|- - zltigo   Цитата(lks @ Apr 28 2007, 11:11) Никто не...   Apr 28 2007, 12:09
|- - Сергей Борщ   Цитата(lks @ Apr 28 2007, 10:11) Вопрос в...   Apr 28 2007, 12:46
||- - lks   Цитата(dxp @ Apr 28 2007, 18:21) P.P.S. Ч...   Apr 28 2007, 21:34
|||- - rezident   Цитата(lks @ Apr 29 2007, 00:34) typedef ...   Apr 28 2007, 22:19
||||- - zltigo   Цитата(lks @ Apr 29 2007, 19:24) Что тоже...   Apr 29 2007, 19:36
|||||- - lks   Цитата(zltigo @ Apr 29 2007, 20:36) Блеск...   Apr 29 2007, 19:46
|||||- - zltigo   Цитата(lks @ Apr 29 2007, 19:46) Да нет, ...   Apr 29 2007, 20:01
||||- - Сергей Борщ   Цитата(lks @ Apr 29 2007, 19:24) В чем пр...   Apr 29 2007, 21:03
||||- - lks   Цитата(Сергей Борщ @ Apr 29 2007, 22:03) ...   Apr 29 2007, 21:31
||||- - zltigo   Цитата(lks @ Apr 29 2007, 21:31) книжку п...   Apr 29 2007, 21:41
||||- - lks   Цитата(zltigo @ Apr 29 2007, 22:41) За яз...   Apr 29 2007, 21:50
||||- - zltigo   Цитата(lks @ Apr 29 2007, 21:50) А что вы...   Apr 29 2007, 22:04
||||- - Legotron   Уважаемые собеседники! Не составит ли вам бол...   Apr 29 2007, 22:36
||||- - zltigo   Цитата(Legotron @ Apr 29 2007, 22:36) еще...   Apr 29 2007, 22:56
|||- - Legotron   Цитата(Legotron @ Apr 28 2007, 23:58) У м...   Apr 29 2007, 15:44
|||- - zltigo   Цитата(Legotron @ Apr 29 2007, 15:44) Ptr...   Apr 29 2007, 15:54
|||- - Legotron   Цитата(zltigo @ Apr 29 2007, 16:51) ...   Apr 29 2007, 15:56
|||- - zltigo   Цитата(Legotron @ Apr 29 2007, 15:56) why...   Apr 29 2007, 16:06
|||- - Legotron   Цитата(zltigo @ Apr 29 2007, 17:06) Потом...   Apr 29 2007, 16:23
||- - rezident   Цитата(lks @ Apr 29 2007, 01:26) Непонятн...   Apr 29 2007, 00:35
|- - rezident   Цитата(lks @ Apr 28 2007, 18:22) Ну тогда...   Apr 28 2007, 17:48
- - o-henry   Уважаемый tolik_zp! На Ваш вопрос Вы уже полу...   Apr 28 2007, 15:40
|- - lks   Цитата(o-henry @ Apr 28 2007, 16:40)...   Apr 28 2007, 15:47
|- - zltigo   Цитата(lks @ Apr 28 2007, 15:47) А я не н...   Apr 28 2007, 15:57
|- - lks   Цитата(zltigo @ Apr 28 2007, 16:57) Тем х...   Apr 28 2007, 16:58
|- - zltigo   Цитата(lks @ Apr 28 2007, 16:58) По сущес...   Apr 28 2007, 17:10
- - Vladimir Chekin   Дежа-вю... Юзер: - Я решил сварить яйцо в микровол...   Apr 28 2007, 19:00
- - rezident   Цитата(Vladimir Chekin)Написать или заказать напис...   Apr 28 2007, 19:04
- - rezident   Цитата(lks)Когда вы извлекаете адрес переменной с ...   Apr 29 2007, 15:21
|- - lks   Цитата(rezident @ Apr 29 2007, 16:21) Ну ...   Apr 29 2007, 16:43
|- - rezident   Цитата(lks @ Apr 29 2007, 19:34) Если я н...   Apr 29 2007, 16:49
|- - zltigo   Цитата(lks @ Apr 29 2007, 16:34) Если я н...   Apr 29 2007, 17:10
|- - lks   Цитата(zltigo @ Apr 29 2007, 18:10) Для т...   Apr 29 2007, 17:25
|- - zltigo   Цитата(lks @ Apr 29 2007, 17:25) Список -...   Apr 29 2007, 17:47
- - forever failure   Неужели Дохтур Туамосес ?   Apr 29 2007, 19:35
- - Vladimir Chekin   rezident >> У вас есть адрес Доктора ТуамОс...   Apr 30 2007, 03:24
- - Vladimir Chekin   Может и не в кассу, имхо вот в этой короткой фразе...   Apr 30 2007, 04:28
- - zltigo   Цитата(Vladimir Chekin @ Apr 30 2007, 04...   Apr 30 2007, 13:30
- - Dog Pawlowa   Цитата(zltigo @ Apr 30 2007, 13:30) Описа...   Apr 30 2007, 17:16
- - zltigo   Цитата(Dog Pawlowa @ Apr 30 2007, 17:16) ...   Apr 30 2007, 17:28


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

 


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


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