Jump to content

    
Sign in to follow this  
yanvasilij

Инициализация данных в SDRAM

Recommended Posts

В map-файле этот файл упоминается в нескольких местах:

 

....
.text          0x00000000        0x0 ..\obj\heap_1.o
.data          0x00000000        0x0 ..\obj\heap_1.o
.text.vPortInitialiseBlocks
                0x00000000       0x18 ..\obj\heap_1.o
.text.vPortInitialiseBlocks
                0x00000000       0x18 ..\obj\heap_1.o
....
.text.pvPortMalloc
                0x08024048       0x8c ..\obj\heap_1.o
                0x08024048                pvPortMalloc
.text.vPortFree
                0x080240d4       0x14 ..\obj\heap_1.o
                0x080240d4                vPortFree
...
.bss           0x2000eb4c     0xc808 ..\obj\heap_1.o
...
.ARM.attributes
                0x000010dd       0x33 ..\obj\heap_1.o
...
LOAD ..\obj\heap_1.o
...

 

Команда ликнковки:

 

 arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -nostartfiles -Wl,-Map=beremizStm32Port.map -O0 -Wl,--gc-sections -Wl, -LD:/_projects/beremizStm32Port/linkscript -Wl,-TD:/_projects/beremizStm32Port/linkscript/stm32f407zg_flash.ld -g -o output.elf ..\obj\vlStm32f4xI2C.o ...много файлов... ..\obj\heap_1.o ...еще много файлов... -lm -lgcc -lc -lnosys -lstdc++

Share this post


Link to post
Share on other sites
Команда ликнковки:

 

 ... ..\obj\heap_1.o ...

Ну вот. Оказывается, файл-то не heap_1.o, а ..\obj\heap_1.o! То есть он не в текущем каталоге, а в ../obj. А в скрипте линкера Вы как этот файл указали?

Share this post


Link to post
Share on other sites
Ну вот. Оказывается, файл-то не heap_1.o, а ..\obj\heap_1.o! То есть он не в текущем каталоге, а в ../obj. А в скрипте линкера Вы как этот файл указали?

 

Наконец-то дошли руки проверить. Сделал, с учетом каталога, после Вашего замечания:

 

  .bss.sdram : {
      ..\obj\heap_4.o(.bss)
  } >SDRAM

 

Все работает как надо! Спасибо большое!

 

Правда теперь возникла другая трудность: этот файл используется при компиляции статической библиотеки. При компиляции уже конечного приложения с использованием этой библиотеки, в map-файле этот heap_4 (без переноса его в SDRAM) появляется следующим образом:

 

 
.data          0x00000000        0x0 librunTime.a(heap_4.c.obj)
.rodata        0x00000000        0x4 librunTime.a(heap_4.c.obj)

...
.bss           0x200084bc    0x19018 librunTime.a(heap_4.c.obj)

 

Подскажите, как теперь переместить фрагмент либы в sdram? Пробовал вот так:

 

  .bss.sdram : {
      librunTime.a(heap_4.c.obj)(.bss)
  } >SDRAM

 

Выдает ошибку синтаксиса.

Share this post


Link to post
Share on other sites
Выдает ошибку синтаксиса.

И правильно делает, что выдает. Смотрите в руководстве, как надо указывать ссылки на файлы в архивах:

You can also specify files within archives by writing a pattern matching the archive, a colon, then the pattern matching the file, with no whitespace around the colon.

`archive:file'
    matches file within archive
`archive:'
    matches the whole archive
`:file'
    matches file but not one in an archive

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this