Jump to content

    

Заполнение неиспользуемой памяти, где найти значения команд в HEX-виде?

Здравствуйте.

ST рекомендует (в AN1015 и в AN5156) заполнять неиспользуемую память значениями ILLEGAL OPCODE или инструкцией вызова прерывания SVC, в котором обработать ошибку.

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно...

Спасибо.

Share this post


Link to post
Share on other sites
19 minutes ago, Alt.F4 said:

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно

Ну самый простой вариант, наверно, написать команду на ассемблере в файле, скопилировать, запустить в симуляторе (в IAR точно есть), и посмотреть код))

А так, вот пример

Share this post


Link to post
Share on other sites
1 час назад, Alt.F4 сказал:

Собственно вопрос, а где найти значения этих инструкций в HEX-виде? Облазил все мануалы, безрезультатно...

Видимо про какое ядро речь - Вы предлагаете нам угадать?

Если для классического ARM, то посмотреть можно в таблице опкодов на стр.17 здесь:  http://w27001.vdi.mipt.ru/wp/wp-content/uploads/2017/07/Leshchev.pdf

Если для Cortex-M, то ищите аналогичную таблицу опкодов Thumb-2. И когда найдёте - не забудьте её сюда выложить.  :smile:

Если найти не удастся, то создать файл размером 65536*4 байт, состоящий из 32-битных слов в диапазоне от 0 до 65535. И прогнать его через дизассемблер.

А если у Вас Cortex-M, но не Cortex-M7 (самый старший из Cortex-M), то можно посмотреть какие инструкции, имеются в более старших Cortex-M, но отсутствуют в вашем Cortex-M. Они и будут для Вас ILLEGAL OPCODE.

Share this post


Link to post
Share on other sites
31 minutes ago, jcxz said:

Они и будут для Вас ILLEGAL OPCODE.

Я думаю, ТС достаточно заполнить остатки памяти svc #255, а в прерывании анализировать, кто посмел вызывать эту команду)

Share this post


Link to post
Share on other sites
17 часов назад, Arlleex сказал:

Architecture Reference Manual. Например, на ARMv7-M, параграфы A4, A5, A6.

Где-ж Вы были когда я это писал?: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=147689&do=findComment&comment=1570146

:smile:

Share this post


Link to post
Share on other sites
59 минут назад, jcxz сказал:

Где-ж Вы были когда я это писал?

Хех, упустил видимо из виду. Ну, лучше поздно, чем никогда:yess:

Share this post


Link to post
Share on other sites

Да, извините, забыл указать, что интересовал вопрос для Arm Cortex-M0+

Вообще это странно, что ST рекомендует (в AN1015 и в AN5156) использовать ILLEGAL OPCODE, но не предлагает их значения (т.к. для STM8 они конкретно указывают какие значения использовать)

 

В 03.03.2019 в 15:07, haker_fox сказал:

Я думаю, ТС достаточно заполнить остатки памяти svc #255, а в прерывании анализировать, кто посмел вызывать эту команду)

0xFF вызывает прерывание SVC?..

Share this post


Link to post
Share on other sites
40 минут назад, Alt.F4 сказал:

Вообще это странно, что ST рекомендует (в AN1015 и в AN5156) использовать ILLEGAL OPCODE, но не предлагает их значения (т.к. для STM8 они конкретно указывают какие значения использовать)

Потому что описание ядра Cortex-M - это отдельный документ. В котором и расписано всё что касается ядра и системы команд. И STM не создаёт эту систему команд. А STM8 - это детище чисто STM.

40 минут назад, Alt.F4 сказал:

0xFF вызывает прерывание SVC?..

В Cortex-M нет однобайтовых команд. Откройте наконец-то описание системы команд! :dash2:

Share this post


Link to post
Share on other sites

Доку открывал конечно, вот я и не понял, что имел ввиду haker_fox ("достаточно заполнить остатки памяти svc #255")

2019-03-06_12-09-24.png.b3d4d9d3b9cdf72336cc09fa3632fbd1.png

Share this post


Link to post
Share on other sites
1 hour ago, Alt.F4 said:

0xFF вызывает прерывание SVC?..

Нет. Просто svc 0-254 можно использовать для "legal instruction")))

6 minutes ago, Alt.F4 said:

вот я и не понял, что имел ввиду haker_fox

Он имел в виду, что вы можете заполнить остатки памяти любым svc с любым номером. И при обработке прерывания, смотреть, с каким номером оно было вызвано. 255 было в качестве примера. Используйте любое число) Таким образом вы сможете детектировать прыжок на "левый" участок флеша, и использовать это соответствующим образом. Например, писать в журнал.

Share this post


Link to post
Share on other sites

Выходит заполняем всю неиспользуемую память значением 0xDF (1101 1111) и гарантировано ловим прерывание SVC в случае незапланированного перехода в эту область?

2019-03-06_12-15-51.png.729b1ee7f4d470a277a9a3d4afb1850a.png

Share this post


Link to post
Share on other sites
15 минут назад, Alt.F4 сказал:

Выходит заполняем всю неиспользуемую память значением 0xDF (1101 1111) и гарантировано ловим прерывание SVC в случае незапланированного перехода в эту область?

Не гарантировано. А только если разрешены fault-ы (в регистре FAULTMASK) и если запрещена эскалация SVC в HardFault. Иначе - получите HF.

Можно запретить эскалацию и гарантированно ловить HF во всех случаях. А дальше уже декодировать его причину.

Share this post


Link to post
Share on other sites
Цитата

Не гарантировано. А только если разрешены fault-ы (в регистре FAULTMASK) и если запрещена эскалация SVC в HardFault. Иначе - получите HF.

Перелопатил доки ST и судя по всему в их Cortex-M0+ нет таких регистров и системные прерывания (HardFault, SVC) активированы всегда.

Share this post


Link to post
Share on other sites

Точно не помню, посмотрите книгу Дж. Ю. У него там про эти прерывания отдельные главы.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now