Перейти к содержанию
    

настройка BL51 keil uvision4 для 8051

сосбтвенно проблема возникла как всегда когда требется сделать ботлоадер

свои функции я указал линкеру чтобы он положил в нужную облать так

CODE( 0X0000-0XFBFF, 
     ?CO?CE41a01_CE (0xC00), 
     ?PR?_RENEWSTART?RENEW_STATIC(0xFC00),
     ?PR?RD_AT25_RNW?RENEW_STATIC,
     ?PR?MEMCPY_RX_RNW?RENEW_STATIC,
     ?PR?READ_STATUS_RNW?RENEW_STATIC,
     ?PR?ENABLE_FLASH_WRITE?RENEW_STATIC,
     ?PR?DISABLE_FLASH_WRITE?RENEW_STATIC
)
XDATA( 0X0500-0X10FF )
PDATA( 0x200 )

но функции эти обращаются к библиотечным

типа

?С??C?IILDX

?C?LLDXDATA

и т.д.

которые расположены в библиотеке

C51L.LIB

 

Собственно вопрос в том как мне объяснить линкеру чтобы

он либу C51L.LIB положил в самы верх памяти по тому месту что я ему скажу?

 

Нашел у кейла вот такое

http://www.keil.com/support/man/docs/bl51/bl51_code.htm

из ихнего примера

BL51 MYPROG.OBJ CODE(0 - 0x3FFF, 0x8000 - 0xFFFF)

мне бы примерно тоже самое вот так написать

BL51 C51L.LIB CODE(0xFC00 - 0xFFFF)

но какой синтаксис и где писать не пойму.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне бы примерно тоже самое вот так написать

BL51 C51L.LIB CODE(0xFC00 - 0xFFFF)

но какой синтаксис и где писать не пойму.

Menu -> Progect-> Options for target -> BL51 Locate

Галку "Use memory layout..." - убрать

В "Code Range" задать: 0xFC00 - 0xFFFF

 

В "Linker code string" контролировать появление CODE(0xFC00 - 0xFFFF)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

....

В "Linker code string" контролировать появление CODE(0xFC00 - 0xFFFF)

строка появилась при коплиятор при линковке весь код пытается

уместить в этот диапазон адресов. а мне нужно только библиотеку C51L.LIB поместиь туда.

Вот в чем проблема. а основной код программы должен остаться на месте т.е. от 0 до 0xFC00

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в map-файле, под каким именем линкер складывает области

Пропишите в скаттере эту область в нужное место

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

здравствуйте.

 

вот версия моего IDE

http://gyazo.com/32a5fa87385796b9ef4cb6194093bafb

 

прикрепил тестовый проект максимально приближенный к реальному. разница тольк

в том что этот проект занимает 1к кода мой занимает 53к кода

 

смотрю м51 файл

* * * * * * * C O D E M E M O R Y * * * * * * *

CODE FC00H 0027H UNIT ?PR?RENEWSTART?RENEW_STATIC

 

здесь все ок лежит там где и должна лежать как и указано в файле линкера linker.lin

а вот где лежат библиотечные функции из библиотеке C51L.LIB

* * * * * * * C O D E M E M O R Y * * * * * * *

------- MODULE ?C?ILDIX

C:008FH PUBLIC ?C?ILDIX

------- ENDMOD ?C?ILDIX

 

мне нужно чтобы линкер положил их например так

------- MODULE ?C?ILDIX

C:FE00H PUBLIC ?C?ILDIX

------- ENDMOD ?C?ILDIX

 

требуется чтобы при этом все остальные функции проекта (в данном случае main) должны лежать там ниже 0xFC00

 

как выполнить этого требования до сих пор не нашел, тех поддержка молчит...

 

 

 

написал

данный вопрос,

начал расматривать предметно что в м51

наткнулся на ?C?LIB_CODE

поместил его в линкере

 

PRINT(".\out\lst\test.m51") RAMSIZE(256) 
CODE( 0X0000-0XFBFF,
      ?CO?CE41a01_CE (0xC00), 
      ?PR?RENEWSTART?RENEW_STATIC(0xFC00),
      ?C?LIB_CODE
)
XDATA( 0X0500-0X10FF )
PDATA( 0x200 )

 

и о чудо произвошло, библеотека тутже встала на свое законное мето.

bootloader.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...