Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Avr- gcc добавить в функцию 10-60кб asm volatile ("nop")
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kris2007
Нужно в функцию сделать на 60кб длиннее. Как об этом сказать компилятору gcc?
ReAl
Цитата(Kris2007 @ Oct 29 2007, 11:03) *
Нужно в функцию сделать на 60кб длиннее. Как об этом сказать компилятору gcc?

А зачем, интересно???
Вот так должно пойти (это на 20КБ выходит)
Код
extern const uint8_t always_zero;
void foo(void) {
    // тело функции ...

    if( always_zero == 0 ) return;
    // Чтобы дальнейшее не выбросил оптимизатор как unused code - завести где-то
    // переменную, про которую он не знает, что она всегда 0, и по ней делать возврат

    __asm__ volatile (
        ".rept 10000" "\n\t"
        "nop"         "\n\t"
        ".endr"
        ::
    );
}
Kris2007
Спасибо.
Сейчас попробую.
А нужно чтобы протестировать насколько правильно компилятор действует при 256к памяти (atmega2561).

Не подскажи еще возможно ли указать компилятору или линкеру выделить данный конкретный адрес для функции в памяти программ? Простой .org 0x20000 в асмовской вставке не прокатит?

Ругаетсяsad.gif
..../main.c:598: relocation truncated to fit: R_AVR_7_PCREL against `no symbol'
Kris2007
Цитата(Kris2007 @ Oct 29 2007, 15:20) *
Спасибо.
Сейчас попробую.
А нужно чтобы протестировать насколько правильно компилятор действует при 256к памяти (atmega2561).

Не подскажи еще возможно ли указать компилятору или линкеру выделить данный конкретный адрес для функции в памяти программ? Простой .org 0x20000 в асмовской вставке не прокатит?

Ругаетсяsad.gif
..../main.c:598: relocation truncated to fit: R_AVR_7_PCREL against `no symbol'


Разобрался!:)

это if () return ... компилятор попытался прыгнуть за 2047:)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.