|
Keil. Stack usage overflow, в отладчике вспыхивает красным |
|
|
|
Jul 27 2016, 07:45
|

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

|
ОС Кейловская RTX с их же надстройкой CMSIS RTOS. Задаю стеки, как в документации, некоторые размером по умолчанию, некоторые своим. Кейл заполняет их шаблоном CC для контроля размера. По моим наблюдениям, они не портятся. Здесь что-то другое. Возможно, быстродействие компа катастрофически испорчено. Есть программы, которые, практически, не работают. Надо драйверы переустановить, OpenGL... Еще попробую новый Кейл 5.20, типа, революционный.
|
|
|
|
|
Jul 27 2016, 10:52
|

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

|
Цитата(jcxz @ Jul 27 2016, 05:49)  Задавайте стеки статически и не будет чудес. Зачем их на куче делать-то?? Ни на какой не на куче. Куча, вообще, девственно чиста, забита одними нулями. Основной стек, тот, что над кучей, используется слегка. Стеки задач создаются в отдельной области os_stack_mem. Но что-то не могу увидеть в ней всех задач. То есть, не вижу шаблона CC. Значит, его действительно что-то портит.
|
|
|
|
|
Jul 27 2016, 14:13
|

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

|
Сделал все задачи с заданным пользователем стеком (не по умолчанию). Вижу все задачи в области os_stack_mem. Вижу, у всех задач к конце стека (младшие адреса) есть подложка из CC байтов. Достаточное количество, как минимум, половина от выделенного. Вижу, как меняются остальные байты при работе. Ничего необычного. И все равно одна задача иногда подсвечивается красным. Я уже и местами их менял, теперь она не последняя в этой области. Не помогает. Складывается, что сама задача и портит свой же стек. Лично я со стеком не балуюсь, боже упаси. Во всяком случае, не намеревался. И все так же смущает, что функция os_error не вызывается. При переполнении стека она должна вызываться, и там зависать.
|
|
|
|
|
Jul 28 2016, 05:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jul 27 2016, 20:13)  Складывается, что сама задача и портит свой же стек. Лично я со стеком не балуюсь, боже упаси. Во всяком случае, не намеревался. И все так же смущает, что функция os_error не вызывается. При переполнении стека она должна вызываться, и там зависать. Ну если Вы нашли адрес, где подозреваете, что портится содержимое стека, то поставьте бряк на это место под эмулятором и увидите кто туда пишет.
|
|
|
|
|
Jul 28 2016, 07:05
|

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

|
Адрес не нашел, там много функций работает. Вся память задачи "кишит", до CC. CC стоят стабильно. Я нашел, что событие (Event) для запуска задачи может устанавливаться из двух мест - прерывания и другой задачи, возможно с любым интервалом, вплоть до минимального. Может, это влияет. Буду рыть в ту сторону. Интересно, а underflow возможен? И контроль его? Но тоже не вижу.
Не так. События устанавливаются, как угодно, но задача запускается по наличию обоих событий (WAIT_AND). Так что там никаких "гонок" быть не может.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|