Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача адреса DATA ABORT из исключения
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
id_Alx
В ходе выполения программа выпадает в DATA ABORT и перезапускается WDT. Хочу после перезапуска получить адрес инструкции вызвавшей исключение. В исключении сохраняю в глобальную переменную, в основном теле вычитываю при старте. В отладчике все работает. Без отладчика переменная abort_addr из исключения не устанавливается, а при каждом нажатии на сброс увеличивается на единицу. Почему не устанавливается?

Код
static volatile __no_init dword abort_addr;

#pragma optimize = none
__irq __arm void Abort_Handler()
{
  static __no_init dword j;
  dword ttt = j;
  
  asm("sub r0,lr,#8  \n" );
  abort_addr = ttt;
  while (1)
  {
  }
}


int main( void )
{
  // всякая инициализация

  printf( "0x%08X", abort_addr ); // III
  abort_addr++;

  while (1);
}
yashok
Цитата
Без отладчика переменная abort_addr из исключения не устанавливается, а при каждом нажатии на сброс увеличивается на единицу. Почему не устанавливается?


Если сброс происходит только при нажатии на сброс, значит он не идет на DATA ABORT.
id_Alx
На DATA ABORT точно заходит, т.к. я сам его вызываю путем
Код
volatile word *k = (word *)1; // III
  *k = 1;
, в примере выше я вместо WDT использую сброс, с WDT ситуация аналогичная.

Код
static volatile __no_init dword abort_addr;

#pragma optimize = none
__irq __arm void Abort_Handler()
{
  static __no_init dword j;
  dword ttt = j;
  
  asm("sub r0,lr,#8  \n" );
  abort_addr = ttt;
  while (1)
  {
  }
}


int main( void )
{
  // всякая инициализация

  printf( "0x%08X", abort_addr ); // III
  abort_addr++;
  // ждем пока уйдет строка из буфера...

   volatile word *k = (word *)1; // III
  *k = 1; // DATA ABORT

  while (1);
}


sergeeff
Заходите на сайте автора micromonitor'a (http://www.umonfw.com/releases/). Качаете последнюю версию. Там реализована простая и понятная схема отработки data_abort и прочего для ARM.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.