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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 12.01.2020, 13:08   #1
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
По умолчанию Как рассчитать глубину использования стека?

Здравствуйте.
Я пишу ПО для PIC16F18877 на ассемблере, пользуюсь старым MPASM v5.76 под Win98. Возникла необходимость подсчёта максимальной глубины использования стека. Цель - определить участки программы с большой вложенностью подпрограмм.
Будьте добры - подскажите с помощью каких утилит можно автоматически рассчитать максимальную глубину стека в программе?
MPLAB это может делать? Если да то начиная с какой версии? Как представляются результаты расчёта?
Заранее благодарен, Алексей.
alex_zas вне форума   Ответить с цитированием
Старый 12.01.2020, 17:31   #2
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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
Сообщений: 250
Вес репутации: 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 вне форума   Ответить с цитированием
Старый 13.01.2020, 01:57   #5
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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   #6
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: Как рассчитать глубину использования стека?

Симулятор выполнит эту функцию, транслятор или отдельная утилита - не важно. Вопрос чем и как это сделать.
Понятно что старый MPASM этого не умеет.
Вложенных прерываний нет, просто прерываний очень много, обработка очень сложная и внутри прерываний есть call-ы.
Многозадачность использована не от "хорошей жизни".
У меня в проекте 6 последовательных интерфейсов, а MCU один, в котором один UART. Пришлось делать пять SOFT-UART-ов. Из-за этого длительность обработки прерываний должна быть минимальной.
Основной процесс у меня - это "терминальный профиль" (работа с GSM-модулем). А вспомогательный процесс - сбор, расчёт и накопление данных.
И оба эти процессы должны выполняться непрерывно и параллельно.
Конечно удобно было бы выполнять вспомогательный процесс в прерываниях, но там есть расчёты с плавающей точкой, которые занимают много времени.
Но суть собственно не в этом. Программа очень сложная, call-ов очень много, ручной анализ сложно делать.
Неужели никто не задавался вопросом - какую глубину стека использует его программа?
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 10:33   #7
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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   #8
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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   #9
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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 Посмотреть сообщение
но там есть расчёты с плавающей точкой, которые занимают много времени.
Чисто в порядке обмена опытом.
Чем вызвано использование флоатов? Вы используете стандартный флоат или нет?
Марк вне форума   Ответить с цитированием
Старый 12.01.2020, 20:48   #10
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: Как рассчитать глубину использования стека?

Я сейчас считаю вручную - это очень утомительно. Конечно если прерывания занимают один уровень стека и в основной программе 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 реализуете макросами. Всё отлично работает. И ооочень быстро.
Изображения
Тип файла: jpg MPASM.jpg (52.5 Кб, 16 просмотров)
alex_zas вне форума   Ответить с цитированием
Старый 13.01.2020, 01:50   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,878
Вес репутации: 3951/114
Марк 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, 10:54   #12
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 34
Сообщений: 1,401
Вес репутации: 2524/83
Рак 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 это может делать? Если да то начиная с какой версии? Как представляются результаты расчёта?
Заранее благодарен, Алексей.
Как сказал Марк, никак не определить максимальный уровень вложености аппартного стека. В этом контроллере есть сброс по переполнению стека, его можно использовать для понимания хватает ли стека вообще.
Рак вне форума   Ответить с цитированием
Ответ

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


Здесь присутствуют: 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, время: 05:46.


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