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

 
 
> проблемы с выравниванием ARM7
dimka76
сообщение Jun 25 2009, 05:59
Сообщение #1


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, &parametr, sizeof(parametr));

}


Последний вариант конечно работоспособный, но может быть есть какие-то более изящные решения?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Axel
сообщение Jun 25 2009, 06:41
Сообщение #2


Местный
***

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



Это не "проблема", это - факт "наличия присутствия" выравнивания. Общая техника в этих случаях - обращаться к переменным по адресам, кратным их (переменных) формату. А если не получается - перегонять байты (напрямую или memcpy()) и формировать типы ручками.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 25 2009, 07:29
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jun 25 2009, 08:45
Сообщение #4


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(Сергей Борщ @ Jun 25 2009, 10:29) *
Пример для GCC, для других компиляторов с высокой долей вероятности будет #pragma pack(1)

GCC 4.x тоже уже поддерживает "#pragma pack" - не так давно был сам приятно удивлен
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 00:39
Рейтинг@Mail.ru


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