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

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

Адрес функции HardFault_Handler точно находится в используемой таблице векторов в соответствующем слоте? Это по map-файлу проверено?

Это очень странно, что HF не вызывается при "записи" во Flash. Хотелось бы докопаться до сути.

HardFault_Handler точно находится где надо и он даже срабатывает если накосячить.

Совершенно непонятно почему вы считаете что обращение к существующему адресному пространству должно вызывать HF. Для процессора все выглядит Ок а что во флэш писать не имеет смысла это не проблемы cpu а именно того устройства.

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


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

On 12/11/2023 at 1:52 PM, haker_fox said:

В обработчике Hard Fauld стоит bkpt #0, 

В обработчике Hard Fault стоит while(1). А также в обработчике всех остальных исключительных ситуаций стоит while(1).

On 12/11/2023 at 1:52 PM, haker_fox said:

 а программа, после "записи во FLASH" запущена на исполнение? Т.е. выполнена ни одна команда STR, а и несколько после неё?

Да, запущена. И успешно выполняет свою работу, что видно (в моем случае) по printf(....)

 

 

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


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

15 minutes ago, _3m said:

Для процессора все выглядит Ок

Так дело не в процессоре, а в шине AHB. И я ожидал бы BusFault/MemManageFault.

16 minutes ago, _3m said:

Совершенно непонятно почему вы считаете что обращение к существующему адресному пространству должно вызывать HF.

У других микроконтроллеров, даже фирмы ST, вызывает.

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


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

51 минуту назад, dimka76 сказал:

У каких ?

У XMC4700 при записи во флешь fault не возникает, но при записи в ROM - возникает.

image.thumb.png.9ebc96421ac320791e7b0255d8adf83a.png

Запись - команда STR по адресу 0x1FFEB570.

Fault от неё происходит по адресу 0x1FFEB57E.

1 час назад, haker_fox сказал:

Так дело не в процессоре, а в шине AHB. И я ожидал бы BusFault/MemManageFault.

Думаю - дело также в штатном механизме программирования FLASH.

Например: у XMC4xxx механизм программирования FLASH построен на записи команд/данных в адресное пространство некешированной FLASH. Поэтому логично, что такие операции не должны приводить к fault-у. Иначе бы программирование FLASH было бы невозможно.

А например у LPC17xx (и возможно других семейств LPC) механизм программирования FLASH построен на программном API, реализованном в ROM процессора. Т.е. - пользовательский код никогда не должен выполнять операции записи во FLASH. Почему бы тогда LPC не генерить fault при такой попытке?

Каков механизм программирования FLASH у STM32 - я не знаю, не использовал его.

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


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

Кроме того - fault-ы возникают разные:

Если для кода выше возникает "imprecise data bus fault" (такой же fault возникает в случае адресаций с const смещениями и с постфиксной модификацией регистра адреса), то для кода с адресом, вычисляемым из двух регистров (базово-индексная адресация)

image.thumb.png.52d56af0260f6498060bc0ca18df9c1d.png

происходит уже "precise data bus fault" по адресу инструкции STR.

 

PS: XMC4700 имеет write buffer.

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


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

1 hour ago, jcxz said:

Думаю - дело также в штатном механизме программирования FLASH.

Ну что ж, я узнал что-то новое - день прожит, как в своё время говорил мой сенсей, не зря! Спасибо!

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

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


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

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

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

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

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

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

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

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

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

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