Отговори на тема  [ 3 мнения ] 
cortex m MPU 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Дек 12, 2005 2:30 pm
Мнения: 13
Местоположение: SOFIA
Мнение cortex m MPU
Здравейте,
Как да превключа cortex m3 в unprivileged mode когато използвам MPU?

Дефинирам две адресни пространства: едното за да го кажем системно и едно за приложение.
Приложението няма достъп до системното адресно пространство. Това го нагласям с MPU.
В някъкъв момент управлението се предава на приложението.
Как първоначално да превключа в unprivileged mode.
Ако просто запиша 3 в control регистъра то процесора ще се окаже в unprivileged mode докато изпълнява код от системеното адресно пространство и става exception.
Реално ако запиша 3 в control регистъра и веднага направя jump към приложението, работи защото инструкциите вече са в опашката от инструкции и не се чете от паметта и MPU не го хваща. Но не ми харесва така. Ако пък дойде прекъсване в този момент ще стане боза...
Става и като запиша 3 инструкции в стека на приложението и ги изпълня. Тези инструкции превключват режима докъто се изпълнява код от адресното пространство на приложението. В този случай обаче трябва да разреша стека на приложението за изпълнение на код от него което не ми харесва.
Никъде в интернет няма ясен отговор на въпроса.

Ако някой ме разбра какво питам и знае нещо ще съм благодарен да сподели :)


Вто Яну 25, 2022 3:51 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: cortex m MPU
Аз така и не стигнах до MPU-тата, ама не мисля че това има значение.

Значи правилният начин за смяна на контексти е през така наречените ексепшъни. Биле те софтуерни (svc/swi) или хардуерни. На пръв поглед нещата стават през стека. Хардуерно се спасяват някои регистри в текущия стек (който и да е той). При влизането във вектора ти се сменя на привилигирован режим и т.н.
Линк регистъра ти обаче не е адрес за връщане, а специална стойност от рода на FFFF-нещо си. Всичко това го има описано на много места.

Това, което не е описано много добре е, че ядрото си има нещо като вътрешен стек и си пази текущото ниво и колко нива си влязал. Демек като стане ексепшън и докато той се обработва стане друг ексепшън или фолт то си ги брои. Като тръгнеш да излизаш трябва да излезеш по обратния път. Нормално то си е така, но ако софтурно решиш да подменяш нещо по стековете трябва да симулираш толкова излизания с LR=FFFFFxx, колкото пъти си влизал. Демек не може да го излъжеш с броя нивата на вложеност. Ако се пробваш ще получиш хард фолт.
Но може да го лъжеш къде да се върне. Подменяйки стека или съдържанието на стека може да си дошъл от едно място, а да се върнеш на друго. Стига да се върнеш на същото ниво от което си дошъл. Така се сменят контексти във всеки ОС.

Другото, което е важно е, че ядрото тръгва с ресет ексепшън. Демек мисли, че е в ексепшън и може да "излезеш" от него. Но в стековете в паметта няма нищо и ако се пробваш ще гръмне. Естествено трябва да си попълниш нещо валидно в стека, преди да излезеш. Както се опитах да обясня по-горе, ядрото си знае че "излизаш" и знае, че трябва да се върне в по-ниско ниво. При излизане приоритета може само да пада и трябва да пада, иначе както казах хард фолт. При влизане може да се качва, иначе пак само хард фолт.

С други думи в ресета си нагласяш MPU-то и каквото решиш, подготвяш си някакъв стек все едно уж че си дошъл отнякъде от тред мод. Слагаш в LR вълшебната стойност и просто си излизаш ;-)


Вто Яну 25, 2022 5:52 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Дек 12, 2005 2:30 pm
Мнения: 13
Местоположение: SOFIA
Мнение Re: cortex m MPU
мерси за отговора!

Бях пробвал с exception но имаше странни последствия после при работа в някои случаи...
Сега го направих пак с exception (ползвам pending exception) и сега работи.
Проблема беше подравняването на стека на 8 при exception! не съм очаквал там да има още 4 байта понякога.
Чел съм стара докоументация на cortex m3 r1! Там пише че по подразбиране подравняването на стека на 8 при exception е излкюченно. Обаче тези от АРМ в ревизия на ядртото R2 са го сложили включено!


Сря Яну 26, 2022 3:42 pm
Профил ICQ WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни