ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
253276
vmp (12.05.2011 16:00, просмотров: 6664)
Переназначение таблицы векторов (VTOR) у Cortex-M3 (отчет от хождении по граблям). Понадобилось мне как-то в загрузчике для STM32 переназначить таблицу векторов прерываний с нулевого адреса в серединку программы. Выравнивание взял для красоты на 256 байт, посмотрев в документации на ARM формат регистра VTOR (биты 0-6 - резерв, 7-31 - значащие). Все прекрасно работало до тех пор, пока не понадобилось использовать прерывания с большими номерами, типа 55. При возникновении этого прерывания программа слетала в Hard Fault, причем с CFSR.INVSTATE=1 (переход на четный адрес) и адресом возврата = 0. Долгая медитация помогла выяснить, что для исправления достаточно увеличить выравнивание таблицы векторов например до 1 килобайта. По-видимому, для упрощения железа операция вычисления адреса вектора выполняется не как сложение, а как побитовое ИЛИ. Резюме: Будьте внимательны, ставьте большое выравнивание.