Перейти к содержанию
    

Под FreeRTOS не получается вручную изменить указатель стека MSP

7 hours ago, TOG said:

Может из оси можно выйти ? Типа завершить работу, попасть снова в main и от туда уже передать управление другому приложению ?

https://mcuoneclipse.com/2019/01/20/freertos-how-to-end-and-restart-the-scheduler/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/27/2024 at 12:24 PM, jcxz said:

3. Сделать все необходимые дела в ISR. Кто мешает вам так сделать? Вроде как всё элементарно.

Немного я затупил.

Когда я делаю переход из обработчика прерывания в другое приложение, то флаг в "Interrupt Active Bit Register" остается висеть "Active".

Получается, что я НЕ вышел из обработчика прерывания. И как результат, после перехода в другое приложение прерывание таймера не срабатывает, т.к. процессор думает, что мы из обработчика еще не вышли.

Я не понимаю как процессор узнает, что мы выходим из обработчика прерывания ?

Объясните пожалуйста на пальцах для тупого. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот говорил же, захотелось вам всадить себе пулю в колено, а теперь рубашку на лоскуты режете.

У процессора есть 2 внутренних режима: режим потока и режим обработчика прерывания. При входе в прерывание активизируется последний. При выходе из обработчика вы возвращаетесь в режим потока.

Предположу, что jcxz имел в виду не тупо переходить на приложение из прерывания, а в прерывании подменить LR/PC/SP фреймстека так, чтобы вернуться в привелегированном режиме потока сразу на приложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, TOG сказал:

Я не понимаю как процессор узнает, что мы выходим из обработчика прерывания ?

Объясните пожалуйста на пальцах для тупого. 

Раз уж решили править стек и прочее, то может стоит сперва хотя-бы почитать как работает система прерываний в вашем CPU? Всё детально разжёвано в документации на ядро. И как происходит выход из прерывания, и какие есть режимы CPU, и переключение стеков (MSP/PSP) - всё там есть.

Если нужно выйти из ISR в определённый адрес, то можно подменить в стеке адрес возврата и выйти штатным образом. Также можно отредактировать содержимое LR, чтобы изменить режим CPU и активный стек после выхода. Но совершенно непонятно - на кой это нужно? На кой вообще потребовалось править MSP при запущенной ОС?

Складывается впечатление, что вы не понимаете как работает ОС в целом. Поэтому и такие странные хотелки.

 

ЗЫ: "Объяснять на пальцах" всё это - невозможно. Раз уж решили заниматься системными вещами и вмешиваться в работу ОС, то нужно предварительно глубоко изучить функционирование CPU и научиться читать документацию. Также нужно знать и уметь писать на ассемблере. Иначе - лучше не заниматься не своим делом.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал. Почитал Джозефа Ю.

Загрузил в стек нужные значения:

0xFFFFFFF9 (EXC_RETURN),

0x00000000 (R0),

0x00000000 (R1),

0x00000000 (R2),

0x00000000 (R3),

0x00000000 (R12),

0xFFFFFFFF (LR),

AppAdr+1 (PC) (Адрес приложения),

0x010000000 (xPSR.ThreadMode = 1)

и далее команда POP {PC} делает все остальное.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...