реклама на сайте
подробности

 
 
> IAR. Помогите разобраться с настройками
demiurg1978
сообщение Sep 9 2015, 13:04
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Потребовалось написать проект для ATTINY c 1 kB flash. IAR. При компиляции выдал ошибку и ругнулся на CSTACK и RSTACK. На жирных МК меня эти настройки не волновали. Поставил с TINY на SMALL и все. Сейчас наступил момент подробно разобраться с этими настройками. Поясните пожалуйста так, чтобы я понял как правильно лезть в эти настройки.
При таких настройках как на картинке ошибка исчезла. Как смутно понял, так и поставил.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Sep 11 2015, 03:59
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



QUOTE (demiurg1978 @ Sep 9 2015, 20:46) *
Извините за такой вопрос, вы именно с AVR работаете? Это не подначка. Работу со стеком определяет компилятор. На стек я не могу повлиять.

Повлиять можете. Жёстко контролировать его расход компилятором - да, не можете, но это решается выделением размера стека с некоторым (обычно небольшим запасом). Но основное потребление стека всё-таки определяется вашей программой. Пример (пусть размер int на данной платформе 16 бит):
CODE
int a[100];

void f()
{
    int b[10];
    ...
}

int g()
{
    int c[20];
    
    f();

    ...
}


В этом примере массив 'a' выделяется в статической памяти, а массивы 'b' и 'c' - в т.н. автоматической или, другими словами, в стеке. Т.е. при вызове функции f() компилятор "откусит" в стеке 10*2 = 20 байт для размещения в нём массива 'b'. Аналогично, при вызове функции 'g' компилятор выделит в стеке 20*2 = 40 байт. Учитывая, что функция 'g' вызывает функцию 'f', суммарное потребление стека только под эти массивы может составить 20 + 40 = 60 байт. Но это при условии, что внутри функции 'f' время жизни массива 'b' длится дольше, чем наступит момент вызова функции 'g', иначе память, выделенная под массив 'b' к моменту вызова 'g' будет уже не нужна и может быть использована.

Как это реально будет происходить, зависит от реализации, т.е. поведения компилятора, оптимизации, плюс к этому ещё компилятор может сохранять (и так это обычно и происходит) часть регистров в стеке при вызовах (т.н. прологи/эпилоги функций) и т.д. Но вы всегда можете оценить максимально потребное количество памяти для стека и выделить так, чтобы хватило для ваших функций и "служебных" целей компилятора (их потребность можно оценить отдельно, посмотрев, что он передаёт через стек при вызовах функций, какие прологи/эпилоги, т.е. сколько регистров сохраняет в стеке и т.д.). И уже тут вы можете решить, сколько выделить памяти под стек. Если не хватает, то это повод и причина подумать, как и что изменить в программе - например, не заводить внутри функции локальных массивов, а использовать какой-нибудь другой приём для решения задачи. Компилятор не может охватить эту картину целиком, да и не его это задача. Тут только автор дизайна имеет полное представление и инструменты для руления. Немного опыта, и будете оценивать потребный размер стека на раз. sm.gif

Успехов!


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- demiurg1978   IAR. Помогите разобраться с настройками   Sep 9 2015, 13:04
- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 16:04) К...   Sep 9 2015, 13:17
|- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 20:17) ... Не...   Sep 9 2015, 13:21
|- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 16:21) в...   Sep 9 2015, 13:29
|- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 20:29) ... То...   Sep 9 2015, 13:31
|- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 16:31) Т...   Sep 9 2015, 13:45
|- - demiurg_spb   Цитата(demiurg1978 @ Sep 9 2015, 16:31) Т...   Sep 9 2015, 13:59
|- - demiurg1978   Цитата(demiurg_spb @ Sep 9 2015, 20:59) ....   Sep 9 2015, 14:09
|- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:09) Р...   Sep 9 2015, 14:11
||- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 21:11) ... Я ...   Sep 9 2015, 14:17
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:17) К...   Sep 9 2015, 14:22
||- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 21:22) ... Я ...   Sep 9 2015, 14:25
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:25) Я...   Sep 9 2015, 14:40
||- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 20:29) Скольк...   Sep 9 2015, 14:46
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:46) И...   Sep 9 2015, 14:53
||- - demiurg1978   Что-то диалог в тупик зашел. На ассемблере я могу ...   Sep 9 2015, 14:59
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:59) Н...   Sep 9 2015, 15:08
||- - Dog Pawlowa   Цитата(demiurg1978 @ Sep 9 2015, 17:59) Н...   Sep 9 2015, 16:25
||- - demiurg1978   Цитата(Dog Pawlowa @ Sep 9 2015, 23:25) А...   Sep 9 2015, 16:27
|||- - Dog Pawlowa   Цитата(demiurg1978 @ Sep 9 2015, 19:27) Н...   Sep 9 2015, 16:29
||- - zltigo   QUOTE (Dog Pawlowa @ Sep 9 2015, 19:25) А...   Sep 9 2015, 16:43
||- - demiurg1978   Цитата(Dog Pawlowa @ Sep 9 2015, 23:25) Б...   Sep 9 2015, 16:43
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 19:43) О...   Sep 9 2015, 16:49
||- - demiurg1978   Цитата(zltigo @ Sep 9 2015, 23:49) Вообще...   Sep 9 2015, 16:55
||- - demiurg_spb   Цитата(demiurg1978 @ Sep 9 2015, 19:55) В...   Sep 9 2015, 17:43
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 19:55) В...   Sep 9 2015, 19:06
||- - demiurg1978   Цитата(zltigo @ Sep 10 2015, 02:06) Так-ч...   Sep 9 2015, 19:44
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 22:44) Н...   Sep 9 2015, 20:23
||- - demiurg1978   Цитата(zltigo @ Sep 10 2015, 03:23) ... Б...   Sep 9 2015, 20:37
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 23:37) Б...   Sep 9 2015, 21:18
||- - Dog Pawlowa   Цитата(demiurg1978 @ Sep 9 2015, 23:37) н...   Sep 9 2015, 23:51
||- - demiurg1978   Цитата(Непомнящий Евгений @ Sep 10 2015, 12...   Sep 10 2015, 05:57
|- - Непомнящий Евгений   Цитата(demiurg1978 @ Sep 9 2015, 17:09) Р...   Sep 10 2015, 05:24
- - SSerge   На всякий случай уточню: листинг - это файл с расш...   Sep 9 2015, 15:18
- - Сергей Борщ   А ИАР при выводе расхода стека в листинг случайно ...   Sep 11 2015, 05:51
- - demiurg1978   Цитата(Сергей Борщ @ Sep 11 2015, 12:51) ...   Sep 11 2015, 06:07
|- - Сергей Борщ   Цитата(demiurg1978 @ Sep 11 2015, 09:07) ...   Sep 11 2015, 07:01
|- - demiurg1978   Цитата(Сергей Борщ @ Sep 11 2015, 14:01) ...   Sep 11 2015, 07:04
|- - Сергей Борщ   Цитата(demiurg1978 @ Sep 11 2015, 10:04) ...   Sep 11 2015, 07:21
|- - demiurg1978   Цитата(Сергей Борщ @ Sep 11 2015, 14:21) ...   Sep 11 2015, 08:45
- - Непомнящий Евгений   Цитата(Сергей Борщ @ Sep 11 2015, 08:51) ...   Sep 11 2015, 07:01
- - esaulenka   Цитата(Сергей Борщ @ Sep 11 2015, 08:51) ...   Sep 11 2015, 07:02


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016