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

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

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

|
QUOTE (demiurg1978 @ Sep 9 2015, 16:04)  Как смутно понял, так и поставил. Пока Вы сами не поймете, как работает микроконтрорллер со стеками, что это за стеки и какая глубина их ВАМ В ВАШЕЙ ПРОГРАММЕ требуется ДЛЯ РАБОТЫ, а не зачем-то какому-то там "IAR" которому нужно заткунуть предупреждения, придется учить матчасть.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 9 2015, 13:21
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 9 2015, 20:17)  ... Не спешите желчь изливаться. Я знаю что это за стеки. Скажем, про глубину вложений я понял. RSTACK. Здесь я полностью ориентируюсь, какая глубина вложений у меня в программе. А вот CSTACK мне непонятно, что именно означает это число, и из каких соображений исходить, чтобы изменять это число.
Сообщение отредактировал demiurg1978 - Sep 9 2015, 13:22
|
|
|
|
|
Sep 9 2015, 13:31
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 9 2015, 20:29)  ... То есть я должен исходить из максимального объема передаваемых параметров функций?
Сообщение отредактировал demiurg1978 - Sep 9 2015, 13:45
|
|
|
|
|
Sep 9 2015, 13:59
|

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

|
Цитата(demiurg1978 @ Sep 9 2015, 16:31)  То есть я должен исходить из максимального объема передаваемых параметров функций? Скорее нет, чем да. Важно тело функции - как много ему требуется на стеке для локальных переменных, не уместившихся в регистрах. Прочитайте про стековый фрейм, применительно к конкретной архитектуре и конкретному компилятору. Также важна и алгоритмическая часть: рекурсии например...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Sep 9 2015, 14:09
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(demiurg_spb @ Sep 9 2015, 20:59)  ... Рекурсии пока отложим в сторону. Есть у меня функция. Как я могу понять, что у меня все будет нормально работать, хватит стека данных?
Сообщение отредактировал demiurg1978 - Sep 9 2015, 14:10
|
|
|
|
|
Sep 9 2015, 14:17
|
Местный
  
Группа: Участник
Сообщений: 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
Как мне здесь понять, где смотреть? Я специально очистил проект и скомпилировал. Листинги модулей есть.
|
|
|
|
|
Sep 9 2015, 14:22
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 9 2015, 14:25
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 9 2015, 21:22)  ... Я понимаю, что это не листинг. Как понять, какой именно листинг смотреть, какую функцию смотреть? Цитата(zltigo @ Sep 9 2015, 21:22)  Не переспрашивайте третий раз! Так поясните ПРИНЦИП, как это понять, где смотреть?
Сообщение отредактировал demiurg1978 - Sep 9 2015, 14:27
|
|
|
|
|
Sep 9 2015, 14:40
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 9 2015, 14:46
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 9 2015, 20:29)  Сколько Вы данных в стеке храните и через стек передаете, это только Вы знаете. Извините за такой вопрос, вы именно с AVR работаете? Это не подначка. Работу со стеком определяет компилятор. На стек я не могу повлиять.
|
|
|
|
|
Sep 9 2015, 14:53
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 9 2015, 16:25
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(demiurg1978 @ Sep 9 2015, 17:59)  Но стек данных? Да при чем тут стеки вообще?! Банально не хватает памяти, данные в ОЗУ (обычные данные, не стек) заняли столько места, что даже под более чем скромный стек места нет. Ну найдете 2 байта, дальше что? - программу дальше не увеличить. Или уж очень криво написана, или контроллер на пределе. Цитата(zltigo @ Sep 9 2015, 18:08)  И я даже знаю почему - Вы с тупым упорством не желаете заглянуть в листинг в котором видны использования стеков. А первичная причина в том, что в ИАРе по умолчанию они не выводятся, нужно галку поставить
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 9 2015, 16:43
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Dog Pawlowa @ Sep 9 2015, 23:25)  Банально не хватает памяти, данные в ОЗУ (обычные данные, не стек) заняли столько места, что даже под более чем скромный стек места нет. А первичная причина в том, что в ИАРе по умолчанию они не выводятся, нужно галку поставить  Памяти хватает. Есть 64 байт. Компилятор пишет что занято 61 байт. Учитываем глубину вложений, прерывания. Я поставил 8 байт. Хватает. Гонял программу в симуляторе на всю глубину вложений+прерывания. Остается стек данных. Листинг включен. Показаны CSTACK и RSTACK. Если смотреть по каждому файлу листинга криминала не вижу. Осталось понять, как компилятор подсчитывает память. И на какие цифры в будущем смотреть, чтобы выявить проблему.
Сообщение отредактировал demiurg1978 - Sep 9 2015, 20:00
|
|
|
|
|
Sep 9 2015, 16:55
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 9 2015, 23:49)  Вообще-то осталось понять, что компилятор НЕ ПОДСЧИТЫВАЕТ ПАМЯТЬ выделемую для стеков! Вот что вы нервничаете? Мы знакомы? Ни я вам ни вы мне ничего не сделали, чтобы вы позволяли себе такую резкость. Я на си пишу не так давно. До этого писал на асме. Ессно, некоторые вещи представляют для меня некоторую трудность. Терминология опять же. Для вас-то что-то можеть быть уже пройденный вдоль и поперек этап. А мне пока некоторые вещи еще в новинку. Скажите спасибо, что не на ардуине или CVAVR проекты пишу...
|
|
|
|
|
Sep 9 2015, 19:06
|

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

|
QUOTE (demiurg1978 @ Sep 9 2015, 19:55)  Вот что вы нервничаете? Зачем? QUOTE чтобы вы позволяли себе такую резкость. Это Вы себе позволяете НЕ читать и НЕ понимать того, что Вам пишут, причем неоднократно. QUOTE Я на си пишу не так давно. До этого писал на асме. Вынужден Вам сообщить, что стеки это не Си и не ACM, это контроллер. И память под эти стеки должна быть выделена, и указатели проинициализированы, хоть на чем пишите, хоть в кодах, хоть на суахили. Так-что как Вы "писали" на АСМ, сейчас видно как Вы пишите на Си  QUOTE Скажите спасибо, что не на ардуине или CVAVR проекты пишу... Спасибо. Спасибо мне ничего не стоит, в отличие от затрат времени на объяснения и повторения. QUOTE (demiurg_spb @ Sep 9 2015, 20:43)  Без zltigo на форуме последние пару лет было даже как-то пусто... Увы, не могу обещать, что надолго вернулся
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 9 2015, 19:44
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 9 2015, 20:23
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Sep 9 2015, 20:37
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(zltigo @ Sep 10 2015, 03:23)  ... Без эмоций уже не получится, вы пришли, на две страницы затроллили нахер тему, информации до сих пор я не получил. Хорошо, вы вытрепнулись. Я вам выложил листинг. Покажите мне пальцем, ткните носом, в каком месте не хватает ОЗУ. Если вы мне не ответите на этот вопрос, идите мимо, по хорошему вас прошу.
Сообщение отредактировал demiurg1978 - Sep 9 2015, 20:43
|
|
|
|
|
Sep 9 2015, 21:18
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|