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

Keil: L121 Improper fixup error

Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

 

*** 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 битный стек)???

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


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

Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

 

*** ERROR L121: IMPROPER FIXUP

MODULE: Initialization.obj (INITIALIZ)

SEGMENT: INITIALIZ_

OFFSET: 0059H

 

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

 

Так ведь можно руками указать размещение кусков кода в памяти и при сборке они не наложаться друг на друга.

А вообще надо посмотреть чего там в листинге по адресу 0059H находиться.

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


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

Гость Igor_K
Проект на асемблере разбит на несколько файлов (по функциям). В процессе сборки возникает куча ошибок типа:

 

*** ERROR L121: IMPROPER FIXUP

MODULE: Initialization.obj (INITIALIZ)

SEGMENT: INITIALIZ_

OFFSET: 0059H

 

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

Попробуйте посмотреть, что там по адресу 59h. Возможно там SJMP или ACALL, то есть ближний переход. У меня периодически такое ругательство выскакивает, когда из кусков своих старых программ собираю новую. Приходится проверять по указанным оффсетам и править текст.

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


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

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к"

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...