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

Переключить режим работы ARM

Гость impatt

Сорри за тупой вопрос.

Я не спец в АРМ-ах, но кое-что надо сделать, не познавая весь мир со стадии "когда Земля была жидкая". Посему нуждаюсь в конкретных советах: у меня есть консоль OpenOCD, подключенного к ARM1136, я могу загружать туда код и исполнять его, могу даже сделать что-то на ассемблере, скомпилировать и выдрать бинарный образ из ELF-контейнера. Надо переключить состояние с Abort или Undefined Instruction на Supervisor. Беда в том, что не знаю до тонкостей ARM-ассемблера и особенностей работы.

Собсна, вот.

Заранее спасибо.

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


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

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

  mrs r0, cpsr
  bic r0, r0, #0x1F
  orr r1, r0, #0x13
  msr cpsr_cxsf, r1

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


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

Гость impatt
Вот фрагмент кода на ассемблере, который позволит переключиться в режим супервизора

Вольшое спасибо, похоже на то, что требуется :)

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


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

Если не секрет. Откуда возникла такая потребность? Оба режима Abort или Undefined Instruction - это "аварийные режимы" процессора. Если вы в них попали, надо выяснять почему и исправлять программу. А вываливаться из них какой смысл?

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


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

Гость impatt
Если не секрет. Откуда возникла такая потребность? Оба режима Abort или Undefined Instruction - это "аварийные режимы" процессора. Если вы в них попали, надо выяснять почему и исправлять программу. А вываливаться из них какой смысл?

Не секрет, конечно: после сброса и до ввода в режим отладки, процессор успевает исполнять какой-то мусор с флэшки. Мне же его надо иметь в нормальном состоянии. Собственно, вот :)

Вообще, я пока приведённым рецептом не воспользовался - нашёл способ сделать инче, но это частный случай, а так-то рецептик себе на манжету запишу :)

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


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

А вываливаться из них какой смысл?

Да есть много причин возвращаться из Abort'а в svsr.. К примеру определить объем реально подключенной SDRAM памяти.

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

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


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

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

А контроллер памяти откуда вдруг знает о границах? Получите overlap и все.

 

P.S. impat, сменили б вы юзерпик - глаза можно сломать, чесслово!

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


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

А контроллер памяти откуда вдруг знает о границах? Получите overlap и все.

В реальной системе получаю abort. Откуда контроллер памяти знает меня не интересовало.

Если не нравится пример с памятью - другой пример - сохранение svsr fault регистров при краше.

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


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

В реальной системе получаю abort. Откуда контроллер памяти знает меня не интересовало.

А вот мне интересно. Можно узнать, что за система, и при каких условиях получается abort?

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


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

А вот мне интересно. Можно узнать, что за система, и при каких условиях получается abort?

SoC на двух 1136 ARM'ах, чей там SDRAM контроллер, - не знаю... Дает аборт при доступе к несуществующей памяти, даже если в MMU ARM'ов помечено, что память там есть.

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


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

SoC на двух 1136 ARM'ах, чей там SDRAM контроллер, - не знаю... Дает аборт при доступе к несуществующей памяти, даже если в MMU ARM'ов помечено, что память там есть.

Хорошо, а как инициализируется этот контроллер - знаете? Просто ведь неоткуда знать ему, что там и в каком количестве снаружи прикручено, если только кто-то (сам процессор, точнее) не подскажет.

А вот генерить abort там, где ему было сказано, что памяти нет - это пожалуйста.

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


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

Хорошо, а как инициализируется этот контроллер - знаете?

Мой application грузится бутлоадером сразу в SDRAM, стало быть SDRAM контроллер уже настроен бутлоадером.

Количество памяти в системе мой application узнает описанным выше способом.

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


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

Мой application грузится бутлоадером сразу в SDRAM, стало быть SDRAM контроллер уже настроен бутлоадером.

Количество памяти в системе мой application узнает описанным выше способом.

 

Существуют более интеллигентные способы узнать объем памяти без вваливания в Abort. Я таким пользуюсь года три.

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


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

Существуют более интеллигентные способы узнать объем памяти без вваливания в Abort. Я таким пользуюсь года три.

Интеллигентных способа, как я понимаю, здесь два:

1. Получить значение объема от bootloader'а

2. Прочитать конфигурацию контроллера памяти

 

Попытка выяснить объем самостоятельно неминуемо приведет к abort'у.

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


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

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

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

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

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

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

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

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

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

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