Заполните стертую память чем-то вроде assert (false) на ARM Cortex-M4 - PullRequest
0 голосов
/ 21 сентября 2019

Я работаю над проектом, в котором часть прошивки будет удалена до того, как продукт покинет завод.У нас есть команда, чтобы стереть эту фабричную функциональность.Никакие вызовы никогда не должны быть сделаны в это фабричное пространство без предварительной проверки статуса фабричной области, чтобы удостовериться, что это не повреждено.Но если мы допустим ошибку и сделаем каким-либо образом вызов одной из этих заводских функций без предварительной проверки, я бы хотел, чтобы прошивка была сброшена очень очевидным образом.

Я провел небольшой тест, и если я вызываю функциюкоторый существует в этом ограниченном пространстве после того, как он был стерт (так, переход к 0xFFFF FFFF FFFF FFFF), это приводит к сбросу блокировки на моем микроконтроллере, что приятно.Но если возможно, я бы хотел пойти дальше.

Мой процессор - EFM32 Wonder Gecko , который использует расширенный набор команд Thumb-2 Extended.Поэтому я думаю, что смогу заполнить память повторяющимся шаблоном из четырех 16-битных инструкций.Это правильно?Если да, какие есть хорошие варианты того, что я могу сделать с этими четырьмя инструкциями?

1 Ответ

1 голос
/ 24 сентября 2019

Инструкция, которую вы ищете: UDF, Постоянно не определена.Подробности смотрите в Справочном руководстве по архитектуре ARM v7-M.Это подмножество кодировки SVC.

Кодировка T1: b1101_1110_xxxx_xxxx

Кодировка T2: b1111_0111_1111_xxxx_1010_xxxx_xxxx_xxxx

Здесь 'x' игнорируются, и вы можете использовать все, что угодноЯ уверен, что эти кодировки всегда приведут к исключению undef, если будут выбраны для выполнения в качестве инструкции.Если вы используете кодировку T1, нет необходимости путать выравнивание по полусловам.

Поместите нужный вам код в обработчик undef, и он сможет воздействовать на значение в стеке компьютера (например, сохранить его).или сбросить для отладки) перед перезапуском.

...