|
Переменная по адресу не кратному 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
|
|
|