dlsh 1 10 апреля, 2013 Опубликовано 10 апреля, 2013 · Жалоба сосбтвенно проблема возникла как всегда когда требется сделать ботлоадер свои функции я указал линкеру чтобы он положил в нужную облать так 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) но какой синтаксис и где писать не пойму. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба мне бы примерно тоже самое вот так написать 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) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 1 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба .... В "Linker code string" контролировать появление CODE(0xFC00 - 0xFFFF) строка появилась при коплиятор при линковке весь код пытается уместить в этот диапазон адресов. а мне нужно только библиотеку C51L.LIB поместиь туда. Вот в чем проблема. а основной код программы должен остаться на месте т.е. от 0 до 0xFC00 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Посмотрите в map-файле, под каким именем линкер складывает области Пропишите в скаттере эту область в нужное место Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dlsh 1 12 апреля, 2013 Опубликовано 12 апреля, 2013 · Жалоба здравствуйте. вот версия моего 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться