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

 
 
> Указатели, Не понятно
Kesha
сообщение Jan 9 2009, 11:03
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058



Добрый день.
Есть такая строчка в KEIL (usb_hid for ARM) "(BYTE *)pD += pD->bLength;". Решиш перевести это на CrossStudio. При компиляции вылазит ошибка: "invalid lvalue in assignment". Не подскажете, чем её заменить чтобы было всё ок?
А вот структура:
/* USB Common Descriptor */
typedef struct _USB_COMMON_DESCRIPTOR {
BYTE bLength;
BYTE bDescriptorType;
}__attribute__ ((__packed__)) USB_COMMON_DESCRIPTOR;

Указатель на структуру:
USB_COMMON_DESCRIPTOR *pD;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
rvk
сообщение Jan 9 2009, 12:42
Сообщение #2


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



может так :
byte *pD1 = (byte*)pD;
pD1 += pD->bLength;
pD = (USB_COMMON_DESCRIPTOR*)pD1;

Сообщение отредактировал rvk - Jan 9 2009, 12:45
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jan 9 2009, 13:10
Сообщение #3


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Чтобы было всё ОК менять надо явно больше одной строчки.
Указатель-то на структуру, а продвигают его на какое-то количество байт. Нехорошо, ибо зависит от компилятора и его манер обращения со структурами, пусть даже и __attribute__ ((__packed__)).

Формально заменяется на
pD = (USB_COMMON_DESCRIPTOR *) ((BYTE *)pD + pD->bLength);
или
pD += (pD->bLength)/sizeof(USB_COMMON_DESCRIPTOR);

в зависимости от того, что имел в виду автор.

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

BYTE *p;
#define bLength (0)
#define bDescriptorType (1)
BYTE *p;
p += p[bLength];
if( p[bDescriptorType] == ... )

А если уж потребовалось поработать со структурой, то только тогда преобразовывать p в указатель на структуру.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Kesha
сообщение Jan 9 2009, 22:40
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 9-01-09
Пользователь №: 43 058



спсб всем.
Go to the top of the page
 
+Quote Post

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

 


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


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