|
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
|
|
| 22.09.2014, 10:41 | |
|
Ответы с готовыми решениями:
1
stm32f103 + FreeRTOS непонятный hard fault и ещё кое что GPIOA->BSRR - Hard fault Hard Fault _ Idle Task |
|
1 / 1 / 1
Регистрация: 28.02.2013
Сообщений: 93
|
|
| 02.10.2014, 15:00 [ТС] | |
|
0
|
|
| 02.10.2014, 15:00 | |
|
Помогаю со студенческими работами здесь
2
jetlink8 STM32 - Hard Fault [Решено] STM32F4 + MP3 Player + I2C уходит в hard fault
Конфигурация MicroEJ VM для EFM32GG После hard reset, винда не грузится Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
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, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|