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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 23.11.2018, 15:10   #1
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 223
Вес репутации: 233/48
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию warning: возможно переполнение стека

Всем привет! Выскочило такое предупреждение:
warning: (1393) possible hardware stack overflow detected; estimated stack depth: 37
Как с этим можно побороться?
XC8 1.38, PIC18F46K40, ОЗУ использовано только 7%.
Dima вне форума   Ответить с цитированием
Старый 23.11.2018, 15:23   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,923
Вес репутации: 3528/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: warning: возможно переполнение стека

Как с этим можно побороться? - предполагаю что компилятор предупреждает Вас о возможном исчерпании стека возвратов.
Уменьшить число вложенных вызовов функций.
besogon вне форума   Ответить с цитированием
Старый 23.11.2018, 15:47   #3
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 223
Вес репутации: 233/48
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: warning: возможно переполнение стека

А увеличить стек можно?
Dima вне форума   Ответить с цитированием
Старый 23.11.2018, 16:01   #4
petrd
Senior Member
 
Регистрация: 09.02.2008
Адрес: Воронеж
Возраст: 47
Сообщений: 1,777
Вес репутации: 1860/75
petrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant futurepetrd has a brilliant future
Отправить сообщение для petrd с помощью ICQ
По умолчанию Re: warning: возможно переполнение стека

Цитата:
Сообщение от Dima Посмотреть сообщение
А увеличить стек можно?
Нет, он же ругается на hardware stack. Не увеличивать стек надо, а разбираться с написанной программой, там проблема.
__________________
License MikroC, MikroC PRO and EasyPIC5 by mikroElektronika (the dead mikroICD replaced PICKit2 & PICKit3)
petrd вне форума   Ответить с цитированием
Старый 23.11.2018, 16:06   #5
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,923
Вес репутации: 3528/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: warning: возможно переполнение стека

Dima
А увеличить стек можно? - скорее можно не использовать аппаратный стек возвратов. сейчас не помню механику этого всего и в общем случае код от этого лучше не становится.

Но, в целом если никак не сделать число вложенных меньше - то почему нет.
besogon вне форума   Ответить с цитированием
Старый 23.11.2018, 16:51   #6
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,374
Вес репутации: 3125/96
Марк 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: warning: возможно переполнение стека

Цитата:
Сообщение от Dima Посмотреть сообщение
ОЗУ использовано только 7%.
В 8-разрядной платформе Микрочипа стек находится не в ОЗУ.
Вообще то исчерпание стека, как правило, ошибка кода. Типа рекурсивных вызовов.
Марк вне форума   Ответить с цитированием
Старый 23.11.2018, 22:20   #7
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 223
Вес репутации: 233/48
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: warning: возможно переполнение стека

Да нету вообще рекурсии. Просто добавил возможность выбора 2-х дисплеев. т.е.:
void lcd_init()
{if (display_type == display_old) lcd_init_old();
else lcd_init_new();
}
и т.д.
С одним экраном такого небыло...
Dima вне форума   Ответить с цитированием
Старый 24.11.2018, 21:34   #8
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,923
Вес репутации: 3528/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: warning: возможно переполнение стека

Dima
у Вас же нет frontend/backend структуры.
сделайте с помощью препроцессора.
Код:
#if defined LCD_OLD
#define LCD_INIT() lcd_init_old()

#elif defined LCD_NEW
#define LCD_INIT() lcd_init_new()

#else
#error display type should be specified
#endif
besogon вне форума   Ответить с цитированием
Старый 27.11.2018, 12:20   #9
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 223
Вес репутации: 233/48
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: warning: возможно переполнение стека

Цитата:
Сообщение от besogon Посмотреть сообщение
Dima
у Вас же нет frontend/backend структуры.
сделайте с помощью препроцессора.
Спасибо за ответ. Так не пойдет, Одна прошивка на разные варианты.
Сделал так:
Код:
void lcd_init()
{if (display_type == display_old) 
  {инициализазия для старого дисплея
}
else 
  {инициализазия для нового дисплея
  }
}
Варнинг пропал, да и памяти меньше съело.
Dima вне форума   Ответить с цитированием
Старый 27.11.2018, 14:44   #10
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,537
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: warning: возможно переполнение стека

Цитата:
Сообщение от Dima Посмотреть сообщение
Спасибо за ответ. Так не пойдет, Одна прошивка на разные варианты.
Сделал так:
Код:
void lcd_init()
{if (display_type == display_old) 
  {инициализазия для старого дисплея
}
else 
  {инициализазия для нового дисплея
  }
}
Варнинг пропал, да и памяти меньше съело.

Потому что уменьшил вложенность функций - раньше вызывались lcd_init_old() и lcd_init_new(), в них внутри небось вызывались функции передачи по какому-то интерфесу, а в низ могло еще что-то вызываться. Вот оно и "набежало".
DimaS вне форума   Ответить с цитированием
Старый 01.12.2018, 13:40   #11
Sergey K
Senior Member
 
Регистрация: 23.10.2008
Адрес: Киев
Возраст: 36
Сообщений: 267
Вес репутации: 422/44
Sergey K is just really niceSergey K is just really niceSergey K is just really niceSergey K is just really niceSergey K is just really nice
По умолчанию Re: warning: возможно переполнение стека

На PIC16 с его 8-мю уровнями стека я боролся проепроцессором #inline
и #separate, в зависимости от логики кода. С #inline функция не вызывается, а вставляется копия вместо ее вызова (т.е. код функции будет повторяться во всех точках ее вызова = растет размер прошивки, но снижается глубина стека).
Sergey K вне форума   Ответить с цитированием
Старый 02.12.2018, 11:17   #12
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,923
Вес репутации: 3528/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: warning: возможно переполнение стека

Sergey K
у меня был проект, где я боролся.
по моему опыту так не надо делать. яркий пример когда неправильно выбранный МК доставляет на ровном месте головную боль инженеру.
в итоге конечно все это завелось, но на практике будь еще одной корректировкой ТЗ больше - и всё. смена МК и работа не приносящая прибыли.
besogon вне форума   Ответить с цитированием
Старый 02.12.2018, 14:21   #13
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,374
Вес репутации: 3125/96
Марк 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: warning: возможно переполнение стека

Цитата:
Сообщение от besogon Посмотреть сообщение
так не надо делать
Это все теория. Если бы все знать заранее, то все бы всё смогли. И не было бы никогда косяков.
Нет никаких гарантий, что выбрав другой МК, Вы бы не обрели такой же или еще бОльший геморрой, но в чем то другом. Или аналогичный геморрой обрел бы тот, кто работает с Вами вместе над этим проектом.
Из этого не следует, что не нужно думать над выбором, но эти "думы" не гарантируют гладкой дороги к цели.
"Лучшее враг хорошего..." С.П.К.
Марк вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Warning (752) conversion to shorter data type HeKeD Вопросы начинающих 29 08.12.2016 12:14
можно ли диагностить переполнение стека при компиляции? pasha_zv Вопросы начинающих 4 23.02.2016 03:28
Возможно ли переполнение (опрокидывание) Pic ового АЦП при превышении сигнала над опорой ? qwerty1 Продукция MICROCHIP 14 16.11.2010 17:38
dsPICDEM 2 Евгений Новый Продукция MICROCHIP 34 31.12.2008 00:56
Переполнение стека? maxNTF Продукция MICROCHIP 15 03.12.2008 18:52


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


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