Jump to content

    

Расход стека

Ну а фол-то где?

Какой фол? Было сказано "на грани фола" - согласитесь, что это не одно и то же.

Несколько команд изменяющих и восстанавливающих указатель стека - добавляются по месту легко и непренужденно.

Не спорю.

Если, оно конечно, это надо.

Вот именно. И, скорее всего, в 99 случаях из 100 будет необоснованно.

Share this post


Link to post
Share on other sites
Какой фол? Было сказано "на грани фола" - согласитесь, что это не одно и то же.

 

 

Хочу знать что за фол о нахождении на грани которого Вы говорите. 

 

 

Share this post


Link to post
Share on other sites

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

Если нужен пример, пожалуйста - переключение стека в фиксированную область во вложенных прерываниях.

Хотя для отчаянных ребят, программирующих в стиле "а-ля улыбнитесь, каскадеры" это, конечно, не довод ;) . И, честно говоря, нет ни малейшего желания вступать в дебаты по этому поводу. Хотел только предупредить, а дальше уж, как говорится, каждый выбирает для себя...

Share this post


Link to post
Share on other sites

Счётчик вложености прерываний нужен хотя бы для того, чтобы не заниматься зря перепланировкой при выходе из вложенного прерывания, делать это только при выходе из всех прерываний. А при его наличии не переключать стек во вложенных прерываниях труда не составит.

Share this post


Link to post
Share on other sites
И, честно говоря, нет ни малейшего желания вступать в дебаты....

Ну когда нет аргументов, а только футбольно-киношные отсылки, то это следует признать совершенно разумным желанием.

Share this post


Link to post
Share on other sites
На грани фола в моем понимании означает, что сильно увеличивается потенциальная опасность возникновения ошибок, приводящих к труднодиагностируемому краху системы.

 

В общем смысле любая программа либо работает, либо нет. Занимается она "сложным переключением контекста" или вычислением 2+2 - совершенно без разницы с точки зрения "надежности" работы устройства. Другое дело - нагрузка на голову программиста, но это вопрос профессионализма и навыка.

Share this post


Link to post
Share on other sites

начал осваивать rtos

 

правильно ли я понимаю что при создании задачи размер стека надо указывать в зависимости от того, сколько вложенных функций будет в самой задаче?

то есть если в задаче глубина вложенности функций будет например 10, то и размер стека надо указывать >176? то есть такая задача отожрет >704 байта оперативы. что в общем то не кашерно при наличии 8к оперативы.

 

или что то я не так делаю?

Share this post


Link to post
Share on other sites
начал осваивать rtos

 

правильно ли я понимаю что при создании задачи размер стека надо указывать в зависимости от того, сколько вложенных функций будет в самой задаче?

 

Про локальные переменные тоже надо не забывать.

 

 

то есть если в задаче глубина вложенности функций будет например 10, то и размер стека надо указывать >176? то есть такая задача отожрет

 

Почему именно 176?

Каждый уровень потребляет 17,6 байта?

 

>704 байта оперативы. что в общем то не кашерно при наличии 8к оперативы.

 

или что то я не так делаю?

 

Контроллер слабоват. Нужен более мощный.

 

Share this post


Link to post
Share on other sites
начал осваивать rtos

 

правильно ли я понимаю что при создании задачи размер стека надо указывать в зависимости от того, сколько вложенных функций будет в самой задаче?

то есть если в задаче глубина вложенности функций будет например 10, то и размер стека надо указывать >176? то есть такая задача отожрет >704 байта оперативы. что в общем то не кашерно при наличии 8к оперативы.

 

или что то я не так делаю?

Думаю, не ошибусь, если скажу так: выделяете под задачу столько стека, сколько бы выделили для ее работы без операционки в свойствах линкера.

Share this post


Link to post
Share on other sites
Почему именно 176?

Каждый уровень потребляет 17,6 байта?

ну не 17,6 байта. Я так понял что указываемое значение - это не число байт, а число 32разрядных слов.

 

а 176 - экспериментальным путем получено.

указываю меньше 32 - вообще задача не запускается

а потом добавляю по 16 на каждый уровень вложенности функций, иначе вылетает в vApplicationStackOverflowHook

Share this post


Link to post
Share on other sites
а число 32разрядных слов.

 

А какая архитектура?

 

 

а потом добавляю по 16 на каждый уровень вложенности функций, иначе вылетает в vApplicationStackOverflowHook

 

ИМХО сомнительный подход.

Могу ошибаться, но мне кажется, что уровень вложенности не равен количеству вызовов функций:

 

void f2()
{
}
void f1()
{
    f2();
}

void main()
{
   f1()
}

 

Для этого кода уровень вложенности не 2, столько сколько компилятор сделает.

 

Share this post


Link to post
Share on other sites

согласен. тогда получается лишняя заморочка по расчету того сколько же стека нужно задаче....

а камень - stm32f100rb

 

 

 

Share this post


Link to post
Share on other sites
согласен.

 

C чем именно согласны?

 

тогда получается лишняя заморочка по расчету того сколько же стека нужно задаче....

Лишняя?

Стек надо как-то учитывать....

Если стека не хватает работать не будет. А говорите - лишняя.

 

а камень - stm32f100rb

Понятно

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this