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

12 минут назад, adnega сказал:

Попробуйте сделать пустой обработчик SVCall (или светодиодиком мигнуть). Скорее всего, у вас обработчик SVCall не готов к асинхронному вызову, т.к. в стеке будет будет далеко не контекст инструкции svc (swi).

У меня готов. Я же писал уже тут: При таком вызове мой обработчик выдаёт сообщение:

#define TRAP_SVC_UNKNOWN        0x143 //неизвестнаЯ функциЯ SVC

предусмотренное ещё при его разработке.

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


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

	dw0 = SCB->SHCSR;
	fm0 = get_faultmask();
	asm("cpsid f");
  __ISB();
  __DSB();
	fm1 = get_faultmask();
  __ISB();
  __DSB();
	SCB->SHCSR = (1 << 15);
  __ISB();
  __DSB();
  dw1 = SCB->SHCSR;
  __ISB();
  __DSB();
	asm("cpsie f");
  __ISB();
  __DSB();
	fm2 = get_faultmask();
	dw2 = SCB->SHCSR;

Результат:

Цитата

dw0=00000000
dw1=00008000
dw2=00000000
fm0=00000000
fm1=00000001
fm2=00000000

Но самое главное, что обработчик SVCall вызывается, т.к. он пишет послание в буфер консоли, и ничего не зависает.

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


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

20 минут назад, adnega сказал:

Результат:

А адрес записи где?

Цитата

Но самое главное, что обработчик SVCall вызывается, т.к. он пишет послание в буфер консоли, и ничего не зависает.

Он может вызываться уже после этого. Может вообще по другой причине. Может у Вас вообще кеширование этой области 0xE000E000 включено в MPU и SCB->SHCSR=1<<15 доходит до периферии уже после разрешения фаултов?  :wink2:  ISB/DSB конечно хорошо, но кто его знает...

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


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

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

но кто его знает...

Могу сделать минимальный проект под STM32. У вас есть какая-нибудь discovery?

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


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

17 минут назад, adnega сказал:

Могу сделать минимальный проект под STM32. У вас есть какая-нибудь discovery?

Не надо. Нет желания тратить время на ненужную ерунду.

Установил бит1 в == лог."1" в регистре MPU_CTRL и стало работать так же как у вас: запоминаться 15-й бит в SHCSR, а после разрешения fault-ов - вызываться исключение SVC.

Раньше этот бит (HFNMIENA) у меня был ==0.

У меня код всегда выполняется при включенном MPU. За исключением самого старта ПО.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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