Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93

Попадание в Hard Fault после POP в Cortex-M3 (EFM32GG-STK3700 с FreeRTOS)

22.09.2014, 10:41. Показов 2456. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Столкнулся с непонятным поведением процессора при выполнении инструкции POP.

Использую EFM32GG-STK3700 плату, на ней FreeRTOS v3.0.0, документация - http://www.silabs.com/Support%... 2GG990.pdf

Подключаюсь к борде с J-Link GDB Server + J-Link Commander и получаю отладочные трейсы
(Легенда: жирный шрифт - J-Link Commander traces, наклонный шрифт - мои комменты к действиям, подчеркнутый и увеличенный шрифт - мои вопросы):

Ставлю точку останова на 'vPortEnterCritical' - меня эта функция интересует.
J-Link>setbp 17d28
Breakpoint set @ addr 0x00017D28 (Handle = 1)

J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

J-Link>go

Если посмотреть в R15 регистр, то видим адрес '0x00017D28' => процессор остановился на 'vPortEnterCritical'.
J-Link>regs
R0 = 0000004C, R1 = 00000000, R2 = 00000050, R3 = 00000001
R4 = A5A5A5A5, R5 = A5A5A5A5, R6 = A5A5A5A5, R7 = 2001FF68
R8 = A5A5A5A5, R9 = A5A5A5A5, R10= A5A5A5A5, R11= A5A5A5A5
R12= A5A5A5A5, R13= 2001FF68, MSP= 2001FF68, PSP= 20002450
R14(LR) = 0001649D, R15(PC) = 00017D28
XPSR = 21000000, APSR = 20000000, EPSR = 01000000, IPSR = 00000000
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
CycleCnt = 811941A2

J-Link>mem 2001ff60 8
2001FF60 = 4D 59 01 00 64 17 00 20

Забегая вперед, проверяю память по адресу 0x2001ff60 - там будет вершина стека после PUSH инструкции.

J-Link>s
00017D28: 80 B5 PUSH {R7,LR}

J-Link>regs
R0 = 0000004C, R1 = 00000000, R2 = 00000050, R3 = 00000001
R4 = A5A5A5A5, R5 = A5A5A5A5, R6 = A5A5A5A5, R7 = 2001FF68
R8 = A5A5A5A5, R9 = A5A5A5A5, R10= A5A5A5A5, R11= A5A5A5A5
R12= A5A5A5A5, R13= 2001FF60, MSP= 2001FF60, PSP= 20002450
R14(LR) = 0001649D, R15(PC) = 00017D2A
XPSR = 21000000, APSR = 20000000, EPSR = 01000000, IPSR = 00000000
CFBP = 00000000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 00, PRIMASK = 00
CycleCnt = 811941A2

J-Link>mem 2001ff60 8
2001FF60 = 4D 59 01 00 64 17 00 20

Если сравнить предыдущий вывод стека (до PUSH) и сейчас, то видно, что память не изменилась. А должна бы - туда ведь содержимое 2-х регистров положено было.

Как такое возможно при PUSH инструкции?

J-Link>s
00017D2A: 00 AF ADD R7, SP, #0

J-Link>s
00017D2C: 00 F0 1A F8 BL #+0x34

J-Link>s
00017D64: EF F3 11 80 MRS R0, BASEPRI

J-Link>s
00017D68: EF F3 11 80 MRS R0, BASEPRI

J-Link>s
00017D6C: 4F F0 50 01 MOV R1, #0x50

J-Link>s
00017D70: 81 F3 11 88 MSR BASEPRI, R1

J-Link>s
00017D74: 70 47 BX LR

