Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

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

Здравствуйте.
Я пишу ПО для PIC16F18877 на ассемблере, пользуюсь старым MPASM v5.76 под Win98. Возникла необходимость подсчёта максимальной глубины использования стека. Цель - определить участки программы с большой вложенностью подпрограмм.
Будьте добры - подскажите с помощью каких утилит можно автоматически рассчитать максимальную глубину стека в программе?
MPLAB это может делать? Если да то начиная с какой версии? Как представляются результаты расчёта?
Заранее благодарен, Алексей.
alex_zas вне форума   Ответить с цитированием
Старый 12.01.2020, 17:31   #2
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Здравствуйте.
Я пишу ПО для PIC16F18877 на ассемблере
Вы что, не в состоянии узнать сколько вложенных call у вас в коде и прибавить к ним 1 (это прерывания)?
Или Вы допускаете рекурсии?
Какая длина кода?
Марк вне форума   Ответить с цитированием
Старый 12.01.2020, 17:42   #3
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Здравствуйте.
Я пишу ПО для PIC16F18877 на ассемблере, пользуюсь старым MPASM v5.76 под Win98.
А каким образом Вы пишите на ассемблере, который не поддерживает выбранный Вами контроллер?
Марк вне форума   Ответить с цитированием
Старый 12.01.2020, 20:12   #4
masterok999
Senior Member
 
Регистрация: 28.07.2015
Адрес: NA
Возраст: 56
Сообщений: 254
Вес репутации: 1001/30
masterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud ofmasterok999 has much to be proud of
По умолчанию Re: Как рассчитать глубину использования стека?

Вероятно он добавил файл "p16f18877.inc" из новой версии, которая не идет под под Win98.
Ассемблеру до лампочки, лишь бы описание контроллера было.
masterok999 вне форума   Ответить с цитированием
Старый 12.01.2020, 20:48   #5
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

Я сейчас считаю вручную - это очень утомительно. Конечно если прерывания занимают один уровень стека и в основной программе 2-3 call то посчитать просто.
У меня в прерываниях вложенность 3, два параллельных процесса с разделением стека на две части, в каждом процессе вложенность как выясняется местами достигала 5, 11 банков памяти программ по 2к слов заняты процентов на 90 - приходится попотеть...
Рекурсий нет. Я надеюсь.
В моём случае чтобы вручную сформировать по каждому call глубину вложенности нужно часов 5 кропотливой работы. Я думал может я - пещерный человек, в цивилизованном мире всё уже автоматизировано...

Откуда информация что не поддерживает? У меня всё работает.
Посмотрите вложенную картинку.
Конечно на порядок медленнее, чем MPASM v5.02.
Кстати - может кому-то интересно. Для "навороченных" MCU семейства EMR типа 16F18877, 16F19197 выхода нет - только MPASM v5.76.
А для простых MCU семейства EMR скажем 16F1829 можно пользоваться MPASM v5.02. Указываете тип контроллера 16F876A, формируете (.INC) файл с описанием регистров 16F1829, а недостающие команды EMR реализуете макросами. Всё отлично работает. И ооочень быстро.
Миниатюры
MPASM.jpg  
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 01:50   #6
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Я думал может я - пещерный человек, в цивилизованном мире всё уже автоматизировано...
Может я чего не понимаю, но для контроля уровня стека нужна полноценная симуляция. А Вы макросами недостающие команды реализуете...
Насколько я понял, Вы реализуете вытесняющую многозадачность и вложенные прерывания мало того, что на АСМе, но и на не слишком приспособленной для этого платформе?
Любопытно, а в чем причина таких страданий? Замена пин2пин 877-го на 18877-ой?
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 01:57   #7
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от masterok999 Посмотреть сообщение
Ассемблеру до лампочки
Лишь до тех пор, пока система команд МК поддерживается в полном объеме. Ну или не применяются те команды, которых в этом АСМе нет.
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 09:56   #8
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

