-
- заполнить память известным значением, после сброса первым делом всю память вычитать в последовательный порт, например - koyodza(08.10.2010 22:06)
- И как ответить "откуда залетели"? Пока набросал процедурку. Получает параметр-метку, если стек "глубже" сохраняет новую "глубину" и метку в еепром. Если не даст ответ, заведу в еепром TOP10 :) глубин стека с метками. - Скрипач(08.10.2010 22:39)
- может, вначале всё-таки поставить диагноз? Или уже 100% известно, что это именно стек налазит? - koyodza(08.10.2010 22:48)
- И мой и ваш способ, даст диагноз. Мой - это еще и profiler. Посмотрел ассемблерный листинг. Есть процедуры (не прерывания) которые сохраняют до 10 регистров в прологе. Задумался. Хочу понимать истинную картину. По каждому пациенту отдельно :) - Скрипач(08.10.2010 22:57)
- не, ваш может не сохранить непосредственно в момент краха, и можно не узнать о переполнении. + неизвестно, может кто-то подбирается к стеку снизу - koyodza(08.10.2010 23:08 - 23:20)
- Что-ж имеет смысл сделать и то и то. Никто не мешает. - Скрипач(08.10.2010 23:14)
- не, ваш может не сохранить непосредственно в момент краха, и можно не узнать о переполнении. + неизвестно, может кто-то подбирается к стеку снизу - koyodza(08.10.2010 23:08 - 23:20)
- И мой и ваш способ, даст диагноз. Мой - это еще и profiler. Посмотрел ассемблерный листинг. Есть процедуры (не прерывания) которые сохраняют до 10 регистров в прологе. Задумался. Хочу понимать истинную картину. По каждому пациенту отдельно :) - Скрипач(08.10.2010 22:57)
- может, вначале всё-таки поставить диагноз? Или уже 100% известно, что это именно стек налазит? - koyodza(08.10.2010 22:48)
- И как ответить "откуда залетели"? Пока набросал процедурку. Получает параметр-метку, если стек "глубже" сохраняет новую "глубину" и метку в еепром. Если не даст ответ, заведу в еепром TOP10 :) глубин стека с метками. - Скрипач(08.10.2010 22:39)
- Если есть рекурсивные функции -- невозможно. С указателями на функции тоже трудно, но кое-как hitech-c для pic18 справляется... Что потенциально можно сделать: fk0(1085 знак., 08.10.2010 18:22)
- За коллекцию ссылок Спасибо! Но проблема в том, что кол-во сохраняемых в стек компилятором регистров величина ОЧЕНЬ переменная. "По-среднему" это как по больнице... Попробую натыкать по программе запись SP Скрипач(78 знак., 08.10.2010 20:26)
- Маленький стек -- зло. Да, надо брать среднюю температуру и умножать на 4 например. И такой заводить стек. Потому, что при развитии проекта всё равно расти будет и сверхточная оценка тут не нужна. Если alloca() не баловаться (для 8-битников -- fk0(55 знак., 08.10.2010 22:01)
- Так есть же в AVR-GCC вылет по переполнению стека? Тут вот ловить и в UART адрес выдавать. Это если брейкпоинт не поставить -- тогда вообще всё просто. - fk0(08.10.2010 21:59)
- За коллекцию ссылок Спасибо! Но проблема в том, что кол-во сохраняемых в стек компилятором регистров величина ОЧЕНЬ переменная. "По-среднему" это как по больнице... Попробую натыкать по программе запись SP Скрипач(78 знак., 08.10.2010 20:26)
- GCC will check that stack references are within the boundaries of the stack, if the option -fstack-check is specified. Но лучше поробовать увеличить стек. - ++(08.10.2010 17:56, ссылка, ссылка)
- Увеличить стек не получится никак. Он "растет вниз" и инициализируется адресом конца встроенного в кристал ОЗУ. По -fstack-check... что из этого реализовано для 8-битников AVR? - Скрипач(08.10.2010 20:22)
- Стек растёт и упирается в heap -- типично так. Это удобно, потому что для программиста и то и другое -- "свободная память". Поэтому про адрес конца не понял -- heap (malloc) отсутствует? Ну тогда да, тогда просто скорей MCU неадекватен задаче. - fk0(08.10.2010 22:02)
- Да, heap не используется. Про неадекватность MCU - скорее где-то в программе бага. Ее, родимую, и ловим :) - Скрипач(08.10.2010 22:32)
- Стек растёт и упирается в heap -- типично так. Это удобно, потому что для программиста и то и другое -- "свободная память". Поэтому про адрес конца не понял -- heap (malloc) отсутствует? Ну тогда да, тогда просто скорей MCU неадекватен задаче. - fk0(08.10.2010 22:02)
- Увеличить стек не получится никак. Он "растет вниз" и инициализируется адресом конца встроенного в кристал ОЗУ. По -fstack-check... что из этого реализовано для 8-битников AVR? - Скрипач(08.10.2010 20:22)
- заполнить память известным значением, после сброса первым делом всю память вычитать в последовательный порт, например - koyodza(08.10.2010 22:06)