|
проблемы с выравниванием ARM7 |
|
|
|
Jun 25 2009, 05:59
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Есть такой код для процессора ARM7 Код char data[256];
void foo(void) { int parametr = 0xAA55BBCC; char* ptr = data;
//если сделать так *((int*)(ptr+1)) = paramtr; // то прцессор вылетет в DataAbort
// можно сделать конечно так memcpy(ptr+1, ¶metr, sizeof(parametr));
} Последний вариант конечно работоспособный, но может быть есть какие-то более изящные решения?
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
 |
Ответов
|
Jun 25 2009, 07:29
|

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

|
Цитата(Axel @ Jun 25 2009, 09:41)  перегонять байты (напрямую или memcpy()) и формировать типы ручками. Зачем же? Существует такое понятие, как упаковка структур: Код #include <stdint.h> uint8_t Buffer[256];
typedef struct __attribute__((packed)) { uint8_t Data1; uint32_t Data2; } answer_t;
void foo(void) {
int parametr = 0xAA55BBCC; answer_t * pAnswer = (answer_t *)Buffer;
pAnswer->Data2 = paramtr; pAnswer->Data1 = 0x12;
} Пример для GCC, для других компиляторов с высокой долей вероятности будет #pragma pack(1)
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
dimka76 проблемы с выравниванием ARM7 Jun 25 2009, 05:59 zltigo Цитата(dimka76 @ Jun 25 2009, 08:59) Посл... Jun 25 2009, 06:19 dimka76 Цитата(zltigo @ Jun 25 2009, 10:19) Или ... Jun 25 2009, 06:34  zltigo Цитата(dimka76 @ Jun 25 2009, 09:34) С ... Jun 25 2009, 07:21 xelax Цитата(zltigo @ Jun 25 2009, 10:19) Либо ... Jun 25 2009, 07:41  zltigo Цитата(xelax @ Jun 25 2009, 10:41) Очень ... Jun 25 2009, 10:08   Сергей Борщ Цитата(zltigo @ Jun 25 2009, 13:08) Такое... Jun 25 2009, 10:32   xelax Цитата(zltigo @ Jun 25 2009, 14:08) Не го... Jun 25 2009, 10:39    aaarrr Цитата(xelax @ Jun 25 2009, 14:39) Жаль, ... Jun 25 2009, 10:43    zltigo Цитата(xelax @ Jun 25 2009, 13:39) непоня... Jun 25 2009, 10:51     xelax Цитата(zltigo @ Jun 25 2009, 14:51) Вот и... Jun 25 2009, 14:54      aaarrr Цитата(xelax @ Jun 25 2009, 18:54) Есть п... Jun 25 2009, 15:05      defunct Цитата(xelax @ Jun 25 2009, 17:54) Моё ИМ... Jun 25 2009, 15:06       xelax Цитата(defunct @ Jun 25 2009, 19:06) Сказ... Jun 25 2009, 15:10        defunct Цитата(xelax @ Jun 25 2009, 18:10) Ткните... Jun 25 2009, 15:13         xelax Цитата(defunct @ Jun 25 2009, 19:13) Цита... Jun 25 2009, 15:45          aaarrr Цитата(xelax @ Jun 25 2009, 19:45) сделал... Jun 25 2009, 15:49           meister Цитата(aaarrr @ Jun 25 2009, 19:49) Ну ды... Jun 25 2009, 16:09            aaarrr Цитата(meister @ Jun 25 2009, 20:09) нужн... Jun 25 2009, 16:12             meister Цитата(aaarrr @ Jun 25 2009, 20:12) Поясн... Jun 25 2009, 16:30          defunct Цитата(xelax @ Jun 25 2009, 18:45) В упор... Jun 25 2009, 17:04      aaarrr Цитата(xelax @ Jun 25 2009, 18:54) Моё ИМ... Jun 25 2009, 15:07      zltigo Цитата(xelax @ Jun 25 2009, 17:54) в зави... Jun 25 2009, 16:56       xelax Цитата(zltigo @ Jun 25 2009, 20:56) 5, 6,... Jun 26 2009, 06:30  dimka76 Цитата(Сергей Борщ @ Jun 25 2009, 11:29) ... Jun 25 2009, 08:42   Сергей Борщ Цитата(dimka76 @ Jun 25 2009, 11:42) но к... Jun 25 2009, 09:41 dimka76 Всем спасибо за ответы.
Тему можно считать закр... Jun 25 2009, 06:57 SasaVitebsk А я выравниваю при получении. В месте получения вс... Jun 25 2009, 10:38 aaarrr Понятно. Ну, это уже дела и проблемы оптимизатора ... Jun 25 2009, 16:37 dimka76 Тут на форуме промелькивала фраза, что Cortex-M3 н... Jun 26 2009, 05:13 aaarrr Цитата(dimka76 @ Jun 26 2009, 09:13) Тут ... Jun 26 2009, 07:37
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|