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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> 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
zltigo
сообщение Sep 9 2015, 13:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 16:04) *
Как смутно понял, так и поставил.

Пока Вы сами не поймете, как работает микроконтрорллер со стеками, что это за стеки и какая глубина их ВАМ В ВАШЕЙ ПРОГРАММЕ требуется ДЛЯ РАБОТЫ, а не зачем-то какому-то там "IAR" которому нужно заткунуть предупреждения, придется учить матчасть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 13:21
Сообщение #3


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 20:17) *
...

Не спешите желчь изливаться. Я знаю что это за стеки. Скажем, про глубину вложений я понял. RSTACK. Здесь я полностью ориентируюсь, какая глубина вложений у меня в программе. А вот CSTACK мне непонятно, что именно означает это число, и из каких соображений исходить, чтобы изменять это число.

Сообщение отредактировал demiurg1978 - Sep 9 2015, 13:22
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 13:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 16:21) *
вот CSTACK мне непонятно

Ну так изучите так-же, как и RSTACK. Явно ведь в том-же букваре, где и про Return STACK прочитали есть и про CSTACK в принципе это "просто" стек, как "у всех" для данных. Сколько Вы данных в стеке храните и через стек передаете, это только Вы знаете.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 13:31
Сообщение #5


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 20:29) *
...

То есть я должен исходить из максимального объема передаваемых параметров функций?

Сообщение отредактировал demiurg1978 - Sep 9 2015, 13:45
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 13:45
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 16:31) *
То есть я должен исходить из максимального объема параметров функций?

При этом параметры не всегда предаются через стек. Но на стеке хранятся и локальные переменные функции, опять-же те, которым места в регистрах не хватило. А любая функция может быть прервана обработчиком прерывания, которому так-же требуется стек...
Пути два - смотреть листинги, как регистровая пара указателя на стек меняется, либо ставить "побольше" до упора ругани линкера и во время работы контролировать степень использования, например по степени затирания заренее занесенной в стек информации.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 9 2015, 13:59
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(demiurg1978 @ Sep 9 2015, 16:31) *
То есть я должен исходить из максимального объема передаваемых параметров функций?

Скорее нет, чем да.
Важно тело функции - как много ему требуется на стеке для локальных переменных, не уместившихся в регистрах.
Прочитайте про стековый фрейм, применительно к конкретной архитектуре и конкретному компилятору.
Также важна и алгоритмическая часть: рекурсии например...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 14:09
Сообщение #8


Местный
***

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



Цитата(demiurg_spb @ Sep 9 2015, 20:59) *
...

Рекурсии пока отложим в сторону. Есть у меня функция. Как я могу понять, что у меня все будет нормально работать, хватит стека данных?

Сообщение отредактировал demiurg1978 - Sep 9 2015, 14:10
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 14:11
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 17:09) *
Рекурсии пока отложим в сторону. Есть у меня функция. Как я могу понять, что у меня все будет нормально работать, хватит стека данных?

Повторяю - смотрите листинг. По сишному соглашению стек восстанавливает вызываемая функция, таким образом увидите на сколько при выходе меняется указатель стека даже не вникая в содержимое кодов функции.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 14:17
Сообщение #10


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 21:11) *
...

Я вернул настройки, когда выдало ошибку.
CODE

Building configuration: timer_easy - Debug
Updating build tree...
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\events.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\events.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\kbd_drv.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\kbd_drv.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\main.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\main_def_func.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main_def_func.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\proc_timer.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\proc_timer.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\sys_timer.lst
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\sys_timer.r90
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\events.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\kbd_drv.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main_def_func.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\proc_timer.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\sys_timer.pbi
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Exe\timer_easy.dbg
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Exe\timer_easy.eep
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Exe\timer_easy.hex
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\timer_easy.pbd

22 file(s) deleted.
Updating build tree...

main_def_func.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\main_def_func.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\
-lCN F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib
-Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.

164 bytes of CODE memory
0 bytes of DATA memory (+ 2 bytes shared)

Errors: none
Warnings: none

events.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\events.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\ -lCN
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib -Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.

82 bytes of CODE memory (+ 4 bytes shared)
2 bytes of DATA memory

Errors: none
Warnings: none

kbd_drv.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\kbd_drv.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\ -lCN
F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib -Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.

156 bytes of CODE memory (+ 4 bytes shared)
2 bytes of DATA memory (+ 1 byte shared)

Errors: none
Warnings: none

main.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\main.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\ -lCN F:\
Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib -Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.

22 bytes of CODE memory

Errors: none
Warnings: none

proc_timer.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\proc_timer.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\
-lCN F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib
-Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.
Warning[Pe550]: variable "_led_blink" was set but never used F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\proc_timer.c 86
Warning[Pe550]: variable "led_1_blink_mode" was set but never used F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\proc_timer.c 87
Warning[Pe177]: variable "tmp_cnt_minutes" was declared but never referenced F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\proc_timer.c 88

106 bytes of CODE memory (+ 4 bytes shared)
4 bytes of DATA memory (+ 2 bytes shared)

Errors: none
Warnings: 3

sys_timer.c
iccavr.exe F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\sys_timer.c --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\
-lCN F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\ --initializers_in_flash --debug -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib
-Ohz

IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR
Copyright 1996-2012 IAR Systems AB.

192 bytes of CODE memory (+ 6 bytes shared)
16 bytes of DATA memory (+ 4 bytes shared)

Errors: none
Warnings: none

Linking
xlink.exe -Ointel-standard,(CODE)=.hex -Ointel-standard,(XDATA)=.eep F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\events.r90 F:\Work\
Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\kbd_drv.r90 F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main.r90 F:\Work\Projects\
ATMEL\IAR\C\TIMER_EASY\Debug\Obj\main_def_func.r90 F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\proc_timer.r90 F:\Work\Projects\
ATMEL\IAR\C\TIMER_EASY\Debug\Obj\sys_timer.r90 -o F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Exe\timer_easy.dbg -Fubrof8 -IC:\
Program Files\IAR Systems\Embedded Workbench 6.0\avr\LIB\ -f C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\src\template\
cfgtiny13.xcl -D_..X_HEAP_SIZE=10 -D_..X_TINY_HEAP_SIZE=0 -D_..X_NEAR_HEAP_SIZE=0 -D_..X_FAR_HEAP_SIZE=0 -D_..X_HUGE_HEAP_SIZE=0
-D_..X_CSTACK_SIZE=20 -D_..X_RSTACK_SIZE=10 -D_..X_FLASH_CODE_END=_..X_FLASH_END -f C:\Program Files\IAR Systems\Embedded
Workbench 6.0\avr\src\template\cfg0t.xcl -D_..X_FLASH_BASE=_..X_INTVEC_SIZE -H1895 -h(CODE)0-(_..X_INTVEC_SIZE-1)
-D_..X_CSTACK_BASE=_..X_SRAM_BASE -D_..X_CSTACK_END=_..X_SRAM_END -D_..X_RSTACK_BASE=_..X_SRAM_BASE
-D_..X_RSTACK_END=_..X_SRAM_END -s __program_start C:\Program Files\IAR Systems\Embedded Workbench 6.0\avr\LIB\CLIB\cl0t-ec_nomul.r90
-e_large_write=_formatted_write -e_large_read=_formatted_read

IAR Universal Linker V5.3.2.26
Copyright 1987-2012 IAR Systems AB.
Error[e16]: Segment RSTACK (size: 0x10 align: 0) is too long for segment definition. At least 0x8 more bytes needed. The problem occurred while
processing the segment placement command "-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_RSTACK_BASE-_..X_RSTACK_END", where at the
moment of placement the available memory ranges were "DATA:98-9f"
Reserved ranges relevant to this placement:
DATA:60-77 TINY_Z
DATA:78-97 CSTACK
DATA:98-9f RSTACK
Error while running Linker

Total number of errors: 1
Total number of warnings: 3



Как мне здесь понять, где смотреть? Я специально очистил проект и скомпилировал. Листинги модулей есть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 14:22
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 17:17) *
Как мне здесь понять, где смотреть?

Это НЕ листинг. Тут смотреть нечего. Ну разве только то, что не хватает 8 байт памяти и думать, рассматривая map файл, кто ее сожрал.
QUOTE
Листинги модулей есть.

Ну и изучайте В ЛИСТИНГЕ интересующую Вас функцию. Как - УЖЕ написал. Не переспрашивайте третий раз!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 14:25
Сообщение #12


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 21:22) *
...

Я понимаю, что это не листинг. Как понять, какой именно листинг смотреть, какую функцию смотреть?

Цитата(zltigo @ Sep 9 2015, 21:22) *
Не переспрашивайте третий раз!


Так поясните ПРИНЦИП, как это понять, где смотреть?

Сообщение отредактировал demiurg1978 - Sep 9 2015, 14:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 14:40
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 17:25) *
Я понимаю, что это не листинг.

Радует.
QUOTE
Как понять, какой именно листинг смотреть, какую функцию смотреть?

Тот в котором есть интересующая Вас функция. Листинги по именам файлов. Это вообще-то более, чем очевидно.
QUOTE
Так поясните ПРИНЦИП, как это понять, где смотреть?

http://electronix.ru/forum/index.php?showt...130340&hl=#


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 14:46
Сообщение #14


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 20:29) *
Сколько Вы данных в стеке храните и через стек передаете, это только Вы знаете.

Извините за такой вопрос, вы именно с AVR работаете? Это не подначка. Работу со стеком определяет компилятор. На стек я не могу повлиять.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 14:53
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (demiurg1978 @ Sep 9 2015, 17:46) *
Извините за такой вопрос, вы именно с AVR работаете?

И еще с более, чем с десятком котроллеров.
QUOTE
Работу со стеком определяет компилятор.

Да компилятор исходя из Ваших приказов.
QUOTE
На стек я не могу повлиять.

Да ну!!! Можете. Не прямо, конечно, сказав - а займи-ка компилятор стека в два раза меньше, ну и заодно ROM и RAM раза в три поменьше. Но программу пишете Вы. Значит влияете.
В данном случае речь идет об ОБЯЗАННОСТИ выделить нужное компиляторок количество памяти под стек.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:16
Рейтинг@Mail.ru


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