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

 
 
> проблемы с выравниванием 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
Ответов
zltigo
сообщение Jun 25 2009, 06:19
Сообщение #2


Гуру
******

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



Цитата(dimka76 @ Jun 25 2009, 08:59) *
Последний вариант конечно работоспособный, но может быть есть какие-то более изящные решения?

Или "правильно" писать программы c "правильными" структурами данных. Или не сбивать с толку компилятор и дать ему инфрмацию об объекте с которым он работает. Либо действительно пользоваться memcpy(), котрая разберется с проблемой в online.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Jun 25 2009, 07:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Jun 25 2009, 10:19) *
Либо действительно пользоваться memcpy(), котрая разберется с проблемой в online.


Очень редко у меня возникали случаи когда внутри memcpy появлялся аборт. Так что memcpy не панацея.
Либо не пудрить мозг компилятору, либо писать свою функцию memcpy, которая 100% не допустит аборта.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2009, 10:08
Сообщение #4


Гуру
******

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



Цитата(xelax @ Jun 25 2009, 10:41) *
Очень редко у меня возникали случаи когда внутри memcpy появлялся аборт. Так что memcpy не панацея.

Не говорите глупости. Охотно верю, что Вы копируете неаонятно куда и непонятно откуда и получаете Abort, только выравнивание здесь совсем ни причем - это чисто Ваши ошибки.


Цитата(Сергей Борщ @ Jun 25 2009, 12:41) *
но такое - только ручками.

Такое, и даже большее (при копировании больших массивов) делает хоть сколько нибудь приличное библиотечное memcpy().


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Jun 25 2009, 10:39
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Jun 25 2009, 14:08) *
Не говорите глупости. Охотно верю, что Вы копируете неаонятно куда и непонятно откуда и получаете Abort, только выравнивание здесь совсем ни причем - это чисто Ваши ошибки.


Жаль, что не сохранил дизасм для неверующих. Замена memcpy на цикл с побайтным присваиванием непонятно куда из непонятно откуда чудесным образом всё починило.

P.S. Моя первая реакция на такое чудо была такая же как у Вас на мой пост в теме.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 25 2009, 10:51
Сообщение #6


Гуру
******

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



Цитата(xelax @ Jun 25 2009, 13:39) *
непонятно куда из непонятно откуда чудесным образом всё починило.

Вот и разбирались-бы с непонятками, а memcpy() это, так сказать, святое smile.gif и при этом достаточно простое, дабы уже лет 30 не содержать ошибок ни в одной из реализаций.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Jun 25 2009, 14:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Jun 25 2009, 14:51) *
Вот и разбирались-бы с непонятками, а memcpy() это, так сказать, святое smile.gif и при этом достаточно простое, дабы уже лет 30 не содержать ошибок ни в одной из реализаций.


Согласен, что простое... Я и не утверждаю что в memcpy есть ошибка, уверен что такие вещи сто раз отладили. Я вот что пытаюсь донести. Есть пердположение, что компилятор лепит в проект несколько реализаций данной функции, в зависимости от разрядности копируемых данных(байтное, 2байтное и 4байтное)? И стоит ему потерять (в результате действий программиста) атрибут packed для какой-нибудь структуры и он запросто применит пословное копирование вместо побайтного(имеет полное право на оптимизацию). И тут то и случится abort именно внутри memcpy.

Моё ИМХО, что в общем случае от абортов нельзя защищаться memcpy. Это всего лишь уменьшит вероятность ошибки, но не устранит причину.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2009, 15:05
Сообщение #8


Гуру
******

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



Цитата(xelax @ Jun 25 2009, 18:54) *
Есть пердположение, что компилятор лепит в проект несколько реализаций данной функции, в зависимости от разрядности копируемых данных(байтное, 2байтное и 4байтное)?

Реализация одна. Да и какой смысл делать несколько, если использовать их можно будет только когда оба адреса константны?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimka76   проблемы с выравниванием ARM7   Jun 25 2009, 05:59
|- - dimka76   Цитата(zltigo @ Jun 25 2009, 10:19) Или ...   Jun 25 2009, 06:34
||- - zltigo   Цитата(dimka76 @ Jun 25 2009, 09:34) С ...   Jun 25 2009, 07:21
|- - Сергей Борщ   Цитата(zltigo @ Jun 25 2009, 13:08) Такое...   Jun 25 2009, 10:32
|- - aaarrr   Цитата(xelax @ Jun 25 2009, 14:39) Жаль, ...   Jun 25 2009, 10:43
|- - 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
- - Axel   Это не "проблема", это - факт "нали...   Jun 25 2009, 06:41
|- - Сергей Борщ   Цитата(Axel @ Jun 25 2009, 09:41) перегон...   Jun 25 2009, 07:29
|- - dimka76   Цитата(Сергей Борщ @ Jun 25 2009, 11:29) ...   Jun 25 2009, 08:42
||- - Сергей Борщ   Цитата(dimka76 @ Jun 25 2009, 11:42) но к...   Jun 25 2009, 09:41
|- - VslavX   Цитата(Сергей Борщ @ Jun 25 2009, 10:29) ...   Jun 25 2009, 08:45
- - 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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