J-Link>s
00017D30: 02 4B LDR R3, [PC, #+0x08]

J-Link>s
00017D32: 1B 68 LDR R3, [R3]

J-Link>s
00017D34: 5A 1C ADD R2, R3, #1

J-Link>s
00017D36: 01 4B LDR R3, [PC, #+0x04]

J-Link>s
00017D38: 1A 60 STR R2, [R3]

J-Link>regs
R0 = 00000000, R1 = 00000050, R2 = AAAAAAAB, R3 = 200000E0
R4 = A5A5A5A5, R5 = A5A5A5A5, R6 = A5A5A5A5, R7 = 2001FF60
R8 = A5A5A5A5, R9 = A5A5A5A5, R10= A5A5A5A5, R11= A5A5A5A5
R12= A5A5A5A5, R13= 2001FF60, MSP= 2001FF60, PSP= 20002450
R14(LR) = 00017D31, R15(PC) = 00017D3A
XPSR = 81000000, APSR = 80000000, EPSR = 01000000, IPSR = 00000000
CFBP = 00004000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 40, PRIMASK = 00
CycleCnt = 811941B1


Проверяю стековую память перед POP инструкцией - она не изменилась.
J-Link>mem 2001ff60 8
2001FF60 = 4D 59 01 00 64 17 00 20

J-Link>s
00017D3A: 80 BD POP {R7,PC}

J-Link>regs
R0 = 00000000, R1 = 00000050, R2 = AAAAAAAB, R3 = 200000E0
R4 = A5A5A5A5, R5 = A5A5A5A5, R6 = A5A5A5A5, R7 = 1079B3A0
R8 = A5A5A5A5, R9 = A5A5A5A5, R10= A5A5A5A5, R11= A5A5A5A5
R12= A5A5A5A5, R13= 2001FF68, MSP= 2001FF68, PSP= 20002450
R14(LR) = 00017D31, R15(PC) = 1016D47C
XPSR = 81000000, APSR = 80000000, EPSR = 01000000, IPSR = 00000000
CFBP = 00004000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 40, PRIMASK = 00
CycleCnt = 811941B1


Вижу, что R15 и R7 содержат данные не из стека. В R15 вообще недоступный для перехода адрес.
http://www.silabs.com/Support%... 2GG990.pdf - раздел 2.3


Как такое возможно при POP инструкции?

Проверяю стековую память - она не изменилась.
J-Link>mem 2001ff60 8
2001FF60 = 4D 59 01 00 64 17 00 20


Пытаюсь посмотреть что находится по адресу из R15
J-Link>mem 1016D47C 4
Could not read memory.


И ожидаемо не могу шагнуть дебаггером дальше
J-Link>s
****** Error: Failed to read current instruction.


Добавляю точку останова в HardFault_Handler и отпускаю дебаггер
J-Link>setbp 120e0
Breakpoint set @ addr 0x000120E0 (Handle = 2)
J-Link>go


Проверяю состояние системы - останов в HardFault_Handler.
J-Link>regs
R0 = 00000000, R1 = 00000050, R2 = AAAAAAAB, R3 = 200000E0
R4 = A5A5A5A5, R5 = A5A5A5A5, R6 = A5A5A5A5, R7 = 1079B3A0
R8 = A5A5A5A5, R9 = A5A5A5A5, R10= A5A5A5A5, R11= A5A5A5A5
R12= A5A5A5A5, R13= 2001FF48, MSP= 2001FF48, PSP= 20002450
R14(LR) = FFFFFFF9, R15(PC) = 000120E0
XPSR = 81000003, APSR = 80000000, EPSR = 01000000, IPSR = 00000003
CFBP = 00004000, CONTROL = 00, FAULTMASK = 00, BASEPRI = 40, PRIMASK = 00
CycleCnt = 811941BA
J-Link>


Есть подозрение на prefetch режим процессора, и была найдена errata на эту тему
http://www.silabs.com/Support%... istory.pdf - там смотреть на ID MSC_E101.

В коде был найден адрес MSC_READCTRL - 0х400C0004, я выставлял и сбрасывал 8 бит - бит, как я понял, отвечающий за prefetch, но ошибка с POP так и осталась. Возможно, я еще должен дополнительно выставить какие-то биты...

Как не использовать prefetch (Do not use prefetch)? Как его отключить, если включен?

Буду благодарен за любую подсказку куда копать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2014, 10:41
Ответы с готовыми решениями:

stm32f103 + FreeRTOS непонятный hard fault и ещё кое что
Делаю программу для управления двигателем. В основе stm32f103c8t6 на нём FriiRTOS 8 версии. Есть не периодическая задача обработки данных...

GPIOA->BSRR - Hard fault
Здравствуйте, коллеги! Начал изучать stm32. Есть плата собственного изготовления stm32f103c8t6. Хотел помигать через регистр 74hc595....

Hard Fault _ Idle Task
Доброго времени суток. Stm32F205RE РТОС использовал Uc/Os 2 и FriiRtos. ПО управляет электродвигателем. Проблема - вываливаюсь в...

1
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
02.10.2014, 15:00  [ТС]
Цитата Сообщение от RRR_RRR_RRR Посмотреть сообщение
Есть подозрение на prefetch режим процессора, и была найдена errata на эту тему
http://www.silabs.com/Support%... istory.pdf - там смотреть на ID MSC_E101.
Из переписки с саппортом выяснилось, что prefetch не включен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2014, 15:00
Помогаю со студенческими работами здесь

jetlink8 STM32 - Hard Fault
Купили на работу нам "отладчик", jetlink8. Который якобы все поддерживает. SWD, JTAG. Прикрутили мы его к Keil-y по инструкции. Запуск...

[Решено] STM32F4 + MP3 Player + I2C уходит в hard fault
Добрый вечер! Есть проект с STM32F4Dyscovery. На FSMC шине висит LCD (контроллер T6963C). STM32F4 декодирует mp3 и воспроизводит через...

Hard Error после обновления
Добрый день. После очередного обновления windows 10 стали выскакивать ошибки hard error, перестал открываться Пуск, службы звука сразу...

Конфигурация MicroEJ VM для EFM32GG
Добрый день! Пытаюсь создать и запустить Java-приложение для EFM32GG-STK3700 - мигание LED'ом. Проблема в следующем - Java VM...

После hard reset, винда не грузится
Добрый вечер. Помогите пожалуйста. Столкнулся с такой проблемой. Играл в игру, все подвисло, не помогал даже alt+ctrl+del. Решил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru