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

 
 
> проблемы с выравниванием 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:07
Сообщение #8


Гуру
******

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



Цитата(xelax @ Jun 25 2009, 18:54) *
Моё ИМХО, что в общем случае от абортов нельзя защищаться memcpy. Это всего лишь уменьшит вероятность ошибки, но не устранит причину.

От абортов вообще нельзя защищаться. Их просто не должно быть.
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
|- - 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
|- - 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 Текстовая версия Сейчас: 24th July 2025 - 12:55
Рейтинг@Mail.ru


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