Отговори на тема  [ 9 мнения ] 
GCC - мъки с линкера 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение GCC - мъки с линкера
Много оплетен тоя мануал.

1.
Как да разположа константи на фиксиран адрес във флеша?

__attribute__(("section_name"))???

Ама аз искам на точен адрес вътре в секцията. Има ли синтаксис дето да го разполага на точен адрес?


2.
Дефинирам си секция за разполагане на въпросните константи (стрингове за версии):

Код:
/* Versions strings section */
    .version :
    {
   . = ALIGN(4);
       *(.version)
   . = ALIGN(4);
    } >FLASH_VERSION


Освен това в линкера имам:

Код:
MEMORY
{
  RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH =  0xFC0
  FLASH_VERSION (r) : ORIGIN = 0x08000FC0, LENGTH = 0x40
}


В кода съм написал съответно това:

Код:
const char strBLVersion[16]  __attribute__ ((section (".version"))) = {"1.0.0"};
const char strProcessor[16]  __attribute__ ((section (".version"))) = {"STM32F103C8T6"};


Дотук добре, ама като тръгна да компилирам, ми се получава това:


Цитат:
section .version [08000fc0 -> 08000fdf] overlaps section .bss [08000f4c -> 08001383] DanHW6C_BOOT


Чии го търси .bss в региона 08000f4c -> 08001383???

в скрипта .bss е дефинирана така:

Код:
/* This is the uninitialized data section */
    .bss :
    {
       . = ALIGN(4);
        /* This is used by the startup in order to initialize the .bss secion */
        _sbss = .;
       
        *(.bss)
        *(COMMON)
       
       . = ALIGN(4);
       /* This is used by the startup in order to initialize the .bss secion */
       _ebss = . ;
    } >RAM
   
    PROVIDE ( end = _ebss );
    PROVIDE ( _end = _ebss );


Установих, че ако увелича размера на FLASH региона, така, че да побира и .bss секцията нещата се оправят. Айде иницилизационни променливи са. Реших че им трябва флеш регион за първоначално инициализиране. Намалих използването на .bss до минимум за сметка на .data. И получих следния отговор:

Цитат:
section .version [08000fc0 -> 08000fdf] overlaps section .data[08000... бла, бла


Е какво мама му стара дири .data в региона на флеша???

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Последна промяна Цецо на Сря Май 09, 2012 11:08 am, променена общо 1 път



Сря Май 09, 2012 9:15 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: GCC - разполагане на константи на фиксиран адрес
__attribute__((section(".version")))

За абсолютно позициониране можеш така:
Код:
        . = 0x00202000;
        __text_start = .;
        .text : {
                *(.vectors)
                *(.text)
                *(.rodata)
                *(.rodata.*)
        }
        __text_end = .;
        __text_size = __text_end - __text_start;


Обикновено има смисъл само една структура да е позиционирана на фиксиран адрес, така че слагаш отделна изходна секция за нея. Другата игра за позициониране е да направиш голям ALIGN-мент в линкер скрипта и така да си сигурен къде ще отиде.

KEEP е за да включи входните секции дори да нямаш никакви референции към тях (т.е. излишни са от гледна точка на линкера).


Сря Май 09, 2012 11:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: GCC - мъки с линкера
Да това с keep-a го разбрах. С точното позициониране... ще се оправя по заобиколни начини :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Май 09, 2012 11:10 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: GCC - мъки с линкера
Пусни си един .map файл и огледай какво се случва.


Сря Май 09, 2012 11:13 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: GCC - мъки с линкера
Ми те го какво генерира в map-a.

Прикачени файлове:
DanHW6C_boot.map.txt [37.77 KiB]
190 пъти


Аз не виждам нищо ненормално в него...или поне нищо дето да подсказва, що чинят .bss или .data в региона на флеша.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Май 09, 2012 11:33 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: GCC - мъки с линкера
Изглежда ОК от птичи поглед. Не видях грешки (не помня дали ги отразяваше тях в .map файла) и като да е побрал всичко в секциите.
Ти сигурен ли си че тази грешка е точно от линкера а не нещо друго дето ти е набутано по веригата?


Сря Май 09, 2012 11:48 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: GCC - мъки с линкера
Да. Засега се оказава май, че линкера е гърбав. Тоя е 4.3.2, сложих 4.4.1 и нещата си заспаха. :axe:

Сега ще видя да пробвам направо с 4.6, че то ми е време май...

П.С.

С 4.6.1 пък друго дърво:

http://old.nabble.com/-Bug-gas-13215--N ... 16436.html

Аман вече. Но като направих това което съветват, компилира и линква също без проблеми. Явно дъртия 4.3.2 има някакъв яд и аз естествено уцелих глухата акула.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Сря Май 09, 2012 11:54 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение Re: GCC - мъки с линкера
Ебати и мъката.....
Докато всичко може и би трябвало да изглежда така:

Код:
const aconst : array[10] of byte = (1,2,3,4,5,6,7,8,9,0); org $5678;


Но това е друга тема.

Примерът е с образователна цел, да не изпадаме в поредния безсмислен спор.... :partyman:


Сря Май 09, 2012 3:34 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: GCC - мъки с линкера
relsys написа:
Ебати и мъката.....
Докато всичко може и би трябвало да изглежда така:

Код:
const aconst : array[10] of byte = (1,2,3,4,5,6,7,8,9,0); org $5678;

Всъщност въобще не.


Чет Май 10, 2012 10:44 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 9 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 6 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни