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

Приветствую!

подскажите что не так с инструкциями BX, BLX. В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает, МК "повисает", в том что адрес верный, я уверен на 100%

если в нулевом разряде 0, то хардфаулт.

в общем и так не так, и эдак

с чем это может быть связано?

речь о cortex M7
 

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

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


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

21 minutes ago, TTTTTTS said:

В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault.

Почитайте примечание внизу по этой ссылке. Оно?

 

 

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


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

Вы невнимательны

23 минуты назад, TTTTTTS сказал:

В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает

 

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


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

ARM Cortex-M7 Devices Generic User Guide страница 128
 

вернее страница 174.  там внизу написано 3-128 подумал что это номер страницы
 

The BX and BLX instructions result in a UsageFault exception if bit[0] of Rm is 0
 

For BX and BLX, bit[0] of Rm must be 1 for correct execution but a branch occurs to the target
address created by changing bit[0] to 0
 

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

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


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

39 минут назад, TTTTTTS сказал:

подскажите что не так с инструкциями BX, BLX. В мануалах пишут что необходимо в регистре, в котором инструкции передается адрес перехода, нулевой бит устанавливать в единицу, иначе генерируется UsageFault. Но это не работает, МК "повисает", в том что адрес верный, я уверен на 100%

Купили Cortex-M7, а на эмулятор нет денег? Разоритесь уже, чтобы не страдать такой ерундой.

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


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

17 minutes ago, TTTTTTS said:

ARM Cortex-M7 Devices Generic User Guide страница 128
 

Стр. 3-181: "Use NOP for padding, for example to place the following instruction on a 64-bit boundary".

Оно?

 

 

зы Прекращайте писать на ASM на этом "жалком" CM7, возьмите для этой важной задачи ядро по-серьезнее :)

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


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

1 минуту назад, jcxz сказал:

Купили Cortex-M7, а на эмулятор нет денег? Разоритесь уже, чтобы не страдать такой ерундой.

какой эмулятор? я в кейле отладчиком смотрел, в железе.

когда в регистре 0 бит равен 0- то выкидывает в хардфаулт

когда в регистре 0 бит равен 1 то поведение кейла при отладке мне не ясно, он повисает как будто работает некоторый цикл на микроконтроллере, стоит нажать стоп и я вижу что выкинуло на какой то адрес, совсем не тот на который я планировал, каждый раз этот адрес иной, в зависимости от того когда нажать стоп
 

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


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

6 minutes ago, TTTTTTS said:

я в кейле отладчиком смотрел, в железе.

 

Вот теперь наконец-то подбираемся к сути проблемы!

В 99.9999% подобных случаев проблема  в коде, а не в ядре проца, как ошибочно многим кажется ;)

 

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


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

53 minutes ago, TTTTTTS said:

в том что адрес верный, я уверен на 100%

Значит, надо довести уверенность до 146%. Другого объяснения нет.

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


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

2 минуты назад, Forger сказал:

Use NOP for padding, for example to place the following instruction on a 64-bit boundary

а причем здесь NOP? нет разницы что там по этому адресу, ноп или не ноп, процессор ведет себя одинаково в моем случае

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


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

11 минут назад, TTTTTTS сказал:

когда в регистре 0 бит равен 1 то поведение кейла при отладке мне не ясно, он повисает как будто работает некоторый цикл на микроконтроллере, стоит нажать стоп и я вижу что выкинуло на какой то адрес, совсем не тот на который я планировал, каждый раз этот адрес иной, в зависимости от того когда нажать стоп

Значит у вас что-то не в порядке с этим самым кейлом или эмулятором.

Следите за руками. Шаг 1:

20190507-142.gif.1b6a98fa7888e788d291178b692c83b9.gif

Шаг 2:

20190507-143.gif.3a0fbe147d3971ea2a6292c7125c7321.gif

 

Как видно всё работает чётко. Да и не может не работать: в любой программе вагон этих инструкций.

 

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


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

13 минут назад, TTTTTTS сказал:

когда в регистре 0 бит равен 1 то поведение кейла при отладке мне не ясно, он повисает как будто работает некоторый цикл на микроконтроллере, стоит нажать стоп и я вижу что выкинуло на какой то адрес, совсем не тот на который я планировал, каждый раз этот адрес иной, в зависимости от того когда нажать стоп

Ищите в опциях отладчика галку, которая называется как то типа "Запретить прерывания при пошаговой отладке". И возможно произойдёт чудо!  :biggrin:

Не знаю где она в Кейле, ибо пользую IAR. Но она должна быть.

Возможно у вас просто за время шага успевает произойти какое-то прерывание. Вот в него и улетаете.

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


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

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

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

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

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

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

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

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

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

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