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

 
 
 
Reply to this topicStart new topic
> arm7, flash vs ram , проц сам резетится
buletz
сообщение Mar 19 2007, 14:58
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



Отлаживаю проц через IAR workbench 4.30, проц LPC2138
короче беда в том, что когдf прошиваю проц в RAM - все работает ОК. Как только прошиваю проц во FLASh, то проц периодически сам резетится.
Шью одну и ту же компиляцию проги.
В чем может быть проблема ?

Сообщение отредактировал asdjkasdjkalsdjkl - Mar 19 2007, 14:59
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Mar 20 2007, 18:21
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



а попробуй разные компиляции проги ;-(


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
VAI
сообщение Mar 20 2007, 20:24
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата
а попробуй разные компиляции проги ;-(

правильно. Прога настроенная для работы в RAM и настроенная для работы во флэшь - разные.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
buletz
сообщение Mar 21 2007, 19:44
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



в IAR-е есть удобная вещь, это Debug и Release варианты (один и тот же проект, но с разными настройками). Соотв-но у меня Debug - это RAM вариант, а Release- это FLASH вариант.
В RAM и FLASH вариантах у меня подключается разные конфиг. файлы линкера, в которых прописаны области памяти.

Но сами исходники (на си) у меня не отличаются.

Я локализовал проблему - сброс проца наблюдается, если разрешить прерывание по последовательному каналу. И вероятно сброс происходит когда по каналу что-то приходит, т.е. возникает прерывание.

Непонятно одно : при работе из RAM - все нормально, никаких неожиданных сбросов (reset) проца нет!

Не могу логически понять, как это может быть ? МОжет кто сталкивался ?
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 21 2007, 20:23
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



А REMAP какой ?
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 22 2007, 07:05
Сообщение #6


Знающий
****

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



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


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
buletz
сообщение Mar 23 2007, 17:09
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



2DASM: a REMAP это что ?

память конфигурится у меня так:
// Memory Accelerator Module (MAM) definitions
// <o1.0..1> MAM Control
// <0=> Disabled
// <1=> Partially Enabled
// <2=> Fully Enabled
// <i> Mode
// <o2.0..2> MAM Timing
// <0=> Reserved <1=> 1 <2=> 2 <3=> 3
// <4=> 4 <5=> 5 <6=> 6 <7=> 7
// <i> Fetch Cycles
MAMTIM = 0x04;
MAMCR = 0x02;

#ifdef USER_RAM
MEMMAP = 2;
#endif
#ifdef USER_FLASH
MEMMAP = 1;
#endif
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Mar 23 2007, 17:51
Сообщение #8


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



А если оптимизатор в релиз-варианте выключить?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
buletz
сообщение Mar 23 2007, 18:31
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



оптимизация : None (best debug support)
т.е. оптимизации нет

2Andy Mozzhevilov: как я понял, у вас была обратная проблема. Т.е. во flash все работало нормально, а при отладке из RAM были глюки из-за того что переферия конфигурилась неправильно.
У меня получается наоборот, в RAM все ок, а во FLASH спонтанные резеты.

Может возникает какой-нибудь exception?
Типа Undefined instruction, Prefetch abort, Data abort...
не дадите исходник как обрабатывать произвольный exception, а не IRQ ?

У меня стоит следующая процедурка для обработки прерываний
//---------------------------------------------------------------------------------------
#pragma vector=0x18
__irq __arm void IRQ_ISR_Handler (void)
{
void (*interrupt_function)();
unsigned int vector;

vector = VICVectAddr; // Get interrupt vector.
interrupt_function = (void(*)())vector;
(*interrupt_function)(); // Call vectored interrupt function.
}

Сообщение отредактировал asdjkasdjkalsdjkl - Mar 23 2007, 18:31
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 26 2007, 05:47
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 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         */
    }
}


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
buletz
сообщение Mar 26 2007, 09:19
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 4-07-06
Из: Moscow
Пользователь №: 18 554



а что за затычки такие, типа while (1) {}
если он в них попадет, то уже никогда не выйдет из них
зачем так?
может надо делать пустое тело затычки {}
?
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 26 2007, 09:26
Сообщение #12


Знающий
****

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



Цитата(asdjkasdjkalsdjkl @ Mar 26 2007, 12:19) *
а что за затычки такие, типа while (1) {}
если он в них попадет, то уже никогда не выйдет из них
зачем так?
может надо делать пустое тело затычки {}
?


При попадании туда он будет крутиться в бесконечном цикле.
Вы в отладчике нажмете стоп и увидите, куда он упал.
Если хотите, чтобы он выходил из исключения, то нужно обработать исключение корректно.
Сейчас вам нужно просто увидеть, куда он падает. Если сейчас у вас нет векторов по исключениям, а проц в них попадает, то выполняются случайные команды, который возможно и приводят к похожим на ресет последствиям.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post

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

 


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


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