Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: настройка BL51 keil uvision4 для 8051
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Димитрий
сосбтвенно проблема возникла как всегда когда требется сделать ботлоадер
свои функции я указал линкеру чтобы он положил в нужную облать так
CODE

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)
но какой синтаксис и где писать не пойму.
Палыч
Цитата(Димитрий @ Apr 10 2013, 14:02) *
мне бы примерно тоже самое вот так написать
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)
Димитрий
Цитата(Палыч @ Apr 11 2013, 14:09) *
....
В "Linker code string" контролировать появление CODE(0xFC00 - 0xFFFF)

строка появилась при коплиятор при линковке весь код пытается
уместить в этот диапазон адресов. а мне нужно только библиотеку C51L.LIB поместиь туда.
Вот в чем проблема. а основной код программы должен остаться на месте т.е. от 0 до 0xFC00
toweroff
Посмотрите в 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 )


и о чудо произвошло, библеотека тутже встала на свое законное мето.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.