>> что за шаманство с вводом адреса из sp?
Нашел данную методику но она не помогает.
1. Первым важным для нас регистром является счетчик команд.
Переменная pc содержит значение счетчика команд где содержится адрес инструкции, которая выполнялась, когда произошла
Hard Fault ошибка (или другая ошибка).
Чтобы найти инструкцию по адресу, содержащемуся в переменной pc,
откройте окно Disassembly (IAR) в отладчике и вручную введите адрес в окно Go to для
просмотра asm инструкций по этому адресу.
2. Далее вручную установите точку останова в Disassembly отладчике или точку прерывания
выполнения или доступа по этому адресу. С установленной точкой
останова перезапустите приложение, чтобы увидеть, к какой
строке C/C++ кода относится инструкция.
3. Код обработчика HardFault_Handler()
#pragma section = "CSTACK"
#pragma optimize=none
extern "C" void HardFault_Handler(void)
{
volatile uint32_t r0;
volatile uint32_t r1;
volatile uint32_t r2;
volatile uint32_t r3;
volatile uint32_t r12;
volatile uint32_t lr;
volatile uint32_t pc;
volatile uint32_t psr;
uint32_t *pStackAddress = (uint32_t*)__section_begin("CSTACK");
r0 = pStackAddress++;
r1 = pStackAddress++;
r2 = pStackAddress++;
r3 = pStackAddress++;
r12 = pStackAddress++;
lr = pStackAddress++; //Link register
pc = pStackAddress++; //Program counter
psr = pStackAddress; //Program status register
//When the following line is hit, the variables contain the register values
volatile int i = 0;
while(i==0); //Stop here
}
По данной методике результат можно посмотреть на
картинке.
Методика 2.
Шагаем в Disassembly из обработчика.
Момент останова в обработчике >
картинкаМомент выхода из обработчика >
картинка>>Вопрос третий - вылетает при первом же обращении к push()?
Обычно после первого же, но иногда со второго.
>>прерывание возникает раньше, чем запустилась ОС?
Исключено. Прерывания запрещены до старта OS. Прерывание UART приходит с компа по моей команде, когда уже программа запущена. Если метод push() закомментировать, то все работает, но нет связи по UART.
Сообщение отредактировал sevstels - Mar 20 2018, 07:04