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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Непонятки с функцией memcpy
Harvester
сообщение Aug 13 2015, 11:21
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(scifi @ Aug 13 2015, 13:40) *
Ничего странного. Просто упаковывают структуру разными способами в зависимости от применяемого компилятора.

ЧТО директивы делают я понимаю, я просто не могу понять смысла их комбинации:
Код
#if defined(__ICCARM__) || defined(__ICCAVR__)
#pragma pack(ALIGNMENT)            // Если IAR - последующие объявления пакуются по ALIGNMENT (4)
#define __attribute__(...) // ??? возможно это отмена ключевого слова attribute - но зачем?
#endif            

#if !defined(__ARMCC_VERSION)
#pragma pack (push, 4)  // Если не ARMCC, снова приказываем паковать по 4 с сохранением текущего уровня упаковки
#endif
typedef struct GOST28147_BCTX_tag {
...
#if defined(__ICCARM__) || defined(__ICCAVR__)
}__attribute__ ((packed)) GOST28147_BCTX, *GOST28147_BCTX_PTR; // Если IAR - используем (отмененное?) ключевое слово
#else
} GOST28147_BCTX, *GOST28147_BCTX_PTR;

#if !defined(__ARMCC_VERSION)
#pragma pack (pop) // Если не ARMCC - возвращаем уровень упаковки
#endif

#if defined(__ICCARM__) || defined(__ICCAVR__)
#pragma pack()             // Если IAR - ставим уровень упаковки по умолчанию
#endif

Т.е. если я правильно разобрал, в случае компилятора IAR явная упаковка указывается 2 раза, а для других компиляторов - ни одного. Наверное, стоит добавить условие упаковки для ARMCC?

Цитата(aaarrr @ Aug 13 2015, 13:58) *
Нет, первое было:
Код
UCHAR RFC4357_KeyUnwrap(GOST28147_BCTX_PTR pX,
                         __packed RFC4357_WRAPPED_KEY_PTR pWrappedKey,
                         PUCHAR pUnwrappingKey,
                         PUCHAR pUnwrappedKey)

Мне кажется, что с точки зрения языка оба объявления тождественны. Но проверю sm.gif

Хм, забавно.
__packed RFC4357_WRAPPED_KEY_PTR pWrappedKey - ничего не дает, а
__packed RFC4357_WRAPPED_KEY *pWrappedKey выдает ошибку "Error: C2510E: Definition of 'struct RFC4357_WRAPPED_KEY_tag' not '__packed': qualifier ignored". Получается, если параметр функции указан как __packed, то тип должен быть упакован явно.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2015, 11:30
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Harvester @ Aug 13 2015, 14:21) *
Получается, если параметр функции указан как __packed, то тип должен быть упакован явно.

Да, не умеет он указатели на "абстрактно" упакованные структуры делать, это только для базовых типов проходит.

Остается или "упаковать" typedef или выровнять структуру.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 13 2015, 11:38
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



указатель, а не структуру предлагаютsm.gif ... но все же учитывая историю со 2 структурой, лучше и первую попаковать при объявлении сразу!

А вообще корректно не пакованную структуру пытаться запихать куда-то как пакованную? Или мы просто хотим чтобы он к ней относился как к пакованной, опять же тоже не есть корректно.... ИМХО
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 13 2015, 11:51
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Golikov A. @ Aug 13 2015, 14:38) *
А вообще корректно не пакованную структуру пытаться запихать куда-то как пакованную? Или мы просто хотим чтобы он к ней относился как к пакованной, опять же тоже не есть корректно.... ИМХО

От структуры зависит. Но раз уж не хочет компилятор делать указатель на упакованную структуру на базе описания не упакованной, то и фиг с ним.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd September 2025 - 03:22
Рейтинг@Mail.ru


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