|
Стек в IAR, IAR выдает ошибку |
|
|
|
 |
Ответов
|
Aug 3 2006, 08:53
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(Andy_F @ Aug 3 2006, 10:57)  Просто создаётся ощущение ненадёжности программирования - программа поработала-поработала, и зависла. Стек увеличил (CSTACK) - вроде работает нормально. Но где гарантия, что при выполнении ещё чего-то стек опять не исчерпается ? На этапе трансляции компилятор выдает информацию по потребности стека в каждой функции, можно посчитать с учетом вложенности функций. На этапе компоновке линкер выдает сообщение о нехватке стека. Кроме того, использование ОЗУ, размер программных сегментов и их размещение в памяти можно посмотреть в файле карты памяти на выходе линкера. При определении размера стека нужно учитывать потребности стека в процедурах прерывания. Самый худший случай: прерывание в при выполнении функции с наибольшим уровнем вложенности. А общие рекомендации таковы: 1. не размещать большие наборы данных в стековой памяти. Особенно это относится к массивам или переменным типов long и float. Для них лучше использовать статическую память, использование которой легче контроллировать. 2. не вызывать из процедур прерываний друге функции и делать сами процедуры обработки прерываний по возможности короче. Чем короче функция, тем меньше регистров в ней используется.
|
|
|
|
|
Aug 5 2006, 16:44
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(zltigo @ Aug 3 2006, 22:57)  Увы, линкер принципиально не может ничего сказать о нехватке каких-либо runtime распределяемых областей памяти. Единственно, что линкер может(вынужден) сообщить, это о полном отсутствии сегмента стека. Само собой. Линкер выдает сообщение о нехватке памяти, в том числе и стека. Точнее, выдается сообщение о нехватке сегмента под стек. Но это, опять же, тогда, когда вообще не хватает памяти данных (ОЗУ).
|
|
|
|
Сообщений в этой теме
ILYCHOFF Стек в IAR Jul 3 2006, 05:13 arttab Какой мк и сколько вы выделили под стек? Jul 3 2006, 07:21 ILYCHOFF МК Мега 16 CSTACK Size 0x20 RSTACK 16
значения п... Jul 3 2006, 07:52 Andy Mozzhevilov Сегмент стека не удалось разместить в памяти, то е... Jul 3 2006, 07:57 Abatt наверно программа у вас очень много ОЗУ использует... Jul 3 2006, 08:32 ILYCHOFF Вот я и не могу понять почему не хватает ОЗУ... Я ... Jul 3 2006, 10:32 _Bill Цитата(ILYCHOFF @ Jul 3 2006, 13:32) Вот ... Jul 3 2006, 11:47 ILYCHOFF Разместил весь текст во флеш проблемы решились... ... Jul 4 2006, 10:45 _Bill Цитата(ILYCHOFF @ Jul 4 2006, 13:45) Разм... Jul 4 2006, 11:03  Andy_F Цитата(_Bill @ Aug 3 2006, 12:53) На этап... Aug 3 2006, 19:50   rezident Цитата(zltigo @ Aug 4 2006, 01:57) Цитата... Aug 3 2006, 20:51 junoSynthesizer позволю себе поднять тему.
люди, подскажите... а ... Nov 28 2006, 17:34 IgorKossak junoSynthesizer, судя по листингу сегментов, Вы вы... Nov 28 2006, 17:58 junoSynthesizer к куче обращаются команды malloc и иже с ней? а ес... Nov 28 2006, 19:03 IgorKossak Цитата(junoSynthesizer @ Nov 28 2006, 18... Nov 30 2006, 13:43
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|