ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
577744 Топик полностью
Mikla (05.02.2015 11:09, просмотров: 189) ответил Олдфаг на А расскажите пожалуйста поподробнее для малознакомого с CortexM3, как оно пришло к hardfault. Сам принцип и путь к ошибке. Очень интересно, но непонятно что там творится)
в memcpy использовались указатели на long, компилятор считает что они всегда выравнены на границу 4 байт и заюзал команды LDRD STRD которые не умеют обращаться по невыровненному адресу. указатель был невыровненный, что и привело к hardfault. Причем если сделать memcpy((unsigned char*)to, (unsigned char*)from, 8); нихрена не изменится(оптимизация максимальная). Необходимо чтобы указатели были объявлены как указатели на сhar, тогда keil юзает ldr str.