реклама на сайте
подробности

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Обязательный префикс функции.
AlexandrY
сообщение Aug 12 2016, 08:08
Сообщение #61


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Kabdim @ Aug 12 2016, 10:54) *
Может попробовать использовать MPU?


Следует перед этим спросить автора, а есть ли у него MPU.
А то оно ведь опционально. И они к тому же разные бывают.

TC похоже этим еще не интересовался даже.
http://www.freertos.org/FreeRTOS-MPU-memor...ction-unit.html
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 12 2016, 08:48
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Kabdim @ Aug 12 2016, 13:54) *
Может попробовать использовать MPU? Расставить за концами стеков области с запретом на доступ...

Я уже писал про такой вариант. Во-первых: нужно довольно много доп. памяти, а её в обрез; во-вторых: задач около 10 (даже больше), а в MPU регионов всего 8 и большую часть из них я уже использую.

Цитата(Kabdim @ Aug 12 2016, 13:54) *
Хотя кмк с такими запросами пора переходить на чип толще, с защитой адресного пространства задач. Ну или программистов строить - устроить кодревью репозитория с прошивкой.

Это точно! Но не получается у меня так, проще уволиться самому... sm.gif
На следующей работе обязательно для такой задачи буду требовать чип с MMU.

Цитата(ViKo @ Aug 12 2016, 11:25) *
В Кейловской РТОС можно включить контроль переполнения стека, одной галочкой в настройке. Если случится, вылетаем в os_error, и там можно определить, из какой задачи прилетели.

Как это реализовано? Скорей всего - периодический контроль затёртости шаблона в стеке. Именно так сделано в uCOS. Это малоэффективно. Я уже писал почему.

Цитата(AlexandrY @ Aug 12 2016, 14:08) *
TC похоже этим еще не интересовался даже.

Ну-ну продолжайте острить дальше. Память у Вас видно коротка (а не только в моём проекте), так хотя-бы почитайте весь тред.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 12 2016, 09:31
Сообщение #63


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Aug 12 2016, 11:48) *
Как это реализовано? Скорей всего - периодический контроль затёртости шаблона в стеке. Именно так сделано в uCOS. Это малоэффективно. Я уже писал почему.

Нет. Там можно другой галкой задавать шаблон (watermark) или не задавать. А проверка все равно работает.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 12 2016, 09:45
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Aug 12 2016, 15:31) *
Нет. Там можно другой галкой задавать шаблон (watermark) или не задавать. А проверка все равно работает.

хм... странно... А как тогда работает? По какому алгоритму. У меня IAR, Keil-а нет.
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 12 2016, 09:59
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Aug 12 2016, 12:45) *
хм... странно... А как тогда работает? По какому алгоритму. У меня IAR, Keil-а нет.

Мануал намекает, что проверка стека производится во время переключения задачи:
Цитата
Enabled Stack Checking slightly decreases the kernel performance because on every task switch the kernel needs to execute additional code for stack checking.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 12 2016, 10:47
Сообщение #66


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (scifi @ Aug 12 2016, 12:59) *
Мануал намекает, что проверка стека производится во время переключения задачи:

Тогда это делается очень просто, но больше для галочки, ибо если задача переключается не в момент "преступления", то ей за это ничего не будет sm.gif.
Контроль по маркерам много более инфрмативен, нежели такое.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 12 2016, 13:36
Сообщение #67


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(jcxz @ Aug 12 2016, 11:48) *
Ну-ну продолжайте острить дальше. Память у Вас видно коротка (а не только в моём проекте), так хотя-бы почитайте весь тред.


Ладно, допустим вы даже читали про MPU.

В STM32F4 и STM32F7 оно действительно есть, хоть там дальше все равно идут нюансы с картой памяти, атрибутами доступа её областей и кэшированием свойственные только STM-ам.
А в Kinetis сделанных на том же Cortex-M4 ARM-овского MPU нет, а сделано свое MPU.

Или вот обычная практика для задач выделять стек в динамической памяти (ну для динамических задач), и эта же задача должна иметь доступ ко всей динамической памяти.
Т.е. задача не может взять и изолировать кусок в памяти поскольку должна иметь полное право писать и выше и ниже стека.
И все!
Красивая идея стухла и превратилась в костыль.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 13 2016, 08:16
Сообщение #68


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Aug 12 2016, 19:36) *
А в Kinetis сделанных на том же Cortex-M4 ARM-овского MPU нет, а сделано свое MPU.

Пока Kinetis и STM не интересуют, интересуют TI и NXP главным образом.

Цитата(AlexandrY @ Aug 12 2016, 19:36) *
Или вот обычная практика для задач выделять стек в динамической памяти (ну для динамических задач), и эта же задача должна иметь доступ ко всей динамической памяти.
Т.е. задача не может взять и изолировать кусок в памяти поскольку должна иметь полное право писать и выше и ниже стека.

В динамической памяти стеки задачам никогда не выделяю, все задачи живут постоянно - нет удаления задач.
При избытке памяти и "изолировать" ничего не мешает - выделить кусок заведомо большего размера, внутри него - выровненный на степени 2 регион1, закрыть его от доступа через MPU, внутри региона1 - регион2 меньшего размера - разрешить его для доступа (с бОльшим приоритетом чем у региона1). Регион2 расположен внутри региона1 так, чтобы между началом региона1 и региона2 и между их концами были некоторые защитные интервалы памяти.
Всё.
Но я уже сказал - облегчённые частные случаи типа: избыток памяти, избыток свободных регионов в MPU и пр. - не рассматриваю.

Цитата(zltigo @ Aug 12 2016, 16:47) *
Тогда это делается очень просто, но больше для галочки,

Это точно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 13 2016, 20:09
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (jcxz @ Aug 13 2016, 11:16) *
В динамической памяти стеки задачам никогда не выделяю, все задачи живут постоянно - нет удаления задач.

Между прочим, при динамическом выделении памяти под стек, каждый блок памяти имеет MCB, разрушение которого тоже является диагностическими признаком. Просмотр блоков памяти возможен в любой момент и для любого варианта сборки не надо иметь соответствующий ему MAP файл.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

5 страниц V  « < 3 4 5
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016