__ unaligned не волшебная пуля, которую вы должны просто начать бросать, когда получаете исключение смещения. Сначала вы должны определить, где в коде произошло это исключение, а затем посмотреть, почему. Вы обращаетесь к указателю, который смещен? Что-то вроде взятия какого-либо байтового массива или буфера с последующей попыткой доступа к данным WORD с нечетной границы или к данным DWORD с адреса, не делимого на 4?
BYTE buffer[256];
....
DWORD d = *(DWORD*)buffer[3];
Или, может быть, у вас есть структура, на которой странная упаковка?
#pragma pack(push, 1)
struct
{
BYTE b;
DWORD d;
} s;
#pragma pack(pop)
Ключ в том, что вы должны делать выравниваемый доступ. x86 позволяет вам осуществлять доступ без выравнивания только потому, что он перехватывает исключение для вас, а затем выполняет второе чтение без выравнивания. Вот краткий учебник , хотя имейте в виду, что это для x86, поэтому он показывает, что процессор "исправляет" смещение за вас. ARM не так простит. Вы должны переставить или собрать данные самостоятельно на ARM.
Скорее всего, вам нужно сделать memcpy для выровненного адреса и использовать данные оттуда, но, не зная ничего о вашем коде, невозможно дать гораздо больше информации.