Показать сообщение отдельно
Старый 13.01.2020, 17:01   #17
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 111
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

Вот фрагмент условного исходника:
Код:
x0	call	x1
	return
x1	call	x2
	return
x2	call	x3
	return
x3	call	x4
	return
x4	nop
	return
А вот что требуется получить (фрагмент листинга трансляции):
Код:
x0	XXXXH	(4)
x1	XXXXH	(3)
x2	XXXXH	(2)
x3	XXXXH	(1)
x4	XXXXH	(0)
Напротив имени метки в скобках - количество вложенных call-ов в данной подпрограмме.
И если выясняется что при работе происходит переполнение стека то нужно перелопачивать не весь объём исходников, а только подпрограммы с максимальным числом в скобках.
Можно эти числа определить вручную, а хочется это определять автоматически...
Упомянутое в данной теме изделие растиражировано и находится в эксплуатации. При очередном наращивании функционала был (как в последствии выяснилось) превышен порог глубины стека, что выразилось в периодических перезапусках (с ошибкой стека). Для того чтобы понять где слабое место в программе пришлось проанализировать все подпрограммы на глубину вложенности вручную. Подпрограммы с большой вложенностью обнаружены, исправления сделаны - всё в порядке.
Вопрос открытый - как определять вложенность подпрограмм автоматически?
Когда проектировалось данное изделие ставилась задача - достичь результата с минимальными затратами времени и средств. Поэтому был применён MCU 16-й серии, FLOAT32 и т.д. Не всегда при решении поставленной задачи есть возможность выбора оптимальных средств и методов.
С 24-й серией нужно разбираться, это перспектива. Если в будущем будут аналогичные проекты то конечно нужно использовать 24-ю серию.
Скажите - какие преимущества даёт использование среды (кроме возможности отладки)?.
Фикспойнт раньше не использовал - какие его преимущества по сравнению с флоат?
alex_zas вне форума   Ответить с цитированием