demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Потребовалось написать проект для ATTINY c 1 kB flash. IAR. При компиляции выдал ошибку и ругнулся на CSTACK и RSTACK. На жирных МК меня эти настройки не волновали. Поставил с TINY на SMALL и все. Сейчас наступил момент подробно разобраться с этими настройками. Поясните пожалуйста так, чтобы я понял как правильно лезть в эти настройки. При таких настройках как на картинке ошибка исчезла. Как смутно понял, так и поставил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Как смутно понял, так и поставил. Пока Вы сами не поймете, как работает микроконтрорллер со стеками, что это за стеки и какая глубина их ВАМ В ВАШЕЙ ПРОГРАММЕ требуется ДЛЯ РАБОТЫ, а не зачем-то какому-то там "IAR" которому нужно заткунуть предупреждения, придется учить матчасть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 (изменено) · Жалоба ... Не спешите желчь изливаться. Я знаю что это за стеки. Скажем, про глубину вложений я понял. RSTACK. Здесь я полностью ориентируюсь, какая глубина вложений у меня в программе. А вот CSTACK мне непонятно, что именно означает это число, и из каких соображений исходить, чтобы изменять это число. Изменено 9 сентября, 2015 пользователем demiurg1978 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба вот CSTACK мне непонятно Ну так изучите так-же, как и RSTACK. Явно ведь в том-же букваре, где и про Return STACK прочитали есть и про CSTACK в принципе это "просто" стек, как "у всех" для данных. Сколько Вы данных в стеке храните и через стек передаете, это только Вы знаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 (изменено) · Жалоба ... То есть я должен исходить из максимального объема передаваемых параметров функций? Изменено 9 сентября, 2015 пользователем demiurg1978 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба То есть я должен исходить из максимального объема параметров функций? При этом параметры не всегда предаются через стек. Но на стеке хранятся и локальные переменные функции, опять-же те, которым места в регистрах не хватило. А любая функция может быть прервана обработчиком прерывания, которому так-же требуется стек... Пути два - смотреть листинги, как регистровая пара указателя на стек меняется, либо ставить "побольше" до упора ругани линкера и во время работы контролировать степень использования, например по степени затирания заренее занесенной в стек информации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба То есть я должен исходить из максимального объема передаваемых параметров функций? Скорее нет, чем да. Важно тело функции - как много ему требуется на стеке для локальных переменных, не уместившихся в регистрах. Прочитайте про стековый фрейм, применительно к конкретной архитектуре и конкретному компилятору. Также важна и алгоритмическая часть: рекурсии например... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 (изменено) · Жалоба ... Рекурсии пока отложим в сторону. Есть у меня функция. Как я могу понять, что у меня все будет нормально работать, хватит стека данных? Изменено 9 сентября, 2015 пользователем demiurg1978 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Рекурсии пока отложим в сторону. Есть у меня функция. Как я могу понять, что у меня все будет нормально работать, хватит стека данных? Повторяю - смотрите листинг. По сишному соглашению стек восстанавливает вызываемая функция, таким образом увидите на сколько при выходе меняется указатель стека даже не вникая в содержимое кодов функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба ... Я вернул настройки, когда выдало ошибку. 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 Как мне здесь понять, где смотреть? Я специально очистил проект и скомпилировал. Листинги модулей есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Как мне здесь понять, где смотреть? Это НЕ листинг. Тут смотреть нечего. Ну разве только то, что не хватает 8 байт памяти и думать, рассматривая map файл, кто ее сожрал. Листинги модулей есть. Ну и изучайте В ЛИСТИНГЕ интересующую Вас функцию. Как - УЖЕ написал. Не переспрашивайте третий раз! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 (изменено) · Жалоба ... Я понимаю, что это не листинг. Как понять, какой именно листинг смотреть, какую функцию смотреть? Не переспрашивайте третий раз! Так поясните ПРИНЦИП, как это понять, где смотреть? Изменено 9 сентября, 2015 пользователем demiurg1978 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Я понимаю, что это не листинг. Радует. Как понять, какой именно листинг смотреть, какую функцию смотреть? Тот в котором есть интересующая Вас функция. Листинги по именам файлов. Это вообще-то более, чем очевидно. Так поясните ПРИНЦИП, как это понять, где смотреть? http://electronix.ru/forum/index.php?showt...130340&hl=# Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg1978 1 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Сколько Вы данных в стеке храните и через стек передаете, это только Вы знаете. Извините за такой вопрос, вы именно с AVR работаете? Это не подначка. Работу со стеком определяет компилятор. На стек я не могу повлиять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 9 сентября, 2015 Опубликовано 9 сентября, 2015 · Жалоба Извините за такой вопрос, вы именно с AVR работаете? И еще с более, чем с десятком котроллеров. Работу со стеком определяет компилятор. Да компилятор исходя из Ваших приказов. На стек я не могу повлиять. Да ну!!! Можете. Не прямо, конечно, сказав - а займи-ка компилятор стека в два раза меньше, ну и заодно ROM и RAM раза в три поменьше. Но программу пишете Вы. Значит влияете. В данном случае речь идет об ОБЯЗАННОСТИ выделить нужное компиляторок количество памяти под стек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться