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

 
 
> Уменьшение минимального кол-ва стека, TNKernel :-)
DASM
сообщение Mar 29 2007, 06:18
Сообщение #1


Гуру
******

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



Боюсь уже автора задолбать, поэтому спрашиваю у всех.
Есть такая штука.. tn_switch_context
Там такой код
Код
tn_sw_restore
        ldmfd  sp!, {r0}
        ldmfd  sp!, {r1}
        msr    CPSR_cxsf, r1; с этой точки прерывания разрешены ! Комментарий мой
        msr    SPSR_cxsf, r0

        mrs    r4, CPSR
        bic    r4, r4, #NOINT
        msr    CPSR_c, r4

        ldmfd  sp!, {r0-r12,lr,pc}

То есть стек задачи еще не развернут, прерывания разрешены. Наступление прерывания, требующего переключения контекста в нем затребует у этой задачи еще 15*4=60 байт стека. (вернее надо будет 68 байт, но 8 мы уже отыграли назад) Вот дальше у меня сомнения - сколько раз такое может произойти...
В реалии раза 3-4 я точно наблюдаю - хорошо видно по использованию стека. Как уменьшить тоже понятно - перенести восстановление CPSR после развертывания большей части стека через ldmfd sp!, {r0-r12,lr,pc}.
Но вот по идее то все равно, сколько раз такое может произойти - вобщем-то определить невозможно, а значит и минимальный требуемый стек для потока должен стремиться к бесконечности ?
Замена вышепреведенного кода на вот такой (жутко наивный, но все же)
Код
     ldmfd  sp!, {r0}        
        ldr r1, =t_spsr
        str r0, [r1]
        ldmfd  sp!, {r0}
        ldr r1, =t_cpsr
        str r0, [r1]

        ldmfd  sp!, {r0-r12,lr}
        push {r1}
        ldr r1, =t_spsr
        ldr r1,[r1]
        msr    SPSR_cxsf, r1
        ldr r1, =t_cpsr
        ldr r1,[r1]
        msr    CPSR_cxsf, r1
        pop {r1}    
        ldmfd  sp!, {pc}

уменьшила требуемый стек очень прилично.
Вопрос возник не праздно, прокачивю через USB большой поток.. и в результате например банальная tn_idle_task благополучно через перваливала за 96 слов требуемого стека, при том что по умолчанию он 48. Но все равно как я понимаю не застрахован и в этом случае. Какие будут соображения ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yuri_t
сообщение Mar 31 2007, 09:30
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



По материалам дискуссии буду делать v.2.4. Туда же войдет исправление
бага в ф-ции tn_task_exit(), который нашел Alex_B.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 3 2007, 09:45
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(yuri_t @ Mar 31 2007, 09:30) *
По материалам дискуссии буду делать v.2.4. Туда же войдет исправление
бага в ф-ции tn_task_exit(), который нашел Alex_B.

А поддержка вложенности прерываний туда войдёт как вариант?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 3 2007, 10:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(IgorKossak @ Apr 3 2007, 08:45) *
А поддержка вложенности прерываний туда войдёт как вариант?

Я бы не стал - вложенные в приличной системе это уже в большей части отрыжка бессистемного писания. Практически при наличии у ARMов FIQ и использовании приличной операционной системы об использовании вложенных прерываний нужно ОЧЕНЬ крепко думать, прежде чем использовать. Если кому надо - пусть сам делает и заодно подумает а оно это надо такие навороты делать и цену которую платит за вложенность осознает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
spf
сообщение Apr 4 2007, 07:03
Сообщение #5


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(zltigo @ Apr 3 2007, 13:11) *
Я бы не стал - вложенные в приличной системе это уже в большей части отрыжка бессистемного писания.

Приличная -- с многократным запасом производительности?
А как же золотая середина ? wink.gif
Случаи бывают разные - http://electronix.ru/forum/index.php?showtopic=29678


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 4 2007, 09:22
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(spf @ Apr 4 2007, 06:03) *
Приличная -- с многократным запасом производительности?

