реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> источник прерывания, в DummyHandler
sifadin
сообщение Jan 13 2014, 09:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Здравствуйте!
Работаю с SAM4L
Обработчик прерывания общий для неиспользуемых
void Dummy_Handler(void)
{
while (1) {
}
}
Что то происходит в прогр и она вываливается в этот обработчик
как посмотреть источник/номер прерывания Сохраняется ли он каком-либо регистре
Go to the top of the page
 
+Quote Post
KSN
сообщение Jan 13 2014, 09:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Советую изучить как работает контроллер прерываний.
1. Почитайте книгу Джозеф Ю "Ядро Cortex M3 компании ARM"
2. Приведенный код позволяет понять, где "застряли".
CODE

void Hard_fault_handler_c(unsigned long* hardfault_args)
{
unsigned int stacked_r0;
unsigned int stacked_r1;
unsigned int stacked_r2;
unsigned int stacked_r3;
unsigned int stacked_r12;
unsigned int stacked_lr;
unsigned int stacked_pc;
unsigned int stacked_psr;

stacked_r0 = ((unsigned long) hardfault_args[0]);
stacked_r1 = ((unsigned long) hardfault_args[1]);
stacked_r2 = ((unsigned long) hardfault_args[2]);
stacked_r3 = ((unsigned long) hardfault_args[3]);

stacked_r12 = ((unsigned long) hardfault_args[4]);
stacked_lr = ((unsigned long) hardfault_args[5]);
stacked_pc = ((unsigned long) hardfault_args[6]);
stacked_psr = ((unsigned long) hardfault_args[7]);

printf ("[Hard fault handler]\n");
printf ("R0 = %x\n", stacked_r0);
printf ("R1 = %x\n", stacked_r1);
printf ("R2 = %x\n", stacked_r2);
printf ("R3 = %x\n", stacked_r3);
printf ("R12 = %x\n", stacked_r12);
printf ("LR = %x\n", stacked_lr);
printf ("PC = %x\n", stacked_pc);
printf ("PSR = %x\n", stacked_psr);
printf("BFAR: %x\n", *((volatile uint32_t*)0xE000ED38));
printf("CFSR: %x\n", *((volatile uint32_t*)0xE000ED28));
printf("HFSR: %x\n", *((volatile uint32_t*)0xE000ED2C));
printf("DFSR: %x\n", *((volatile uint32_t*)0xE000ED30));
printf("AFSR: %x\n", *((volatile uint32_t*)0xE000ED3C));

while (1)
{
}
}

/******************************************************************************/
/* Cortex-M3 Processor Exceptions Handlers */
/******************************************************************************/

/**
* @brief This function handles NMI exception.
* @param None
* @retval None
*/
void NMI_Handler(void)
{
while (1){};
}

/**
* @brief This function handles Hard Fault exception.
* @param None
* @retval None
*/
void HardFault_Handler(void)
{
unsigned int contr_reg;

contr_reg = __get_CONTROL();
if(contr_reg&2)
{
asm("MRS R0, PSP");
}
else{
asm("MRS R0, MSP");
}
asm("B (Hard_fault_handler_c)"); //top of stack is in R0. It is passed to C-function.

/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}

Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 13 2014, 10:01
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(KSN @ Jan 13 2014, 13:32) *
contr_reg = __get_CONTROL();


Спасибо
А что реализует функция __get_CONTROL
хотя понял - регистр контроля
Прошу прощения а чем отличаются M3 и M4?
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jan 13 2014, 11:37
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Когда попадете в свой Dummy_Handler, смотрите поле Exception Number в регистре Special-purpose program status registers (xPSR).


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 13 2014, 12:49
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(Lotor @ Jan 13 2014, 15:37) *
Когда попадете в свой Dummy_Handler, смотрите поле Exception Number в регистре Special-purpose program status registers (xPSR).

Получается stacked_psr 0x00000040
Какой это номер 0 или 0x40


Получается номер исключения f9 в регистре
Это неадекватное значение - максимум 80
Как такое возможно
Может проблема со стеком?
Не сталкивались?

Go to the top of the page
 
+Quote Post
Lotor
сообщение Jan 13 2014, 12:50
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Вы просто в своем Dummy_Handler остановитесь отладчиком и посмотрите xPSR. А до этого действия посмотрите документацию, например, тут - нужное Вам поле ISR NUMBER [8:0].


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 13 2014, 13:07
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(Lotor @ Jan 13 2014, 16:50) *
Вы просто в своем Dummy_Handler остановитесь отладчиком и посмотрите xPSR. А до этого действия посмотрите документацию, например, тут - нужное Вам поле ISR NUMBER [8:0].

в каком поле смотреть xPSR

кажется тут сбой памяти в основной прг
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jan 13 2014, 13:46
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Ох, Вам на картинке надо смотреть Interrupt Program Status. Значение сами в состоянии прочитать или тоже помочь?)

Бонус: У Вас HardFault, Вам уже выше подсказали код, как это анализироват. Чтобы быстро узнать место проблемной строки кода: прочтите значение стека, прибавьте к нему 24 и посмотрите, что лежит по этому адресу (0x200024C8 для Вашего случая). Это и будет адрес места, откуда Вы свалились.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 13 2014, 14:21
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(Lotor @ Jan 13 2014, 17:46) *
Ох, Вам на картинке надо смотреть Interrupt Program Status. Значение сами в состоянии прочитать или тоже помочь?)

Бонус: У Вас HardFault, Вам уже выше подсказали код, как это анализироват. Чтобы быстро узнать место проблемной строки кода: прочтите значение стека, прибавьте к нему 24 и посмотрите, что лежит по этому адресу (0x200024C8 для Вашего случая). Это и будет адрес места, откуда Вы свалились.

Мерси
Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 14 2014, 08:33
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(Lotor @ Jan 13 2014, 17:46) *
Ох, Вам на картинке надо смотреть Interrupt Program Status. Значение сами в состоянии прочитать или тоже помочь?)

Бонус: У Вас HardFault, Вам уже выше подсказали код, как это анализироват. Чтобы быстро узнать место проблемной строки кода: прочтите значение стека, прибавьте к нему 24 и посмотрите, что лежит по этому адресу (0x200024C8 для Вашего случая). Это и будет адрес места, откуда Вы свалились.

А почему плюс 24
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jan 14 2014, 09:35
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(sifadin @ Jan 14 2014, 12:33) *
А почему плюс 24

Потому что документация... Популярно тут.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
sifadin
сообщение Jan 14 2014, 12:58
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 11-02-09
Пользователь №: 44 698



Цитата(Lotor @ Jan 14 2014, 13:35) *
Потому что документация... Популярно тут.

Благодарю!
А можете кинуть ссылку на руководство по ассемблеру? и на совм исп С и asm На atmel не нашел Честно пытался sm.gif
Go to the top of the page
 
+Quote Post
Lotor
сообщение Jan 15 2014, 09:27
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(sifadin @ Jan 14 2014, 16:58) *
На atmel не нашел Честно пытался sm.gif


Ну теперь честно попытайтесь поискать на сайте производителя ядра Вашего мк - arm

PS Предположу, что Вам будет проще скачать со здешнего фтп книгу, что тут советовали выше.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 01:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016