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

 
 
> 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
Ответов
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
demiurg_spb
сообщение Sep 9 2015, 13:59
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 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
demiurg1978
сообщение Sep 9 2015, 14:59
Сообщение #15


Местный
***

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



Что-то диалог в тупик зашел. На ассемблере я могу контролировать. Как я могу изначально контролировать, что мне накомпилирует компилятор си? Уровень оптимизицаии да, вид оптимизации да. Но стек данных?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 9 2015, 16:25
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(demiurg1978 @ Sep 9 2015, 17:59) *
Но стек данных?

Да при чем тут стеки вообще?!
Банально не хватает памяти, данные в ОЗУ (обычные данные, не стек) заняли столько места, что даже под более чем скромный стек места нет.

Ну найдете 2 байта, дальше что? - программу дальше не увеличить.
Или уж очень криво написана, или контроллер на пределе.

Цитата(zltigo @ Sep 9 2015, 18:08) *
И я даже знаю почему - Вы с тупым упорством не желаете заглянуть в листинг в котором видны использования стеков.

А первичная причина в том, что в ИАРе по умолчанию они не выводятся, нужно галку поставить wink.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Sep 9 2015, 16:43
Сообщение #17


Местный
***

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



Цитата(Dog Pawlowa @ Sep 9 2015, 23:25) *
Банально не хватает памяти, данные в ОЗУ (обычные данные, не стек) заняли столько места, что даже под более чем скромный стек места нет.

А первичная причина в том, что в ИАРе по умолчанию они не выводятся, нужно галку поставить wink.gif

Памяти хватает. Есть 64 байт. Компилятор пишет что занято 61 байт. Учитываем глубину вложений, прерывания. Я поставил 8 байт. Хватает. Гонял программу в симуляторе на всю глубину вложений+прерывания. Остается стек данных.

Листинг включен. Показаны CSTACK и RSTACK. Если смотреть по каждому файлу листинга криминала не вижу.

Осталось понять, как компилятор подсчитывает память. И на какие цифры в будущем смотреть, чтобы выявить проблему.

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


Гуру
******

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



QUOTE (demiurg1978 @ Sep 9 2015, 19:43) *
Осталось понять, как компилятор подсчитывает память.

Вообще-то осталось понять, что компилятор НЕ ПОДСЧИТЫВАЕТ ПАМЯТЬ выделемую для стеков!


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


Местный
***

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



Цитата(zltigo @ Sep 9 2015, 23:49) *
Вообще-то осталось понять, что компилятор НЕ ПОДСЧИТЫВАЕТ ПАМЯТЬ выделемую для стеков!

Вот что вы нервничаете? Мы знакомы? Ни я вам ни вы мне ничего не сделали, чтобы вы позволяли себе такую резкость. Я на си пишу не так давно. До этого писал на асме. Ессно, некоторые вещи представляют для меня некоторую трудность. Терминология опять же. Для вас-то что-то можеть быть уже пройденный вдоль и поперек этап. А мне пока некоторые вещи еще в новинку. Скажите спасибо, что не на ардуине или CVAVR проекты пишу...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 9 2015, 19:06
Сообщение #20


Гуру
******

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



QUOTE (demiurg1978 @ Sep 9 2015, 19:55) *
Вот что вы нервничаете?

Зачем?
QUOTE
чтобы вы позволяли себе такую резкость.

Это Вы себе позволяете НЕ читать и НЕ понимать того, что Вам пишут, причем неоднократно.
QUOTE
Я на си пишу не так давно. До этого писал на асме.

Вынужден Вам сообщить, что стеки это не Си и не ACM, это контроллер. И память под эти стеки должна быть выделена, и указатели проинициализированы, хоть на чем пишите, хоть в кодах, хоть на суахили. Так-что как Вы "писали" на АСМ, сейчас видно как Вы пишите на Си sad.gif
QUOTE
Скажите спасибо, что не на ардуине или CVAVR проекты пишу...

Спасибо. Спасибо мне ничего не стоит, в отличие от затрат времени на объяснения и повторения.




QUOTE (demiurg_spb @ Sep 9 2015, 20:43) *
Без zltigo на форуме последние пару лет было даже как-то пусто...

