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

Ошибки в работе Leon3

Есть проект: Leon3, AHBCTRL, AHBROM, APBCTRL, APBUART, GPIO. Проект компилируется, но есть 2 проблемы:

1) при возврате из функции (команда retl) происходит прерывание (0x07)

2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание

3) и самое интересное, регистр o5 содержит значение 0х60000000, далее следует последовательность команд, в [] результат операции, выданный ModelSim'ом

or %o5, 0x20C, %o4 [0x6000020C]

st %g1, [%o4]

mov 0x00, %o4 [0x00000000]

or %o5, 0x200, %o4 [0x60000200]

st %g1, [%o4]

но на шину во втором случае выдается 0x6000020C

 

Никак не могу понять в чем проблема, для компиляции использую GR-LIDE (Bare C), если кто-то сталкивался с подобным или знает решение, просьба подсказать

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


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

Есть проект: Leon3, AHBCTRL, AHBROM, APBCTRL, APBUART, GPIO. Проект компилируется, но есть 2 проблемы:

1) при возврате из функции (команда retl) происходит прерывание (0x07)

2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание

3) и самое интересное, регистр o5 содержит значение 0х60000000, далее следует последовательность команд, в [] результат операции, выданный ModelSim'ом

or %o5, 0x20C, %o4 [0x6000020C]

st %g1, [%o4]

mov 0x00, %o4 [0x00000000]

or %o5, 0x200, %o4 [0x60000200]

st %g1, [%o4]

но на шину во втором случае выдается 0x6000020C

 

Никак не могу понять в чем проблема, для компиляции использую GR-LIDE (Bare C), если кто-то сталкивался с подобным или знает решение, просьба подсказать

 

1) 0x7 это non-aligment смотреть надо sparcv8.pdf там все описано

2)

3) а точно два раза 0x6000020C? там write-buffer поэтому операция по шине не сразу проходит, может это с первого st?

 

компилятор ерунды не делает, но 0х7 из-за линкера или crt может быть - стек то на 8 выровнен?

 

 

 

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


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

yes, по поводу прерывания, стек при работе с функциями не используется, адреса возврата передаются через регистры, в проекте нет озу, а по поводу 3-го пункта я ошибся в описании проблемы моделсим выдал or %o5, 0x200, %o4 [0x6000020C] во втором случае

Изменено пользователем SunRize

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


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

стек при работе с функциями не используется

если используете компилятор - используется: см описание инструкций save/restore

 

-----------

 

возьмите стандартный проект Гейслера (лучше всего leon3mp) и посмотрите как оно должно работать, после собирайте свою систему

все там работает

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


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

Решение проблем:

1) при возврате из функции (команда retl) происходит прерывание (0x07);

2) при выполнении команд вида st reg, [%fp - 0x0c] также происходит прерывание.

Решаются записью в %o6 (%sp) адреса RAM памяти

 

3-я проблема решилась установкой текущего регистрового окна в %psr

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


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

начальную конфигурацию Гейслер делает не в crt.o, а с помощью специальной утилиты mkprom

поэтому стеки/окна/маски окон и т.п. надо либо самому ставить (написать ассемблерный файлик и прилинковать с [по-моему] ключами nostartup или как-то так), либо почитать инструкцию

 

---------------

 

а с проблемой завершения окон (window_overflow/window_underflow trap) уже столкнулись? имхо, самое прикольное место в архитектуре SPARC

 

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


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

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

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

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

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

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

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

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

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

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