Страницы

Поиск по вопросам

среда, 15 апреля 2020 г.

Размер стека во встраиваемых ОС реального времени (FreeRTOS, OpenRtos)

#c #freertos

                    
Пытаюсь использовать FreeRTOS в проекте (проц - avr32). Заметил такую штуку. Если
увеличить размер стека для задачи, прошивка тупо виснет. В дизасме пустой бесконечный
цикл. Если сделать размер стека задачи маленьким, виснет сама задача. Кто знает, как
правильно выбрать размер стека в принципе и какие причины сей проблемы могут быть кроме
размера стека?    


Ответы

Ответ 1



Виснуть может по простой причине - процессор просто не может выделить сколько места под стек. Пусть у Вас всего 32кб памяти, а под стек выделяете 64кб - понятно, что будут пробемы:) С другой стороны, 16кб может быть нормально, но в памяти не только стек размещается... Но обычно стек больше половины доступной оперативки не должен быть. Также, нужно помнить, что эти процессоры очень привередливы. Например, размер стека должен быть кратным 4кб. Иначе виснет. Все это лучше читать в документации на процессор. И ещё одна причина подвисания прошивок, с которой я стыкался. У некоторых процессоров flash для прошивки не монолитный, а составной, например 8+8+16+32кб, то есть, 4 блока разного размера. И если какая то процедура попадает на стык - могут быть проблемы. А если ещё код выполняет близкий переход через границу - так подвисает на ура. Решалось анализом кода и составленим правильно мап файла для распределения процедур по блокам.

Комментариев нет:

Отправить комментарий