Перейти к содержанию
    

Не могу понять природу исключения

странно. при вхождении в эту функцию я получаю сообщение от дебагера. в других функциях я такого сообщения не получаю.

 

Вот тут откройте окошко с памятью и посмотрите содержимое с адреса 0x2000ff68.

 

Или в окошке дизассемблера по шагам до исключения пройдите из состояния debug1.

 

там находяться какие то данные 14 07

post-71075-1528293725_thumb.png

post-71075-1528295002_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

там находяться какие то данные 14 07

С адресом я ошибся несколько. Схема следующая:

- Ловим exception

- Смоторим SP

- Изучаем содержимое стека

- Смотрим дизассемблер, делаем выводы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С адресом я ошибся несколько. Схема следующая:

- Ловим exception

- Смоторим SP

- Изучаем содержимое стека

- Смотрим дизассемблер, делаем выводы

 

А где в IAR можно увидеть Exception stack frame?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в опциях проекта Linker - Advanced, нижняя птичка. Stack usage.

Я отсадил бы вылетающий код в отдельный проект и попробовал его под симулятором.

На кол-во "активных" BP есть ограничение. Если вылазит ругательство - убирайте ненужные BP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в опциях проекта Linker - Advanced, нижняя птичка. Stack usage.

Я отсадил бы вылетающий код в отдельный проект и попробовал его под симулятором.

На кол-во "активных" BP есть ограничение. Если вылазит ругательство - убирайте ненужные BP.

брэкпоинт один а он видит целую кучу.

 

когда я кликаю на Exception Frame компайлер посылает меня в какойто адрес вообще за границами програмной памяти 0xffffffff8

post-71075-1528347559_thumb.png

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

брэкпоинт один а он видит целую кучу.

Посмотрите опции настройки J-link, там и исключения поминаются. Уменьшите скорость интерфейса, если это возможно.

Оптимизацию, я думаю, Вы отключили. А с количеством BP это как-то странно.

Для установки BP используйте __no_operation();

В проблемной ф-ии закомментируйте весь код, оставьте __no_operation() и return.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите опции настройки J-link, там и исключения поминаются. Уменьшите скорость интерфейса, если это возможно.

Оптимизацию, я думаю, Вы отключили. А с количеством BP это как-то странно.

Для установки BP используйте __no_operation();

В проблемной ф-ии закомментируйте весь код, оставьте __no_operation() и return.

 

С пустой функцией все нормально. Но если вставляю строчку в нее - вылетает в эксепшен на0x32da 0xed2d 0x8b02 VPUSH {D8}.

Я вообще в шоке. Работаю с IAR несколько лет не помню чтоб когда то такое было.

 

я все время попадаю в

void default_isr(void)
{
   #define VECTORNUM  (*(volatile uint8_t*)(0xE000ED04))

   printf("\n****default_isr entered on vector %d*****\r\n\n",VECTORNUM);
   return;
}

в терминале смотрю что printf написал

****default_isr entered on vector 3*****

полная хренотень

post-71075-1528609160_thumb.png

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А FPU-то включен? Что в CPACR пишется?

 

блиииин. спасибо. отключил FPU - все бежит. но как? у камня есть аппаратный FPU и при создании проекта IAR честно включает его в настройках - General Options -> Floating point settings -> VFPv4 single precision.

 

Вопрос кому морду бить - производителям камня или IAR?

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос кому морду бить - производителям камня или IAR?

Не знаю, как принято у IAR'а, но по-моему, инициализация железа - это таки дело пользователя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю, как принято у IAR'а, но по-моему, инициализация железа - это таки дело пользователя.

 

а что есть инициализация FPU? я нигде в примерах для Kinetis не встречал.

 

мда. порылся в драйверах и там есть fpu.h - __intrinsic void __enable_FPU(void); я думал модуль работает сразу, без лишних телодвижений.

 

есть более универсальный код

#define CORTEX_M4_BLOCK  0xe000e000
#define CPACR *(unsigned long *)(CORTEX_M4_BLOCK + 0xd88)  // Co-processor Access Control 

CPACR |= (0xf << 20);   // enable access to FPU

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

. . . Вопрос кому морду бить - производителям камня или IAR?
Посмотрите еще в "родных" аппнотах, в проектах IAR, могут быть установлены

макро-переменные, Compiler - Preprocessor, predefined symb. В опциях линкера тоже могут устанавливаться. Может библиотека какая не прилинковалась /правильно/.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите еще в "родных" аппнотах, в проектах IAR, могут быть установлены

макро-переменные, Compiler - Preprocessor, predefined symb. В опциях линкера тоже могут устанавливаться. Может библиотека какая не прилинковалась /правильно/.

 

оказывается в Кинетис FPU надо запускать. у меня был проект для К70 и там в SysInit он запускался а в SysInit для К10 нет.

 

так что морду надо бить мне.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...