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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Переменная по адресу не кратному 4 байт.
aaarrr
сообщение Sep 14 2018, 13:23
Сообщение #31


Гуру
******

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



Цитата(Kabdim @ Sep 14 2018, 16:18) *
Всё тоже самое нарушено, но на А8 оно по идее работает?

Нет, я привожу 123 к типу void * - тут все корректно.

Падает в fault, что и требовалось.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 14 2018, 13:36
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



С А8 может выйти гадание на кисиле, сложный чип, много деталей которые могут повлиять. В норме он разрешает невыравненный доступ и этим пользуется компилятор. Но так будет даже веселей, первое предположение: используете ММУ и у вас в районе нулевого адреса область памяти с нестандартными правами доступа?
Этот пример кстати с операционкой? Если да, то с какой?

У меня нет по рукой А8, проверьте вот такой вариант, пожалуйста:
Код
unsigned int dst[4];
char src[16];
  
  int main(void)
  {
      memcpy(dst, (int*)(&src[1]), 8);
  }
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2018, 13:59
Сообщение #33


Гуру
******

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



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

Для выровненного источника код такой:
Код
; generated by ARM C/C++ Compiler, 4.1 [Build 462]
; commandline armcc [--debug -c --asm -omain.o --cpu=Cortex-A8 --fpu=VFPv3 --diag_style=ide --depend_format=unix_escaped --no_depend_system_headers ..\main.c]
        ARM
        REQUIRE8
        PRESERVE8

        AREA ||.text||, CODE, READONLY, ALIGN=2

main PROC
        LDR      r0,|L1.24|
        ADD      r1,r0,#0x11
        LDM      r1,{r1,r2}
        STM      r0,{r1,r2}
        MOV      r0,#0
        BX       lr
        ENDP
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 14 2018, 14:02
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



И как падает или нет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2018, 15:10
Сообщение #35


Гуру
******

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



Цитата(Kabdim @ Sep 14 2018, 17:02) *
И как падает или нет?

Ваш пример? Падает.

Извиняюсь за задержку, хотел все проверить. На Cortex-A8 невыровненный доступ возможен только
при включенном MMU, а в тесте у меня он не был задействован.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 16 2018, 09:27
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я rolleyes.gif ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете?
Цитата(aaarrr @ Sep 14 2018, 16:59) *
Но и за компилятором есть грех - он предполагает, что невыровненный доступ разрешен, хотя это не обязательно так.

Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации. Именно поэтому все нестандартные вопросы с выравниванием и со всем остальными нюансами железа С/++ скинули на программиста. Хотя в 99% случаев об этом позволительно не думать. Но задача сериализации это тот самый 1%, в котором знать язык и железо нужно чуть лучше чем в среднем.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 16 2018, 11:03
Сообщение #37


Гуру
******

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



Цитата(Kabdim @ Sep 16 2018, 12:27) *
Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я rolleyes.gif ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете?

Нет, это просто пример. Готовлю под Linux, но драйверы и загрузчики ведь тоже приходится пилить.

Цитата(Kabdim @ Sep 16 2018, 12:27) *
Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации.

Беда в том, что это не отключается. А со стороны языка пример вполне корректный, тут надо именно приколы компилятора знать.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 16 2018, 13:34
Сообщение #38


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Я бы скорее странным назвал решение АРМ сделавшей невыравненное чтение/запись только при использовании MMU. Хотя и у них наверняка были свои резоны.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 16 2018, 13:35
Сообщение #39


Гуру
******

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



Цитата(Kabdim @ Sep 16 2018, 16:34) *
Я бы скорее странным назвал решение АРМ сделавшей невыравненное чтение/запись только при использовании MMU. Хотя и у них наверняка были свои резоны.

Это в любом случае решение ARM, т.к. компилятор тоже их.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 16 2018, 13:41
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Afaik там clang и если много приходится писать без MMU наверное имеет смысл сделать форк, в котором отключить это умолчание.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 16 2018, 13:51
Сообщение #41


Гуру
******

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



Цитата(Kabdim @ Sep 16 2018, 16:41) *
Afaik там clang

Вы что-то путаете: armcc существовал задолго до clang'а и проприетарен до мозга костей.
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 16 2018, 14:01
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Они ж его вроде бросили, с 5 что ли версии, если мне изменяет память.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 16 2018, 14:10
Сообщение #43


Гуру
******

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



Тут не скажу - это четвертый, а дальше я его судьбой не интересовался. Жаль, если бросили.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 16 2018, 14:28
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(aaarrr @ Sep 16 2018, 17:10) *
Жаль, если бросили.

Вроде как полностью переключились на 6й
5й пока еще поддерживается, но не обновлялся практически год. Вангую, что скоро он перейдет в разряд т.н. "legacy" ...

Мне как однажды пришлось перейти с 5го на 6й, но освоил, привык к полноценному C++11 (в 5й версии он несколько порезанный), и потому обратно уже не хочется sm.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 17:56
Рейтинг@Mail.ru


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