Justice 0 24 февраля, 2009 Опубликовано 24 февраля, 2009 · Жалоба Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа: *** ERROR L121: IMPROPER FIXUP MODULE: Initialization.obj (INITIALIZ) SEGMENT: INITIALIZ_ OFFSET: 0059H Я так понимаю что при сборке нескольких файлов они накладываются друг на друга. Если в опциях проекта в закладке Device поставить "Use extended linker (LX51) ...." то проект собирается и работает нормально, но во время симуляции на каждом шаге выскакивает окно дизасемблера (если закрыть то на следующем шаге все одно выскакивает). В хелпе на Keil нашел "QUESTION Why does the 251 linker (L251) report "L121 Improper fixup error" in my STARTUP.A51 file? ANSWER Make sure that if you modify the startup file to set the STACK correctly. In the 80251, the stack pointer is a 16-bit value. If you are accustomed to using the 8051, it is easy to forget to initialize the upper byte. This means the upper byte never gets set which may cause this error message." Может кто знает как вручную выставить этот 16 битный стек (похоже что обычный (не расширеный) линкер устанавливает 8 битный стек)??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dec_NN 0 24 февраля, 2009 Опубликовано 24 февраля, 2009 · Жалоба Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа: *** ERROR L121: IMPROPER FIXUP MODULE: Initialization.obj (INITIALIZ) SEGMENT: INITIALIZ_ OFFSET: 0059H Я так понимаю что при сборке нескольких файлов они накладываются друг на друга. Так ведь можно руками указать размещение кусков кода в памяти и при сборке они не наложаться друг на друга. А вообще надо посмотреть чего там в листинге по адресу 0059H находиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость Igor_K 24 февраля, 2009 Опубликовано 24 февраля, 2009 · Жалоба Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа: *** ERROR L121: IMPROPER FIXUP MODULE: Initialization.obj (INITIALIZ) SEGMENT: INITIALIZ_ OFFSET: 0059H Я так понимаю что при сборке нескольких файлов они накладываются друг на друга. Попробуйте посмотреть, что там по адресу 59h. Возможно там SJMP или ACALL, то есть ближний переход. У меня периодически такое ругательство выскакивает, когда из кусков своих старых программ собираю новую. Приходится проверять по указанным оффсетам и править текст. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ih_ 0 25 января, 2019 Опубликовано 25 января, 2019 · Жалоба On 2/24/2009 at 3:10 PM, Justice said: ... *** ERROR L121: IMPROPER FIXUP MODULE: Initialization.obj (INITIALIZ) SEGMENT: INITIALIZ_ OFFSET: 0059H ... Может кто знает как вручную выставить этот 16 битный стек (похоже что обычный (не расширеный) линкер устанавливает 8 битный стек)??? Дело не в стеке. У линкера нет прав на установку стека. Дело в переходах. ACALL и LCALL. Попробуйте поменять в настройках проекта: суммарный размер кодовых сегментов с "до 2к" на "2к..64к" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться