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

 
 
> Уменьшение минимального кол-ва стека, 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
Ответов
prottoss
сообщение Mar 25 2008, 14:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Привет всем! Начал разбираться с TNKernel. Почитав форум и погуглиФ, решил, что ОСь вполне подходит. Скомпилил пример, потом пренес один проект. Все прекрасно работает. Проект живет без зависонов почти неделю. И тут черт меня дернул перенести два поля в структуре typedef struct _TN_TCB... конкретно поля

Код
unsigned int * stk_start;          //-- Base address of task's stack space
   int   stk_size;           //-- Task's stack size (in sizeof(void*),not bytes)


из родного места под поле

Код
unsigned int * task_stk;  //-- Pointer to task's top of stack
.

И Фсе.... Система рухнула...Думал, только на моем проекте. Попробовал сделать тоже в примерах - то же самое. Толком я еще проблему не анализировал но программа улетает в неизвестном, пока, мне направлении после завершения кода tn_start_exe: в файле tn_port_asm.s79.

Камень AT91SAM7X256.



Кто нибудь может прокомментировать проблему.


--------------------
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
- - yuri_t   По материалам дискуссии буду делать v.2.4. Туда же...   Mar 31 2007, 09:30
|- - IgorKossak   Цитата(yuri_t @ Mar 31 2007, 09:30) По ма...   Apr 3 2007, 09:45
|- - zltigo   Цитата(IgorKossak @ Apr 3 2007, 08:45) А ...   Apr 3 2007, 10:11
|- - spf   Цитата(zltigo @ Apr 3 2007, 13:11) Я бы н...   Apr 4 2007, 07:03
|- - zltigo   Цитата(spf @ Apr 4 2007, 06:03) Приличная...   Apr 4 2007, 09:22
- - 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   Цитата(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 Текстовая версия Сейчас: 4th August 2025 - 06:48
Рейтинг@Mail.ru


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