|
|
  |
arm7, flash vs ram , проц сам резетится |
|
|
|
Mar 22 2007, 07:05
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Почитайте поток моего сознания: http://electronix.ru/forum/index.php?showtopic=20923&hl=может происходит что-то схожее. UART может наcтраиваться бутлоадером, к примеру, который успевает стартовать, если внешний пин P0.14 сидит всегда в нуле.
--------------------
Пасу котов...
|
|
|
|
|
Mar 26 2007, 05:47
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(asdjkasdjkalsdjkl @ Mar 23 2007, 20:31)  оптимизация : None (best debug support) т.е. оптимизации нет
2Andy Mozzhevilov: как я понял, у вас была обратная проблема. Т.е. во flash все работало нормально, а при отладке из RAM были глюки из-за того что переферия конфигурилась неправильно. У меня получается наоборот, в RAM все ок, а во FLASH спонтанные резеты.
Может возникает какой-нибудь exception? Типа Undefined instruction, Prefetch abort, Data abort... Так проверьте. На все вектора как минимум затычки типа: Код #pragma vector = 0x04 __irq __arm void undef_instr_isr(void) { while(1) { } }
#pragma vector = 0x08 __irq __arm void swi_isr(void) { while(1) { } }
#pragma vector = 0x0c __irq __arm void prefetch_abort_isr(void) { while(1) { } }
#pragma vector = 0x10 __irq __arm void data_abort_isr(void) { while(1) { } } Вот мой обработчик irq: Код typedef void (*PFNCT)(void);
void irq_isr (void) { PFNCT pfnct;
pfnct = (PFNCT)VICVectAddr; /* Read the interrupt vector from the VIC */ while (pfnct != (PFNCT)0) /* Handle ALL interrupting devices */ { (*pfnct)(); /* Call ISR for interrupting device */ VICVectAddr = 0; /* update priority hardware */
pfnct = (PFNCT)VICVectAddr; /* Read the interrupt vector from the VIC */ } }
--------------------
Пасу котов...
|
|
|
|
|
Mar 26 2007, 09:26
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(asdjkasdjkalsdjkl @ Mar 26 2007, 12:19)  а что за затычки такие, типа while (1) {} если он в них попадет, то уже никогда не выйдет из них зачем так? может надо делать пустое тело затычки {} ? При попадании туда он будет крутиться в бесконечном цикле. Вы в отладчике нажмете стоп и увидите, куда он упал. Если хотите, чтобы он выходил из исключения, то нужно обработать исключение корректно. Сейчас вам нужно просто увидеть, куда он падает. Если сейчас у вас нет векторов по исключениям, а проц в них попадает, то выполняются случайные команды, который возможно и приводят к похожим на ресет последствиям.
--------------------
Пасу котов...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|