|
Переменная по адресу не кратному 4 байт. |
|
|
|
Sep 14 2018, 13:36
|
Знающий
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842
|
С А8 может выйти гадание на кисиле, сложный чип, много деталей которые могут повлиять. В норме он разрешает невыравненный доступ и этим пользуется компилятор. Но так будет даже веселей, первое предположение: используете ММУ и у вас в районе нулевого адреса область памяти с нестандартными правами доступа? Этот пример кстати с операционкой? Если да, то с какой? У меня нет по рукой А8, проверьте вот такой вариант, пожалуйста: Код unsigned int dst[4]; char src[16]; int main(void) { memcpy(dst, (int*)(&src[1]), 8); }
|
|
|
|
|
Sep 14 2018, 13:59
|
Гуру
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 16 2018, 09:27
|
Знающий
Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842
|
Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете? Цитата(aaarrr @ Sep 14 2018, 16:59) Но и за компилятором есть грех - он предполагает, что невыровненный доступ разрешен, хотя это не обязательно так. Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации. Именно поэтому все нестандартные вопросы с выравниванием и со всем остальными нюансами железа С/++ скинули на программиста. Хотя в 99% случаев об этом позволительно не думать. Но задача сериализации это тот самый 1%, в котором знать язык и железо нужно чуть лучше чем в среднем.
|
|
|
|
|
Sep 16 2018, 11:03
|
Гуру
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448
|
Цитата(Kabdim @ Sep 16 2018, 12:27) Получается вы без линукса А8 готовите? Довольно редкий кейс, компилятор (и я ) естественно такого не ожидает. Вы как @мантех только регистры или что-то стороннее реалтаймовое используете? Нет, это просто пример. Готовлю под Linux, но драйверы и загрузчики ведь тоже приходится пилить. Цитата(Kabdim @ Sep 16 2018, 12:27) Выбор у него небогатый. Если не считать выравнивание и другие наиболее применимые найстройки нормой, то в других 99% случаев не получится сделать оптимизации. Беда в том, что это не отключается. А со стороны языка пример вполне корректный, тут надо именно приколы компилятора знать.
|
|
|
|
|
Sep 16 2018, 14:28
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(aaarrr @ Sep 16 2018, 17:10) Жаль, если бросили. Вроде как полностью переключились на 6й5й пока еще поддерживается, но не обновлялся практически год. Вангую, что скоро он перейдет в разряд т.н. "legacy" ... Мне как однажды пришлось перейти с 5го на 6й, но освоил, привык к полноценному C++11 (в 5й версии он несколько порезанный), и потому обратно уже не хочется
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|