Увы, не могу обещать, что надолго вернулся sm.gif


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


Местный
***

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



Цитата(zltigo @ Sep 10 2015, 02:06) *
Так-что как Вы "писали" на АСМ, сейчас видно как Вы пишите на Си

Не собираюсь вам что-то доказывать.
Позволили себе фи в мою сторону, хлебайте теперь. Покажите делом. Поступим просто. Я собрал проект из единственного модуля. Покажите здесь криминал. Исходные данные: ATTINY13. 64 байта ОЗУ. Настройки CSTACK 0x20. RSTACK 8. Найдите криминал в листинге:
CODE

###############################################################################
# #
# IAR C/C++ Compiler V6.12.1.50500 for Atmel AVR 10/Sep/2015 01:38:52 #
# Copyright 1996-2012 IAR Systems AB. #
# #
# Source file = F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\sys_timer.c #
# Command line = F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\sys_timer.c #
# --cpu=tiny13 -mt -o F:\Work\Projects\ATMEL\IAR\C\TIMER_E #
# ASY\Debug\Obj\ -lC F:\Work\Projects\ATMEL\IAR\C\TIMER_EA #
# SY\Debug\List\ -lA F:\Work\Projects\ATMEL\IAR\C\TIMER_EA #
# SY\Debug\List\ --initializers_in_flash --debug #
# -DENABLE_BIT_DEFINITIONS -e --eeprom_size 64 --clib -Ohz #
# List file = F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\List\sys_t #
# imer.lst #
# Object file = F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\Debug\Obj\sys_ti #
# mer.r90 #
# #
# #
###############################################################################

F:\Work\Projects\ATMEL\IAR\C\TIMER_EASY\sys_timer.c
1 //========================================================================
2 #include "sys_timer.h"

\ In segment ABSOLUTE, at 0x59
\ union <unnamed> volatile __io _A_TIMSK0
\ _A_TIMSK0:
\ 00000000 DS8 1

\ In segment ABSOLUTE, at 0x56
\ union <unnamed> volatile __io _A_OCR0A
\ _A_OCR0A:
\ 00000000 DS8 1

\ In segment ABSOLUTE, at 0x53
\ union <unnamed> volatile __io _A_TCCR0B
\ _A_TCCR0B:
\ 00000000 DS8 1

\ In segment ABSOLUTE, at 0x52
\ union <unnamed> volatile __io _A_TCNT0
\ _A_TCNT0:
\ 00000000 DS8 1
3 //========================================================================
4
5 //========================================================================
6 u08 sys_tick;
7 //========================================================================
8
9 //========================================================================
10 #pragma vector = TIM0_COMPA_vect

\ In segment CODE, align 2, keep-with-next
11 __interrupt void Timer0Comp(void)
\ Timer0Comp:
12 {
\ 00000000 93EA ST -Y, R30
\ 00000002 931A ST -Y, R17
\ 00000004 930A ST -Y, R16
\ 00000006 B71F IN R17, 0x3F
13 ST_OCR += SYS_TIME;
\ 00000008 B706 IN R16, 0x36
\ 0000000A 560A SUBI R16, 106
\ 0000000C BF06 OUT 0x36, R16
14 set_bit (sys_tick, SYS_TICK);
\ 0000000E .... LDI R30, Timers_Queue
\ 00000010 8904 LDD R16, Z+20
\ 00000012 6001 ORI R16, 0x01
\ 00000014 8B04 STD Z+20, R16
15 }
\ 00000016 BF1F OUT 0x3F, R17
\ 00000018 9109 LD R16, Y+
\ 0000001A 9119 LD R17, Y+
\ 0000001C 91E9 LD R30, Y+
\ 0000001E 9518 RETI
\ 00000020 REQUIRE _A_OCR0A
16 //========================================================================
17
18 //========================================================================

