SergR 0 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба Приветствию. Использую STM32L051K6. Пытаюсь сделать чтение из флеш следующим образом: #define __EEAdr 0x08080001 uint32_t Data: Data = *(__IO uint32_t*) __EEAdr ; При выполнении этого кода проц зависает (вылитает в HardFault_Handler) не пойму что делать. PS При чтении по адресу 0x08000001 работает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба 13 минут назад, SergR сказал: При выполнении этого кода проц зависает (вылитает в HardFault_Handler) Ну а что-ж ему ещё делать раз Вы мануал не читаете? Невыровненный доступ однако. Цитата При чтении по адресу 0x08000001 работает... Работает??? Да ладно?! А ничего, что мануал на Cortex-M0+ говорит: The following data accesses always generate an alignment fault: • Non word-aligned LDM and POP • Non word-aligned STM and PUSH • Non halfword-aligned LDR{S}H and STRH • Non word-aligned LDR and STR. Вангую что не "работает", а просто компилятор выбросил это "чтение" как неиспользуемое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 19 27 ноября, 2019 Опубликовано 27 ноября, 2019 (изменено) · Жалоба 21 minutes ago, SergR said: не пойму что делать. Адрес нужно выровнить на границу слова и по-чаще обращаться к даташитам. Изменено 27 ноября, 2019 пользователем Forger Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба 11 минут назад, Forger сказал: Адрес нужно выровнить на границу слова и по-чаще обращаться к даташитам. ...и смотреть в листинг (или асм-окно дебаггера) - какие команды там получаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergR 0 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба Ок. Согласен адрес таки не выровнян. Но почему не работает при #define __EEAdr 0x08080000 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба Что именно "не работает"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergR 0 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба При выполнении строки Data = *(__IO uint32_t*) __EEAdr ; Влетает в HardFault_Handler, затем рисет по вочдогу... PS Всё. Работает! Всем Спасибо, Вопрос снят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 124 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба 20 минут назад, SergR сказал: Влетает в HardFault_Handler, затем рисет по вочдогу... Вам осталось добить "влетает" и "затем", после этого ваше сообщение станет понятно нерусскоязычным и окончательно непонятно русскоязычным. Открываю за вас документацию, читаю (3.3.3 Reading NVM): Цитата To read the NVM content, take any address from Section 3.3.1: NVM organization. The clock of the memory interface must be running. (see MIFEN bit in Section 7.3.12: AHB peripheral clock enable register (RCC_AHBENR)). Сделали? Читаю дальше (3.5.1 Hard fault): Цитата A hard fault is generated on: • The memory bus if a read access is attempted when RDP is set. • The memory bus if a read as data is received; then, the memory interface is waiting for a data/address during a half-page write (after the 1st address and before the 16th address). • The register bus if an incorrect value is written in PEKEYR, PRGKEYR, or OPTKEYR. Тут вашего случая нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergR 0 27 ноября, 2019 Опубликовано 27 ноября, 2019 · Жалоба Да Сергей. Ошибка была в клоке. Уже работает. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 28 ноября, 2019 Опубликовано 28 ноября, 2019 · Жалоба 7 hours ago, SergR said: Влетает в HardFault_Handler, затем рисет по вочдогу... А вы сделайте правильный обработчик этого исключения. Алгоритм в книге Джозефа Ю есть. Правда на m0 там мало что можно выудить, не то, что в m3/m4(f). Но всё же. Чтобы в дальнейшем было понятно, почему фолт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба On 11/28/2019 at 3:16 AM, haker_fox said: А вы сделайте правильный обработчик этого исключения. Алгоритм в книге Джозефа Ю есть. Правда на m0 там мало что можно выудить, не то, что в m3/m4(f). Но всё же. Чтобы в дальнейшем было понятно, почему фолт. кстати тут подробнее. Это типа регистры в исключении вычитать? Адрес команды, вызвавшей исключение я так по тому способу и не выудил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 1 hour ago, DASM said: Это типа регистры в исключении вычитать? Да. 1 hour ago, DASM said: Адрес команды, вызвавшей исключение я так по тому способу и не выудил. Для этого вычитывается сохранённый во фрейме регистр PC. Но иногда там действительно мусор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 21 minutes ago, haker_fox said: Да. Для этого вычитывается сохранённый во фрейме регистр PC. Но иногда там действительно мусор. а, вспомнил почему мне толку мало с того было.. у меня ж юкос стоял, в лучшем случае увидеть что exception вызвал переключатель потоков, так что не помогало ни разу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 5 hours ago, DASM said: в лучшем случае увидеть что exception вызвал переключатель потоков, так что не помогало ни разу. У меня FreeRTOS. Но довольно часто в PC - 1 команда действительно находится адрес процедуры, вызывавшей сбой. А в LR - адрес возврата. Более того, есть hardfault "точные" (precise) и "неточные" (imprecise). Во втором случае узнать адрес причину сбоя несколько проблематично, ибо команда, приведшая к этому, уже давно выполнена (как я понимаю, за счёт кэшей). Так вот, если эти кэши отключить, то исключение превращается в точное, и тогда уже можно заниматься отладкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 203 29 ноября, 2019 Опубликовано 29 ноября, 2019 · Жалоба 20 минут назад, haker_fox сказал: Так вот, если эти кэши отключить, то исключение превращается в точное, и тогда уже можно заниматься отладкой. Нет, не превратится. Попробуйте. Кроме кешей есть ещё буфер записи. И всякие межшинные бриджи. По крайней мере на CM3/CM4 - не превратится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться