Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Keil: L121 Improper fixup error
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
JustIce
Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

*** 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
Цитата(JustIce @ Feb 24 2009, 15:10) *
Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

*** ERROR L121: IMPROPER FIXUP
MODULE: Initialization.obj (INITIALIZ)
SEGMENT: INITIALIZ_
OFFSET: 0059H

Я так понимаю что при сборке нескольких файлов они накладываются друг на друга.


Так ведь можно руками указать размещение кусков кода в памяти и при сборке они не наложаться друг на друга.
А вообще надо посмотреть чего там в листинге по адресу 0059H находиться.
Igor_K
Цитата(JustIce @ Feb 24 2009, 15:10) *
Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

*** ERROR L121: IMPROPER FIXUP
MODULE: Initialization.obj (INITIALIZ)
SEGMENT: INITIALIZ_
OFFSET: 0059H

Я так понимаю что при сборке нескольких файлов они накладываются друг на друга.

Попробуйте посмотреть, что там по адресу 59h. Возможно там SJMP или ACALL, то есть ближний переход. У меня периодически такое ругательство выскакивает, когда из кусков своих старых программ собираю новую. Приходится проверять по указанным оффсетам и править текст.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.