"Запас по производительности" это даже не совсем характеристика системы.
В данном случае это система с малыми затратами на переключение задач.
По ссылке собственно случай и не описан. Только "хочу" что-бы каждое из восьми прерываний немедленно прерывало предыдущее. Вот такой "случай" и точка.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DASM   Уменьшение минимального кол-ва стека   Mar 29 2007, 06:18
- - yuri_t   Подумаю, поэксперементирую и обязательно отвечу. Е...   Mar 29 2007, 12:11
- - yuri_t   Отвечаю по-порядку... ЦитатаНо вот по идее то все...   Mar 30 2007, 20:07
- - Alex B._   >> После создания tn_idle_task стек занимает...   Mar 30 2007, 22:43
- - yuri_t   В авторском варианте TNKernel вложенные прерывания...   Mar 30 2007, 23:34
|- - spf   Цитата(yuri_t @ Mar 31 2007, 02:34) В авт...   Mar 31 2007, 05:22
|- - DASM   Цитата(spf @ Mar 31 2007, 06:22) Существе...   Mar 31 2007, 07:43
|- - spf   Цитата(DASM @ Mar 31 2007, 10:43) да это ...   Mar 31 2007, 08:41
|- - DASM   Цитата(spf @ Mar 31 2007, 09:41) Это поня...   Mar 31 2007, 09:18
- - DASM   msr CPSR_c, r0 /* точка разрешения прерываний ...   Mar 30 2007, 23:41
- - Alex B._   >> В авторском варианте TNKernel вложенные п...   Mar 31 2007, 00:06
- - DASM   А я допишу пока для ясности.. "A когда задача...   Mar 31 2007, 00:08
|- - Сергей Борщ   Цитата(DASM @ Mar 30 2007, 23:08) Но пока...   Mar 31 2007, 01:05
|- - DASM   Цитата(Сергей Борщ @ Mar 31 2007, 02:05) ...   Mar 31 2007, 01:14
- - Alex B._   >> Существенное ограничение. Это затрудняет ...   Mar 31 2007, 09:55
|- - spf   Цитата(Alex B._ @ Mar 31 2007, 12:55) не ...   Mar 31 2007, 11:28
- - Alex B._   >> Противоречишь сам себе. Если бы было без ...   Mar 31 2007, 11:48
|- - spf   Цитата(Alex B._ @ Mar 31 2007, 14:48) Про...   Mar 31 2007, 12:26
- - DASM   Господа, а не пойти ли вам в другую ветку ? Я серь...   Mar 31 2007, 16:32
|- - zltigo   Цитата(DASM @ Mar 31 2007, 15:32) Бегло о...   Mar 31 2007, 21:30
- - yuri_t   Дело в том, что ситуация, когда OS не может полнос...   Mar 31 2007, 19:02
|- - zltigo   Цитата(yuri_t @ Mar 31 2007, 18:02) Дело ...   Mar 31 2007, 19:30
- - yuri_t   ЦитатаПосмотрел - нет. Там везде такое: LDMFD S...   Mar 31 2007, 22:32
- - IgorKossak   zltigo, ну если цена высока, то может и не надо. С...   Apr 3 2007, 15:16
|- - zltigo   Цитата(IgorKossak @ Apr 3 2007, 14:16) С ...   Apr 3 2007, 19:20
- - prottoss   Привет всем! Начал разбираться с TNKernel. Поч...   Mar 25 2008, 14:14
|- - prottoss   Цитата(prottoss @ Mar 25 2008, 21:14) ра...   Mar 25 2008, 18:23
- - prottoss   Вобщем "неправильное" использование поле...   Mar 26 2008, 15:30
- - VslavX   Цитата(prottoss @ Mar 26 2008, 17:30) Пре...   Mar 15 2010, 15:46


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 05:30
Рейтинг@Mail.ru


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