\ In segment CODE, align 2, keep-with-next
19 void init_sys_timer (void)
\ init_sys_timer:
20 {
21 sys_tick = 0;
\ 00000000 E000 LDI R16, 0
\ 00000002 .... LDI R30, Timers_Queue
\ 00000004 8B04 STD Z+20, R16
22 ST_TCNT = 0;
\ 00000006 BF02 OUT 0x32, R16
23 set_bit (ST_TIMSK, ST_OCIE);
\ 00000008 B709 IN R16, 0x39
\ 0000000A 6004 ORI R16, 0x04
\ 0000000C BF09 OUT 0x39, R16
24 ST_OCR = SYS_TIME;
\ 0000000E E906 LDI R16, 150
\ 00000010 BF06 OUT 0x36, R16
25 ST_TCCR |= ((1<<CS0) | (1<<CS1));
\ 00000012 B703 IN R16, 0x33
\ 00000014 6003 ORI R16, 0x03
\ 00000016 BF03 OUT 0x33, R16
26 }
\ 00000018 9508 RET
\ 0000001A REQUIRE _A_TCNT0
\ 0000001A REQUIRE _A_TIMSK0
\ 0000001A REQUIRE _A_OCR0A
\ 0000001A REQUIRE _A_TCCR0B

\ In segment TINY_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: TINY_Z>`
27 //------------------------------------------------------------------------
28
29 //------------------------------------------------------------------------
30 struct tmrs_queue Timers_Queue [TMRS_QUANTITY];
\ Timers_Queue:
\ 00000000 DS8 20
\ sys_tick:
\ 00000014 DS8 1
31

\ In segment CODE, align 2, keep-with-next
32 void service_timers(void)
\ service_timers:
33 {
34 if (sys_tick & (1<<SYS_TICK))
\ 00000000 .... LDI R30, Timers_Queue
\ 00000002 8904 LDD R16, Z+20
\ 00000004 FF00 SBRS R16, 0
\ 00000006 C01A RJMP ??service_timers_0
35 {
36 clr_bit (sys_tick, SYS_TICK);
\ 00000008 7F0E ANDI R16, 0xFE
\ 0000000A 8B04 STD Z+20, R16
37
38 u08 i;
39
40 for (i = 0; i < TMRS_QUANTITY; i++)
\ 0000000C E000 LDI R16, 0
41 {
42 if (Timers_Queue [i]. tmr_flags & (1<<TMR_UNLOCK))
\ ??service_timers_1:
\ 0000000E 2F10 MOV R17, R16
\ 00000010 0F11 LSL R17
\ 00000012 0F11 LSL R17
\ 00000014 0F10 ADD R17, R16
\ 00000016 .... LDI R30, Timers_Queue
\ 00000018 0FE1 ADD R30, R17
\ 0000001A 8110 LD R17, Z
\ 0000001C FF10 SBRS R17, 0
\ 0000001E C00B RJMP ??service_timers_2
43 {
44 Timers_Queue [i]. tmr_cnt--;
\ 00000020 8121 LDD R18, Z+1
\ 00000022 8132 LDD R19, Z+2
\ 00000024 5021 SUBI R18, 1
\ 00000026 4030 SBCI R19, 0
\ 00000028 8321 STD Z+1, R18
\ 0000002A 8332 STD Z+2, R19
45
46 if (Timers_Queue[i]. tmr_cnt == 0)
\ 0000002C 8121 LDD R18, Z+1
\ 0000002E 2B23 OR R18, R19
\ 00000030 F411 BRNE ??service_timers_2
47 set_bit (Timers_Queue[i]. tmr_flags, TIME_OUT);
\ 00000032 6012 ORI R17, 0x02
\ 00000034 8310 ST Z, R17
48 }
49 }
\ ??service_timers_2:
\ 00000036 9503 INC R16
\ 00000038 3004 CPI R16, 4
\ 0000003A F348 BRCS ??service_timers_1
50 }
51 }
\ ??service_timers_0:
\ 0000003C 9508 RET
52
53 //------------------------------------------------------------------------
54
55 //------------------------------------------------------------------------

\ In segment CODE, align 2, keep-with-next
56 void set_timer(u08 num_tmr, u16 time)
\ set_timer:
57 {
58 set_bit (Timers_Queue [num_tmr]. tmr_flags, TMR_UNLOCK);
\ 00000000 .... RCALL ?Subroutine1
\ ??CrossCallReturnLabel_5:
\ 00000002 6001 ORI R16, 0x01
\ 00000004 8300 ST Z, R16
59 Timers_Queue [num_tmr]. tmr_cnt = time;
\ 00000006 8321 STD Z+1, R18
\ 00000008 8332 STD Z+2, R19
60 }
\ 0000000A 9508 RET

\ In segment CODE, align 2, keep-with-next
\ ?Subroutine1:
\ 00000000 .... RCALL ?Subroutine2
\ ??CrossCallReturnLabel_1:
\ 00000002 .... LDI R30, Timers_Queue
\ 00000004 0FE0 ADD R30, R16
\ 00000006 REQUIRE ?Subroutine3
\ 00000006 ; // Fall through to label ?Subroutine3

\ In segment CODE, align 2, keep-with-next
\ ?Subroutine3:
\ 00000000 8100 LD R16, Z
\ 00000002 9508 RET

\ In segment CODE, align 2, keep-with-next
\ ?Subroutine2:
\ 00000000 2F10 MOV R17, R16
\ 00000002 0F00 LSL R16
\ 00000004 0F00 LSL R16
\ 00000006 0F01 ADD R16, R17
\ 00000008 9508 RET
61 //------------------------------------------------------------------------
62
63 //------------------------------------------------------------------------

\ In segment CODE, align 2, keep-with-next
64 u08 wait(u08 num_tmr)
\ wait:
65
66 {
67 if(Timers_Queue [num_tmr]. tmr_flags & (1<<TIME_OUT))
\ 00000000 .... RCALL ?Subroutine1
\ ??CrossCallReturnLabel_6:
\ 00000002 FF01 SBRS R16, 1
\ 00000004 C004 RJMP ??wait_0
68 {
69 clr_bit (Timers_Queue [num_tmr]. tmr_flags, TIME_OUT);
\ 00000006 7F0D ANDI R16, 0xFD
\ 00000008 8300 ST Z, R16
70 return 1;
\ 0000000A E001 LDI R16, 1
\ 0000000C 9508 RET
71 }
72 else
73 return 0;
\ ??wait_0:
\ 0000000E E000 LDI R16, 0
\ 00000010 9508 RET
74 }
75 //========================================================================
76

\ In segment CODE, align 2, keep-with-next
77 void set_timer_time_out (u08 a)
\ set_timer_time_out:
78 {
79 set_bit (Timers_Queue [a] .tmr_flags, TIME_OUT);
\ 00000000 .... RCALL ?Subroutine0
\ ??CrossCallReturnLabel_2:
\ 00000002 6002 ORI R16, 0x02
\ 00000004 REQUIRE ?Subroutine4
\ 00000004 ; // Fall through to label ?Subroutine4
80 }

\ In segment CODE, align 2, keep-with-next
\ ?Subroutine4:
\ 00000000 8300 ST Z, R16
\ 00000002 9508 RET

\ In segment CODE, align 2, keep-with-next
\ ?Subroutine0:
\ 00000000 .... RCALL ?Subroutine2
\ ??CrossCallReturnLabel_0:
\ 00000002 2FE0 MOV R30, R16
\ 00000004 .... SUBI R30, (-(Timers_Queue) & 0xFF)
\ 00000006 .... RJMP ?Subroutine3
81

\ In segment CODE, align 2, keep-with-next
82 void set_timer_active (u08 a)
\ set_timer_active:
83 {
84 set_bit (Timers_Queue [a] .tmr_flags, TMR_UNLOCK);
\ 00000000 .... RCALL ?Subroutine0
\ ??CrossCallReturnLabel_3:
\ 00000002 6001 ORI R16, 0x01
\ 00000004 .... RJMP ?Subroutine4
85 }
86

\ In segment CODE, align 2, keep-with-next
87 void set_timer_no_active (u08 a)
\ set_timer_no_active:
88 {
89 clr_bit (Timers_Queue [a] .tmr_flags, TMR_UNLOCK);
\ 00000000 .... RCALL ?Subroutine0
\ ??CrossCallReturnLabel_4:
\ 00000002 7F0E ANDI R16, 0xFE
\ 00000004 .... RJMP ?Subroutine4
90 }

\ In segment INTVEC, offset 0xc, root
\ `??Timer0Comp??INTVEC 12`:
\ 0000000C .... RJMP Timer0Comp

Maximum stack usage in bytes:

CSTACK RSTACK Function
------ ------ --------
3 2 Timer0Comp
0 2 init_sys_timer
0 2 service_timers
0 2 set_timer
0 2 set_timer_active
0 2 set_timer_no_active
0 2 set_timer_time_out
0 2 wait


Segment part sizes:

Bytes Function/Label
----- --------------
2 ??Timer0Comp??INTVEC 12
8 ?Subroutine0
6 ?Subroutine1
10 ?Subroutine2
4 ?Subroutine3
4 ?Subroutine4
32 Timer0Comp
21 Timers_Queue
sys_tick
1 _A_OCR0A
1 _A_TCCR0B
1 _A_TCNT0
1 _A_TIMSK0
26 init_sys_timer
62 service_timers
12 set_timer
6 set_timer_active
6 set_timer_no_active
4 set_timer_time_out
18 wait
4 -- Other


4 bytes in segment ABSOLUTE
198 bytes in segment CODE
4 bytes in segment INITTAB
2 bytes in segment INTVEC
21 bytes in segment TINY_Z

198 bytes of CODE memory (+ 6 bytes shared)
21 bytes of DATA memory (+ 4 bytes shared)

Errors: none
Warnings: none



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


Гуру
******

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



QUOTE (demiurg1978 @ Sep 9 2015, 22:44) *
Не собираюсь вам что-то доказывать.

А я и не спрашивал от Вас "доказательств" чего-либо по причине нахренненужности.
QUOTE
Позволили себе фи в мою сторону

Это констатация факта, так-что включайте мозг, а не эмоции.
QUOTE
Покажите здесь криминал.

Криминал Вам уже ПОКАЗАЛ линкер, кторый сказал, что RAM затребованной Вами при написании этой программы замного будет.
http://electronix.ru/forum/index.php?showt...t&p=1363816


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


Местный
***

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



Цитата(zltigo @ Sep 10 2015, 03:23) *
...

Без эмоций уже не получится, вы пришли, на две страницы затроллили нахер тему, информации до сих пор я не получил. Хорошо, вы вытрепнулись. Я вам выложил листинг. Покажите мне пальцем, ткните носом, в каком месте не хватает ОЗУ. Если вы мне не ответите на этот вопрос, идите мимо, по хорошему вас прошу.

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


Гуру
******

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



QUOTE (demiurg1978 @ Sep 9 2015, 23:37) *
Без эмоций уже не получится, вы пришли, на две страницы затроллили нахер тему, информации до сих пор я не получил.

Получили, но не смогли заставить себя понять, завязнув в упорном убеждении, что компилятор все распределение памяти должен сделать за Вас.
QUOTE
Я вам выложил листинг. Покажите мне пальцем, ткните носом, в каком месте не хватает ОЗУ. Если вы мне не ответите на этот вопрос, идите мимо, по хорошему вас прошу.

Повторю ответ уже в который раз, но ведь Вы так и не поймете.
Не хватает байта. 25 байт Вы выделеили под переменные, 32 байта под один стек и 8 под другой (это с Ваших слов, ибо скрипта линкера Вы не показли). Теперь, если не верите линкеру в его диагнозе, и не можете посчитать в уме, то возьмите калькулятор.
На вопрос очередной раз - ответил, но все равно пойду, ибо жаль бестолку время тратить.


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

Сообщений в этой теме
- demiurg1978   IAR. Помогите разобраться с настройками   Sep 9 2015, 13:04
|- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 16:31) Т...   Sep 9 2015, 13:45
||- - zltigo   QUOTE (demiurg1978 @ Sep 9 2015, 17:59) Н...   Sep 9 2015, 15:08
||- - 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
||- - demiurg_spb   Цитата(demiurg1978 @ Sep 9 2015, 19:55) В...   Sep 9 2015, 17:43
||- - 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
- - dxp   QUOTE (demiurg1978 @ Sep 9 2015, 20:46) И...   Sep 11 2015, 03:59
- - Сергей Борщ   А ИАР при выводе расхода стека в листинг случайно ...   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 - 21:51
Рейтинг@Mail.ru


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