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

 
 
 
Reply to this topicStart new topic
> MPLAB/PIC18: сколько стека нужно коду?
Drewa
сообщение May 11 2011, 06:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 1-10-10
Пользователь №: 59 859



Итак, имеем. Не сильно сложная по логике, но довольно пухлая программа на ассемблере для PIC18F45K20. В ней довольно много подпрограмм, которые друг друга могут вызывать. Никакой рекурсии не предполагается, но используются оба уровня прерываний, и в их обработчиках вложенные вызовы подпрограмм тоже имеют место быть. А стек возвратов в процессоре - не резиновый. Есть желание как-то посчитать максимальный уровень вложенности вызовов, для данного конкретного варианта сборки программы. Ручками это сделать, конечно, можно, но уж очень трудоёмко. Встроенных средств в MPLAB я что-то не нашёл. Попытка сгородить макросы типа CALL# / RETURN#, которые бы сами подсчитывали глубину вложенности вызовов, наталкивается на ряд неприятных сложностей. А переполнение стека во время исполнения чревато фейерверком в лабораторной установке. Как быть?
Go to the top of the page
 
+Quote Post
testerplus
сообщение May 11 2011, 09:59
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 7-08-08
Из: SPb
Пользователь №: 39 471



Так об этом при проектировании программы надо было думать (особенно, учитывая, что и из прерываний есть вызовы).

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

Или в периодически выполняемом фрагменте кода вставить проверку содержимого стека (но придется на время проверки блокировать прерывания, т.к. нужно оперировать значением STKPTR)

Но тоже не факт, что при выполнении программы отработают все варианты ветвления.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение May 11 2011, 14:13
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Компилятор должен уметь строить дерево вызовов, по которому уже определить глубину стека элементарно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 12:41
Рейтинг@Mail.ru


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