Симулятор выполнит эту функцию, транслятор или отдельная утилита - не важно. Вопрос чем и как это сделать.
Понятно что старый MPASM этого не умеет.
Вложенных прерываний нет, просто прерываний очень много, обработка очень сложная и внутри прерываний есть call-ы.
Многозадачность использована не от "хорошей жизни".
У меня в проекте 6 последовательных интерфейсов, а MCU один, в котором один UART. Пришлось делать пять SOFT-UART-ов. Из-за этого длительность обработки прерываний должна быть минимальной.
Основной процесс у меня - это "терминальный профиль" (работа с GSM-модулем). А вспомогательный процесс - сбор, расчёт и накопление данных.
И оба эти процессы должны выполняться непрерывно и параллельно.
Конечно удобно было бы выполнять вспомогательный процесс в прерываниях, но там есть расчёты с плавающей точкой, которые занимают много времени.
Но суть собственно не в этом. Программа очень сложная, call-ов очень много, ручной анализ сложно делать.
Неужели никто не задавался вопросом - какую глубину стека использует его программа?
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 10:33   #9
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Симулятор выполнит эту функцию, транслятор или отдельная утилита - не важно. Вопрос чем и как это сделать.
Понятно что старый MPASM этого не умеет.
Вы меня не услышали. Определить уровень вложенности может ТОЛЬКО симулятор (ну если не считать очевидных случаев). И не просто симулятор, а с генератором более-менее реальных сигналов.
И ассемблер тут вообще не причем. Ни старый, ни новый, ни вообще никакой.
Симулятор есть В СРЕДЕ разработки (IDE). И в MPLAB 8, и в MPLAB X.
Вы вообще среду то используете?
ЗЫ. Оффтоп. Так чем вызван такой странный выбор МК? Если Вам нужно шесть UARTов, так и брали бы МК с шестью UARTами...
Не пришлось бы заниматься всем этим мазохизмом...
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 10:39   #10
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
И оба эти процессы должны выполняться непрерывно и параллельно.
В одном ядре никакие процессы не могут выполняться "параллельно и непрерывно". По определению. Поэтому весь вопрос только в допустимых ожиданиях задач. Использовать МК с хардварным стеком для вытесняющей (наиболее близкой к Вашим требованиям) псевдо многозадачности - это какой то фееричный мазохизм..., извините.
К тому же Вы утверждаете, что в прерываниях нет времени, но при этом тратите время на call-return, да еще и не один... Я теряюсь в догадках.

Последний раз редактировалось Марк; 13.01.2020 в 10:45.
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 10:42   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
но там есть расчёты с плавающей точкой, которые занимают много времени.
Чисто в порядке обмена опытом.
Чем вызвано использование флоатов? Вы используете стандартный флоат или нет?
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 10:54   #12
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 34
Сообщений: 1,412
Вес репутации: 2632/85
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Здравствуйте.
Я пишу ПО для PIC16F18877 на ассемблере, пользуюсь старым MPASM v5.76 под Win98. Возникла необходимость подсчёта максимальной глубины использования стека. Цель - определить участки программы с большой вложенностью подпрограмм.
Будьте добры - подскажите с помощью каких утилит можно автоматически рассчитать максимальную глубину стека в программе?
MPLAB это может делать? Если да то начиная с какой версии? Как представляются результаты расчёта?
Заранее благодарен, Алексей.
Как сказал Марк, никак не определить максимальный уровень вложености аппартного стека. В этом контроллере есть сброс по переполнению стека, его можно использовать для понимания хватает ли стека вообще.
Рак вне форума   Ответить с цитированием
Старый 13.01.2020, 11:18   #13
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

...Определить уровень вложенности может ТОЛЬКО симулятор...
Когда то давно я видел в листинге в каком-то трансляторе в списке меток напротив меток подпрограмм в скобках уровень вложенности.
Я немного неверно сформулировал задачу. Мне не нужно знать - какого максимального уровня достигнет указатель стека при работе моей программы (для чего нужен симулятор). Мне нужно знать по каждому call - какая по нему максимальная вложенность. По моему это функция транслятора.
Среду не использую.
К сожалению в 16-й серии нет MCU c 6-ю UART-ами. А использование MCU других серий - для меня связано с целым рядом сложностей (потребуется среда, другая ОС, другой PC, другой программатор, освоить программирование на С, переписать всё ПО на С и освоить новый сложный MCU). Вот это - МАЗОХИЗМ.
Будьте добры - подскажите в каком MCU есть 6 UART-ов?
Конечно "параллельность" условная. У меня как в Windows - по таймеру 256гц происходит переключение между процессами.
Мазохизм? Реализовать это переключение очень просто.
Использование FLOAT32 вызвано требованием высокой точности расчёта некоторых параметров + сложная математика, полиномы + накапливаемая погрешность.
Использую урезанный модуль FLOAT32 Microchip.
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 11:36   #14
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
К сожалению в 16-й серии нет MCU c 6-ю UART-ами. А использование MCU других серий - для меня связано с целым рядом сложностей (потребуется среда, другая ОС, другой PC, другой программатор, освоить программирование на С, переписать всё ПО на С и освоить новый сложный MCU).
6 УАРТов у микрочиповских МК с собственными (не MIPS и не ARM) ядрами есть только в одном МК - PIC24FJ128GA606 (в четырех его разновидностях).
5 УАРТов есть в новых PIC18 K40 и Q43.
Для работы с PIC24F достаточно того же инструментария, что и для PIC16.
Делать сложные проекты без среды, ссылаясь на отсутствие "другой ОС", - истинно мазохизм.
Писать на АСМе 16-разрядной платформы (ASM30/ASM16) Микрочипа НА ПОРЯДОК проще, чем на MPASM.
Даже если делать софтовые UART-ы на самых дешевых PIC24 - это не потребует извращений с переключением задач в хардварном стеке. На этой платформе стек имеет любой размер, который влезет в свободный участок ОЗУ. Ну и тактовая частота ядра будет вдвое выше, а плотность кода выше раза в 4.
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 11:38   #15
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Мне нужно знать по каждому call - какая по нему максимальная вложенность.
В смысле его ПОВТОРНЫХ параллельных вызовов?
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 11:44   #16
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Использование FLOAT32 вызвано требованием высокой точности расчёта некоторых параметров + сложная математика, полиномы + накапливаемая погрешность.
Использую урезанный модуль FLOAT32 Microchip.
Сложность математики не влияет на выбор между фикспойнтом и флоатом.
Выбор флоата определяется только ДИНАМИЧЕСКИМ ДИАПАЗОНОМ обработки. Мне трудно представить себе источник данных в ВОСЬМИБИТНОМ контроллере, которому бы не хватило 32 разрядного фикспойнта для любой обработки.
Но даже если это и так, то ТЕМ БОЛЕЕ, нужно было выбирать МК под задачу. И PIC24 (при Вашем контексте разработки) тут очевиден.
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 17:01   #17
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 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 вне форума   Ответить с цитированием
Старый 13.01.2020, 17:42   #18
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Скажите - какие преимущества даёт использование среды (кроме возможности отладки)?.
Фикспойнт раньше не использовал - какие его преимущества по сравнению с флоат?
Среда позволяет пользоваться удобным редактором и интегрирована с инструментами программирования и отладки, включая симулятор.
В MPLAB X редактор дает возможность цветового выделения всех компонент исходного текста, имеет разного рода форматирования, ведет хоть и простой, но контроль версий (историю). Ну и дебаг, включая симулятор.
Фикспойнт - это обычный int (uint), но с ПОДРАЗУМЕВАЕМОЙ точкой.
В отличии от флоата разрешение этого типа линейно во всем диапазоне, а точность в пределах диапазона фикспойнта у последнего выше, чем у флоата, уже потому, что разрядность мантиссы всегда меньше общей разрядности (24 против 32, например). Вся арифметика ничем не отличается от целочисленной арифметики.
Флоат, на самом деле, необходим крайне редко. То есть только тогда, когда динамический диапазон переменной составляет сотни децибел.
И речь идет не о точности, а именно об этом диапазоне.
По поводу вложенности call.
Любые инструменты создают под некий спрос. Доступ к указателю стека в PIC12/16 появился совсем недавно, а сам стек очень куцый. Поэтому подобные Вашим извращения с этим стеком никому в голову не приходят. Ну то есть понятно, что это возможно, но тратить на это силы и время нет никакого желания. Для таких решений есть иные платформы.

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

