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

 
 
> GCC C++ для AVR, общие вопросы
spongebob
сообщение Apr 23 2012, 10:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 126
Регистрация: 14-11-10
Пользователь №: 60 879



Всем привет!

Подскажите, пожалуйста, каков механизм вызова функций в Си++?
Имеет ряд вложенных функций (работа с массивами), хочется посчитать какой максимальный объем памяти в стеке они потребуют (передача параметров + сами данные в функциях).
Можно как-нибудь "автоматизировать" процесс подсчета? Видимо, читать значение указателя стека в определенные моменты времени?
Все ли локальные переменные, объявляемые в функциях, создаются в стеке?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 27 2012, 20:34
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (spongebob @ Apr 27 2012, 17:59) *
По поводу вызова библиотечного стартап-кода. Как я понимаю, все что содержится в секциях .initN до вызова main() - это и есть стартап? sm.gif
Да.
QUOTE (spongebob @ Apr 27 2012, 17:59) *
Т. е., он "размазывается" по секциям .init0 ... .init9 с дальнейшей возможностью коррекции каждой из секций программистом (часть секций менять нельзя, как я понял)?
Можно и добавлять и замещать.
QUOTE (spongebob @ Apr 27 2012, 17:59) *
Кстати, когда мы объявляем функцию способом типа void my_init_portb (void) __attribute__ ((naked)) __attribute__ ((section (".init3"))); то это замещает все что было помещено стартапом в эти секции? А если несколько аналогичных выше указанным объявлениям, то все что объявлено разместится в секции .init3?
Если имя не совпадает с библиотечными, то добавляется. Если имя совпадает с глобальной библиотечной меткой - то замещает:
CODE
extern "C" __attribute__((section(".init4"),__naked__)) void __do_clear_bss()
{
    asm volatile ("clr R2");
}
extern "C" __attribute__((section(".init4"),__naked__)) void __abyrvalg()
{
    asm volatile ("clr R3");
}


000004bc <__do_clear_bss>:
     4bc:    22 24           eor    r2, r2

000004be <__abyrvalg>:
     4be:    33 24           eor    r3, r3

000004c0 <__do_copy_data>:
     4c0:    11 e0           ldi    r17, 0x01; 1
     4c2:    a0 e0           ldi    r26, 0x00; 0
     4c4:    b1 e0           ldi    r27, 0x01; 1
     4c6:    e0 ea           ldi    r30, 0xA0; 160
     4c8:    f0 e1           ldi    r31, 0x10; 16
     4ca:    02 c0           rjmp    .+4     ; 0x4d0 <__do_copy_data+0x10>
     4cc:    05 90           lpm    r0, Z+
     4ce:    0d 92           st    X+, r0
     4d0:    a2 30           cpi    r26, 0x02; 2
     4d2:    b1 07           cpc    r27, r17
     4d4:    d9 f7           brne    .-10    ; 0x4cc <__do_copy_data+0xc>
     ................................


QUOTE (spongebob @ Apr 27 2012, 17:59) *
Кстати, можете сказать что-нибудь по поводу избыточности/неизбыточности Си++ по отношению к Си и насколько оптимальным получается код для AVR, ARM?
Много копий сломано тут на эту тему. Если писать с умом - то ни байта лишнего не будет. Ровно столько же, сколько занял бы делающий то же самое код на голом Си, но при этом со всеми преимуществами, которые дают плюсы: перегрузка операторов, конструкторы-деструкторы, ссылки, инкапсуляция, наследование, шаблоны, enum как отдельный тип, константы и многое другое.

QUOTE (spongebob @ Apr 27 2012, 21:22) *
Стартап является универсальным для всех контроллеров, поддерживаемых библиотекой и вся необходимая ему информация берется из macros.inc и каких-то других файлов библиотеки?
Да, на этапе компиляции библиотеки из этого файла строится куча файлов crtXXX.o, а при линковке gcc подключает нужный в зависимости от ключа -mmcu=.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- spongebob   GCC C++ для AVR, общие вопросы   Apr 23 2012, 10:21
- - MrYuran   http://stackoverflow.com/questions/6387614...syste...   Apr 23 2012, 10:35
|- - spongebob   Цитатаhttp://gcc.gnu.org/onlinedocs/gnat_ugn_unw.....   Apr 23 2012, 11:35
|- - MrYuran   Цитата(spongebob @ Apr 23 2012, 15:35) Во...   Apr 23 2012, 11:59
- - spongebob   Цитатаavr-g++.exe -mmcu=atmega1280 -Wall -ffunctio...   Apr 23 2012, 17:02
|- - MrYuran   Цитата(spongebob @ Apr 23 2012, 21:02) Не...   Apr 24 2012, 09:20
- - spongebob   Вот еще интересная ссылочка: http://www.avrfreaks....   Apr 24 2012, 09:11
- - spongebob   Касательно вот этого еще вопросы есть: http://www....   Apr 24 2012, 10:32
- - ReAl   Даже если указывать __heap_start и __heap_end, но ...   Apr 24 2012, 12:33
- - spongebob   Фигня какая-то... поставил 2010 WinAVR, он тоже оп...   Apr 24 2012, 17:22
- - spongebob   Вопросы по секциям. Читаю http://www.nongnu.org/av...   Apr 27 2012, 10:19
|- - Сергей Борщ   QUOTE (spongebob @ Apr 27 2012, 13:19) За...   Apr 27 2012, 11:09
|- - spongebob   Цитата(Сергей Борщ @ Apr 27 2012, 15:09) ...   Apr 27 2012, 14:59
- - spongebob   Стартап является универсальным для всех контроллер...   Apr 27 2012, 18:22


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

 


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


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