Pull to refresh

Comments 14

К читателям:

вопрос на засыпку — в следующей части просто рассмотреть работу SPI или не тянуть кота за хвост и подключить какой нить простой SPI дисплей?

так сделана железка :-)

чем мой ответ не устроил минусатора не понятно.... наверное надо было ответить RFTM.. :-)

А где тут ассемблерный код, который паркует регистры процессора при вызове самого прерывания?

r0-r3, r12, lr автоматом кладутся на стек, и потом с него восстанавливаются... так что если в прерывании другие регистры не нужны - то ничего дополнительно парковать не надо, так что из кода прерывания их сохранение можно и удалить (старая статья однако, надо поправить что ли)

Что получается arm Cortex m автоматически на аппаратном уровне переключает контекст?

при возникновении прерываний и исключений сохраняет на стеке указанные регистры, после возврата восстанавливает...

там еще про адрес возврата рекомендую почитать - там тоже интересно :-)

А где ассемблерный код, который отвечает за возврат из отработанной функции в main?

При вызове функции прерываний не происходит и при этом надо понять куда вернуться после отработки функции.

адрес возврата в LR, так что переход по нему вернет исполнение в вызывающий код

вообще я не понял про какой код вы пишите

в прерывании свой порядок возврата - там используются специальные значения для возврата

а для подпрограмм в LR делал по этому небольшое видео https://youtu.be/XrkwxJUf0Rs?si=VTW7UZC4kh5N7Emd оно есть и в ВК

адрес возврата в LR, так что переход по нему вернет исполнение в вызывающий код

А кто прописывает регистр LR? Сам программист на ассемблере руками или это происходит аппаратно?

оба варианта возможны..

при вызове подпрограммы (инструкция BL) в LR аппаратно заносится адрес следующей инструкции основной программы

при обработке исключений - в LR заноситься спец значение, и адрес возврата сохраняется на стек

ну и при вызове подпрограмм из подпрограмм - программист должен сам сохранять\восстанавливать LR о чем и рассказывается в видео по ссылке выше

Как на ассемблере будет выглядеть функция заполнения области RAM памяти под стек значениями 0xCA?
Нужно раскраcить стек именно до вызова функции main().
[окраска памяти (memory painting)]
Это нужно для анализа глубины заполнения стека.

Sign up to leave a comment.

Articles