ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
1021096 Топик полностью
йцyкeн (26.07.2020 14:40, просмотров: 596) ответил 3m на Вы заблудились в сферических абстрацкиях в ваккуме (возможно вместе с компиляторописателями). В данном случае мы работаем на процессоре M3 который УМЕЕТ делать unaligned access. Поэтому если компилятор знает что генерит код для M3 то никакого undefined behavior при невыровненном указателе на ЭТОЙ архитектуре нет - корректное исполнение обеспечит hardware.
К сожалению, я не пользуюсь Кейлом, поэтому про Кейл ничего не скажу, но эксперименты с ИАРом показали следующее: во-первых, в ИАРе воспроизвести эту ошибку не удалось. ИАР заменяет memcpy на __aeabi_memcpy4, если адреса выронены, и на __aeabi_memcpy, если не выровнены. Если для невыровненных адресов написать __aeabi_memcpy4 ручками, хардфолт происходит, и здесь нет никакой мистики: __aeabi_memcpy4 использует инструкции LDM и STM, для которых CM3 как раз не умеет делать 

unaligned access.

Загадка, не нашедшая ответа - Гудвин утверждает, что при пошаговом исполнении хардфолта нет.