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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Баг ядра LPC2368?
GetSmart
сообщение Nov 17 2009, 14:51
Сообщение #16


.
******

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



Цитата(Rst7 @ Nov 17 2009, 20:17) *
Тактичное приглашение к флуду? wink.gif

Для кого флуд, а для кого ценная информация smile.gif

Заметил ещё одну "странность" в коде прологов/эпилогов обычных функций, генеримом CW 1.7.9 с нулевой оптимизацией.
Код
       E1A0C00D   mov r12, sp
       E92DD800   stmfd sp!, {r11-r12, lr-pc}
       E24CB004   sub r11, r12, #0x00000004
...
       E24BD00C   sub sp, r11, #0x0000000C
       E89D6800   ldmfd sp, {r11, sp-lr}
       E12FFF1E   bx lr

Всё вроде нормально, но зачем в стеке сохраняется PC, кто-нибудь знает?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 17 2009, 16:24
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(GetSmart @ Nov 17 2009, 16:19) *
Внатуре smile.gif
Эти кретины сохраняют регистр не в стеке, а в свободной его области. И я потом на ней работаю и ненароком затираю biggrin.gif
Кто сообщит автору FreeRTOS, что у него косяк? smile.gif


Вообще то, эти кретины про это в ФАКе написали.
Ну дак ктож его читает

Цитата
See the description of the configKERNEL_INTERRUPT_PRIORITY and configMAX_SYSCALL_INTERRUPT_PRIORITY configuration parameters for additional information.

As downloaded most ports do not implement interrupt nesting - the exceptions being the Cortex M3 and PIC32 ports. In most cases the use of a fast real timer kernel removes the need for interrupts to nest.

Nesting interrupts introduces uncertainty into the stack usage requirements and complicates system behaviour analysis. Instead it is preferred that interrupt handlers do nothing but collect event data, post the data to a task, and clear the interrupt source. This permits the interrupt to exit very promptly by deferring any necessary computational processing of the event data to the task level - inside 'interrupt tasks'. The task level processing can be performed with interrupts enabled, negating the requirement for nesting.

This scheme has the added advantage of flexible event processing prioritisation. Task priorities are used instead of the prioritisation being dependent on the priority assigned to each interrupt source by the target processor. The prioritisation of interrupt handler tasks would normally be chosen to be higher than ordinary tasks within the same application - thereby allowing the interrupt handler to return directly into the peripheral handler task. The interrupt can interrupt a normal task, grab the data, then return to the interrupt handling task. When the interrupt handling task completes, the interrupted task (or whichever task is now the highest priority ready task) will automatically continue from the point at which it was interrupted. Processing of the interrupt routine itself and the interrupt handler task will be contiguous in time just as if all the processing had been performed in the interrupt itself, but using a much simpler mechanism.

In the case that a very fast interrupt response is required for a certain peripheral then the peripheral priority can normally be set to above that of the kernel itself. This means the processing of the peripheral will never be delayed by the action of the kernel.


http://www.freertos.org/index.html?http://...org/FAQISR.html
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 17 2009, 16:31
Сообщение #18


.
******

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



Ну я вообще не очень дружу с аглицким, но выделенным шрифтом не совсем тот баг обозначен (кажется). Там скорее всего про то, что таймер переключения тредов должен быть самым низкоприоритетным прерыванием (у меня 15). Что я сразу сделал и даже в какой-то ветке отписАлся.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Nov 17 2009, 16:38
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(GetSmart @ Nov 17 2009, 19:31) *
Ну я вообще не очень дружу с аглицким, но выделенным шрифтом не совсем тот баг обозначен (кажется). Там скорее всего про то, что таймер переключения тредов должен быть самым низкоприоритетным прерыванием (у меня 15). Что я сразу сделал и даже в какой-то ветке отписАлся.


Выделил я не баг, а их мнение:
"В большинстве случаев, использование быстрого реал-таймового ядра избавляет от необходимости использовать вложенные прерывания"

Примечание переводчика: оборот "в большинстве случаев", ИМХО, по аналогии с тестом ДНК - максимальная вероятность 99.99%. 0.01% оставляется на вероятность того, что ДНК двух человек - идентична biggrin.gif

А до выделенного написано: Исходный вариант FreeRTOS не реализует (читай - не работает) вложенные прерывания. Исключение - кортекс М3 и ПИК32
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 17 2009, 16:54
Сообщение #20


.
******

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



Цитата(Dima_G @ Nov 17 2009, 22:38) *
А до выделенного написано: Исходный вариант FreeRTOS не реализует (читай - не работает) вложенные прерывания. Исключение - кортекс М3 и ПИК32

А всего-то надо было пару инструкций в порте исправить. Причём по тактам - равноценно.

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Nov 17 2009, 17:16
Сообщение #21


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А всего-то надо было пару инструкций в порте исправить.


Я эту конструкцию довольно во многих местах наблюдал (в серьезных коммерческих осях, изучение которых мною происходило при помощи дизассемблера). С некоторыми вариациями имеется принципиальная зопа со вложенными прерываниями. Когда то давно один идиот написал, сотня повторила. Вот оно, повторное использование кода (а иначе как соблюсти принцип "продать побыстрее") и бездумное передирание (даже авторы осей не владеют темой, а ведь это - основа, на которой держится все здание).


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 17 2009, 18:09
Сообщение #22


.
******

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



А вот из-за этой конструкции внутри portSAVE_CONTEXT() нельзя работать во вложенных прерываниях на стеке System/User. Хотя это и не резонно.
Код
    /* 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"    \

Если нельзя будет работать на стеке SVC, то будет обидно. Но пока стабильно моя прога работает. Работая на SVC есть один минус - нельзя вызывать portYIELD(), то бишь влетать снова в SVC, но из прерывания это делать как-то нелогично даже. А работая в Undef-е или в Abort-е - можно.

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 22 2009, 08:54
Сообщение #23


.
******

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



Вобщем, теперь вложенные прерывания прекрасно работают на стеках IRQ и SVC и уж тем более на Undef и Abort. Единственное ограничение - из вложенных прерываний (как и из прерываний вообще) нельзя вызывать некоторые функции FreeRTOS, типа delay, yield (и возможно ещё других).


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

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

 


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


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