Марк - огромное спасибо за ответы.
Всё толково и понятно.
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 18:02   #20
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 3,094
Вес репутации: 4015/117
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
И если выясняется что при работе происходит переполнение стека то нужно перелопачивать не весь объём исходников, а только подпрограммы с максимальным числом в скобках.
Если у Вас проблемы со стеком, то может стоит инлайнить макросы, а не вставлять бесконечные call? Ну вырастет немного объем кода... Ну и что? зато исполнение будет быстрее и не будет переполнений стека.
Марк вне форума   Ответить с цитированием
Старый 13.01.2020, 20:05   #21
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

Совершенно верно. Я так и поступил. Заменил один call на макрос в прерываниях и один в основной программе. В итоге - экономия двух уровней из восьми доступных.
Спасибо!
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 20:52   #22
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 58
Сообщений: 2,884
Вес репутации: 3992/111
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: Как рассчитать глубину использования стека?

Цитата:
Сообщение от alex_zas Посмотреть сообщение
Когда проектировалось данное изделие ставилась задача - достичь результата с минимальными затратами времени и средств. Поэтому был применён MCU 16-й серии, FLOAT32 и т.д.
У вас неправильное понятие "достичь результата с минимальными затратами времени и средств"... увы... И выбор неправильный... ввиду отсутствия такового...
Цитата:
Не всегда при решении поставленной задачи есть возможность выбора оптимальных средств и методов.
Отсюда и вопросы... и выбор камня... и решения...
Цитата:
С 24-й серией нужно разбираться, это перспектива. Если в будущем будут аналогичные проекты то конечно нужно использовать 24-ю серию.
Призрачная перспектива... но хоть какая-то...
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 13.01.2020, 21:17   #23
alex_zas
Senior Member
 
Аватар для alex_zas
 
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 54
Сообщений: 115
Вес репутации: 185/14
alex_zas has a spectacular aura aboutalex_zas has a spectacular aura about
По умолчанию Re: Как рассчитать глубину использования стека?

Да Вы наверно правы.
Нужно немного исправить фразу:
Когда проектировалось данное изделие ставилась задача - достичь результата с минимальными для меня затратами времени и средств.
alex_zas вне форума   Ответить с цитированием
Ответ

Метки
глубина, стек


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39
Как рассчитать делитель напряжения и тока tela77 Вопросы начинающих 38 07.07.2010 11:58
Как рассчитать антенну? dj_kirgoff Общетехнические вопросы 5 18.07.2008 18:37
Как проверить переполнение стека soecho Продукция MICROCHIP 9 13.02.2008 18:14


Часовой пояс GMT +3, время: 00:58.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot