|
IAR. Помогите разобраться с настройками |
|
|
|
Sep 9 2015, 13:04
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Потребовалось написать проект для ATTINY c 1 kB flash. IAR. При компиляции выдал ошибку и ругнулся на CSTACK и RSTACK. На жирных МК меня эти настройки не волновали. Поставил с TINY на SMALL и все. Сейчас наступил момент подробно разобраться с этими настройками. Поясните пожалуйста так, чтобы я понял как правильно лезть в эти настройки. При таких настройках как на картинке ошибка исчезла. Как смутно понял, так и поставил.
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Sep 11 2015, 03:59
|

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' будет уже не нужна и может быть использована. Как это реально будет происходить, зависит от реализации, т.е. поведения компилятора, оптимизации, плюс к этому ещё компилятор может сохранять (и так это обычно и происходит) часть регистров в стеке при вызовах (т.н. прологи/эпилоги функций) и т.д. Но вы всегда можете оценить максимально потребное количество памяти для стека и выделить так, чтобы хватило для ваших функций и "служебных" целей компилятора (их потребность можно оценить отдельно, посмотрев, что он передаёт через стек при вызовах функций, какие прологи/эпилоги, т.е. сколько регистров сохраняет в стеке и т.д.). И уже тут вы можете решить, сколько выделить памяти под стек. Если не хватает, то это повод и причина подумать, как и что изменить в программе - например, не заводить внутри функции локальных массивов, а использовать какой-нибудь другой приём для решения задачи. Компилятор не может охватить эту картину целиком, да и не его это задача. Тут только автор дизайна имеет полное представление и инструменты для руления. Немного опыта, и будете оценивать потребный размер стека на раз.  Успехов!
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|