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

 
 
> Баг ядра LPC2368?
GetSmart
сообщение Nov 12 2009, 10:43
Сообщение #1


.
******

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



Проц LPC2368. Отладчик MT-Link v6.0. Прога под FreeRTOS. Компилятор CW 1.7 build 9

В майне всё как полагается - регистрируются треды и в конце вызывается vTaskStartScheduler(). Собственно во все треды управление залетает, до тех пор пока не встретится vTaskDelay(). Далее управление больше не возвращается. Баг возникает очень редко, но долговременно. Часто до выключения питания. Перепрограммирование проца баг не снимает.

Во всех тредах IRQ и FIQ разрешены (CPSR = x000001f). Расследование показывает, что не вызываются IRQ вообще, хотя FIQи прекрасно работают. Настройки таймера FreeRTOS правильные. Все регистры в норме, таймер тикает до установленного MATCH, потом опять с нуля. В VIC корректный адрес обработчика TIMER0 и приоритет = 1 (проверено). Все остальные регистры VIC тоже в порядке, причём в VICIRQStatus и VICRawIntr установлен запрос на прерывание от TIMER0, но оно туда не идёт. Брейкпоинт на 0x18 и на первой команде прерывания (IRQ) TIMER0 не срабатывает. IRQ реально не вызывается. Не могу выяснить проблему. Кстати, в начале майна стоит запрет прерываний в CPSR и команда VICIntEnClr = ~0;

ЗЫ. Одну странность заметил. В регистре VICRawIntr наблюдается включённый бит 3 (ARM Core Embedded ICE, DbgCommTX), причём этого же бита нет ни в VICIRQStatus ни в VICFIQStatus. Состояние первых 16-ти регистров VIC на картинке.

Забыл указать - прога без конца крутится в цикле for (;;) из функции static portTASK_FUNCTION( prvIdleTask, pvParameters ) периодически залетая в FIQ. В ней аналогично CPSR = x000001f.

В течении ближайшего часа могу продемонстрировать баг "вживую" на "телевизоре" TeamViewer. Реальным пацанам smile.gif

Сообщение отредактировал GetSmart - Nov 12 2009, 10:36
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Nov 17 2009, 13:41
Сообщение #2


.
******

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



Вот исправленный макрос
CODE
#define portSAVE_CONTEXT() \
{ \
extern volatile void * volatile pxCurrentTCB; \
extern volatile unsigned portLONG ulCriticalNesting; \
\
/* Push R0 as we are going to use the register. */ \
asm volatile ( \
"STMDB SP!, {R0} \n\t" \
\
/* Set R0 to point to the task stack pointer. */ \
"SUB SP,SP,#4 \n\t" \
"STMIA SP,{SP}^ \n\t" \
"NOP \n\t" \
"LDMIA SP!,{R0} \n\t" \
\
/* Push the return address onto the stack. */ \
"STMDB R0!, {LR} \n\t" \
\
/* Now we have saved LR we can use it instead of R0. */ \
"MOV LR, R0 \n\t" \
\
/* Pop R0 so we can save it onto the system mode stack. */ \
"LDMIA SP!, {R0} \n\t" \
\
/* Push all the system mode registers onto the task stack. */ \
"STMDB LR,{R0-LR}^ \n\t" \
"NOP \n\t" \
"SUB LR, LR, #60 \n\t" \
\
/* Push the SPSR onto the task stack. */ \
"MRS R0, SPSR \n\t" \
"STMDB LR!, {R0} \n\t" \
\
"LDR R0, =ulCriticalNesting \n\t" \
"LDR R0, [R0] \n\t" \
"STMDB LR!, {R0} \n\t" \
\
/* Store the new top of stack for the task. */ \
"LDR R0, =pxCurrentTCB \n\t" \
"LDR R0, [R0] \n\t" \
"STR LR, [R0] \n\t" \
); \
( void ) ulCriticalNesting; \
( void ) pxCurrentTCB; \
}
#endif


smile.gifsmile.gifsmile.gif

Теперь и на Supervisor-е работает вложенный FIQ! А раньше так же "падал" как и на IRQ.

Сообщение отредактировал GetSmart - Nov 17 2009, 13:42


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- GetSmart   Баг ядра LPC2368?   Nov 12 2009, 10:43
- - KRS   Ну то что прерывание по DCC TX разрешено - так мож...   Nov 12 2009, 11:36
- - GetSmart   ----------------- Есть предположение, что это не б...   Nov 12 2009, 11:40
|- - KRS   Цитата(GetSmart @ Nov 12 2009, 14:37) ---...   Nov 12 2009, 11:40
- - GetSmart   Может кто-нибудь знает, как сбрасываются запросы о...   Nov 12 2009, 12:13
|- - KRS   Цитата(GetSmart @ Nov 12 2009, 15:13) Всв...   Nov 12 2009, 12:38
|- - VslavX   Цитата(GetSmart @ Nov 12 2009, 14:13) Пос...   Nov 12 2009, 13:40
- - GetSmart   Зачем создавать новую тему, если можно здесь продо...   Nov 17 2009, 12:59
- - Rst7   ЦитатаЛибо прошу подсказать советом как мне найти ...   Nov 17 2009, 13:04
|- - GetSmart   Цитата(Rst7 @ Nov 17 2009, 19:04) Короче,...   Nov 17 2009, 13:19
|- - Dima_G   Цитата(GetSmart @ Nov 17 2009, 16:19) Вна...   Nov 17 2009, 16:24
- - Rst7   ЦитатаRst7, респект и уважуха Да ладно. Я вот нас...   Nov 17 2009, 13:20
- - Rst7   ЦитатаТеперь и на Supervisor-е работает вложенный ...   Nov 17 2009, 13:51
|- - GetSmart   Цитата(Rst7 @ Nov 17 2009, 19:51) PS Если...   Nov 17 2009, 14:10
- - Rst7   ЦитатаМне было бы интересно узнать что-то новое. ...   Nov 17 2009, 14:17
|- - GetSmart   Цитата(Rst7 @ Nov 17 2009, 20:17) Тактичн...   Nov 17 2009, 14:51
- - GetSmart   Ну я вообще не очень дружу с аглицким, но выделенн...   Nov 17 2009, 16:31
|- - Dima_G   Цитата(GetSmart @ Nov 17 2009, 19:31) Ну ...   Nov 17 2009, 16:38
|- - GetSmart   Цитата(Dima_G @ Nov 17 2009, 22:38) А до ...   Nov 17 2009, 16:54
- - Rst7   ЦитатаА всего-то надо было пару инструкций в порте...   Nov 17 2009, 17:16
- - GetSmart   А вот из-за этой конструкции внутри portSAVE_CONTE...   Nov 17 2009, 18:09
- - GetSmart   Вобщем, теперь вложенные прерывания прекрасно рабо...   Nov 22 2009, 08:54


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

 


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


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