aaarrr 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Всё тоже самое нарушено, но на А8 оно по идее работает? Нет, я привожу 123 к типу void * - тут все корректно. Падает в fault, что и требовалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба С А8 может выйти гадание на кисиле, сложный чип, много деталей которые могут повлиять. В норме он разрешает невыравненный доступ и этим пользуется компилятор. Но так будет даже веселей, первое предположение: используете ММУ и у вас в районе нулевого адреса область памяти с нестандартными правами доступа? Этот пример кстати с операционкой? Если да, то с какой? У меня нет по рукой А8, проверьте вот такой вариант, пожалуйста: unsigned int dst[4]; char src[16]; int main(void) { memcpy(dst, (int*)(&src[1]), 8); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба Нет, все же плохой пример. Но и за компилятором есть грех - он предполагает, что невыровненный доступ разрешен, хотя это не обязательно так. Для выровненного источника код такой: ; 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба И как падает или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 14 сентября, 2018 Опубликовано 14 сентября, 2018 · Жалоба И как падает или нет? Ваш пример? Падает. Извиняюсь за задержку, хотел все проверить. На Cortex-A8 невыровненный доступ возможен только при включенном MMU, а в тесте у меня он не был задействован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я :rolleyes: ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете? Но и за компилятором есть грех - он предполагает, что невыровненный доступ разрешен, хотя это не обязательно так. Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации. Именно поэтому все нестандартные вопросы с выравниванием и со всем остальными нюансами железа С/++ скинули на программиста. Хотя в 99% случаев об этом позволительно не думать. Но задача сериализации это тот самый 1%, в котором знать язык и железо нужно чуть лучше чем в среднем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я :rolleyes: ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете? Нет, это просто пример. Готовлю под Linux, но драйверы и загрузчики ведь тоже приходится пилить. Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации. Беда в том, что это не отключается. А со стороны языка пример вполне корректный, тут надо именно приколы компилятора знать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Я бы скорее странным назвал решение АРМ сделавшей невыравненное чтение/запись только при использовании MMU. Хотя и у них наверняка были свои резоны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Я бы скорее странным назвал решение АРМ сделавшей невыравненное чтение/запись только при использовании MMU. Хотя и у них наверняка были свои резоны. Это в любом случае решение ARM, т.к. компилятор тоже их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Afaik там clang и если много приходится писать без MMU наверное имеет смысл сделать форк, в котором отключить это умолчание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Afaik там clang Вы что-то путаете: armcc существовал задолго до clang'а и проприетарен до мозга костей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Они ж его вроде бросили, с 5 что ли версии, если мне изменяет память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Тут не скажу - это четвертый, а дальше я его судьбой не интересовался. Жаль, если бросили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 16 сентября, 2018 Опубликовано 16 сентября, 2018 · Жалоба Жаль, если бросили. Вроде как полностью переключились на 6й 5й пока еще поддерживается, но не обновлялся практически год. Вангую, что скоро он перейдет в разряд т.н. "legacy" ... Мне как однажды пришлось перейти с 5го на 6й, но освоил, привык к полноценному C++11 (в 5й версии он несколько порезанный), и потому обратно уже не хочется :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба В 14.09.2018 в 16:59, aaarrr сказал: Для выровненного источника код такой: А для невыровненного случая будет дополнительная инструкция в dasm? Я правильно понимаю, что ничего даром не даётся?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться