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

 
 
> scmRTOS (v3) blackfin, переключение контекста + IMASK
yes
сообщение Feb 26 2008, 21:55
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



вообще, кто-нибудь пользует этот порт?

в переключалке задач

.....
[--sp] = lb1;

//--------------------------------------------------------------------------
//
// Switch stack pointers and manage interrupt enable status
//
p5.l = lo(IMASK); // save IMASK value
p5.h = hi(IMASK); // (global interrupts enable state)
r7 = [p5]; //
[--sp] = r7; //
r0 = sp;

call _OS_ContextSwitchHook;

......

на верхушку стека кладется содержимое IMASK и вызывается С-шная функция

TStackItem* OS_ContextSwitchHook(TStackItem* sp) { return OS::Kernel.ContextSwitchHook(sp); }

// "..\..\scmRTOS\Common\OS_Kernel.cpp" line 87 col 50
link 12;

._P2L2147483646:
[FP+ 8] = R0;
.LN12:
// "..\..\scmRTOS\Common\OS_Kernel.cpp" line 87 col 87
R1 = R0 ;
R0.L = _Kernel__2OS; R0.H = _Kernel__2OS;
CALL.X _ContextSwitchHook__Q2_2OS7TKernelFPUl;

.........

при этом link 12 и [FP+8] затирают значение IMASK на стеке

стек в блэкфине предекрементный, ну и вообще вроде бы соответствует соглашениям о вызовах (стр 1-255 40_ccblkfin_man.pdf) - там должно быть место для сохранения аргументов

--------------------------------

я вставил декремент стека

[--sp] = sp; //dummy stack decrement to prevent IMASK overwrite
call _OS_ContextSwitchHook;

после чего мои примерчики заработали

==============================

но не совсем понятно использование разных масок (то есть может эта сохранненная маска потом не нужна и я просто глючу) ?
но без этого исправления вообще нифига не работало...

------------------------------------------------------

собственно, кто-нибудь пользуется scmRTOS для blackfin-а?

==============================

у меня был некий проектик (BF532 без внешней памяти), на котором использовалась scmRTOS v2
в результате разгильдяйства были частично утеряны исходники - при переделывании взял версию 3, но не выходит каменный цветок...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Feb 27 2008, 19:42
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(yes @ Feb 27 2008, 03:55) *
вообще, кто-нибудь пользует этот порт?


Я использую. С самого начала. smile.gif

Цитата(yes @ Feb 27 2008, 03:55) *
в переключалке задач

.....

TStackItem* OS_ContextSwitchHook(TStackItem* sp) { return OS::Kernel.ContextSwitchHook(sp); }

// "..\..\scmRTOS\Common\OS_Kernel.cpp" line 87 col 50
link 12;

._P2L2147483646:
[FP+ 8] = R0;
.LN12:
// "..\..\scmRTOS\Common\OS_Kernel.cpp" line 87 col 87
R1 = R0 ;
R0.L = _Kernel__2OS; R0.H = _Kernel__2OS;
CALL.X _ContextSwitchHook__Q2_2OS7TKernelFPUl;

.........

при этом link 12 и [FP+8] затирают значение IMASK на стеке

стек в блэкфине предекрементный, ну и вообще вроде бы соответствует соглашениям о вызовах (стр 1-255 40_ccblkfin_man.pdf) - там должно быть место для сохранения аргументов


Вообще, функция OS_ContextSwitchHook является не более, чем оберткой для функции OS::TKernel::ContextSwitchHook и последняя объявлена как встраиваемая, т.е. ее тело подставляется в внутрь OS_ContextSwitchHook. В норме она и должна встраиваться и я не сталкивался с ситуацией, когда этого бы не происходило. Более того, это обстоятельство является таковым по замыслу - не нужен совершенно еще один лишний вызов и весь связанный с этим оверхед.

Очевидно, у вас какие-то другие опции оптимизации, что не происходит встраивания инлайновой функции. У меня оптимизация чаще всего -Ov 80 (но и при -Ov 20 поведение аналогичное - все встраивается).


Цитата(yes @ Feb 27 2008, 03:55) *
--------------------------------

я вставил декремент стека

[--sp] = sp; //dummy stack decrement to prevent IMASK overwrite
call _OS_ContextSwitchHook;

после чего мои примерчики заработали


Наверное, более правильно было бы

SP += -12;

В любом случае спасибо за правильное и ценное замечание.


Цитата(yes @ Feb 27 2008, 03:55) *
но не совсем понятно использование разных масок (то есть может эта сохранненная маска потом не нужна и я просто глючу) ?
но без этого исправления вообще нифига не работало...


Вы про IMASK, который сохраняется в стеке? Если про него, то тут все просто - с помощью этого запоминается состояние прерываний для каждого процесса.


Цитата(yes @ Feb 27 2008, 03:55) *
у меня был некий проектик (BF532 без внешней памяти), на котором использовалась scmRTOS v2
в результате разгильдяйства были частично утеряны исходники - при переделывании взял версию 3, но не выходит каменный цветок...


v2 тоже не пропала - до нее можно добраться через сайт проекта, там где-то есть ссылка на Old, по которой лежит целиком весь старый (v2) сайт.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yes   scmRTOS (v3) blackfin   Feb 26 2008, 21:55
|- - yes   Спасибо. при включенной оптимизации (скорее всего...   Mar 3 2008, 19:37
|- - dxp   Цитата(yes @ Mar 4 2008, 01:37) а с испол...   Mar 4 2008, 06:33
|- - bmf   Цитата(yes @ Mar 3 2008, 22:37) .. а с ис...   Mar 4 2008, 08:40
|- - yes   Цитата(bmf @ Mar 4 2008, 11:40) Используе...   Mar 4 2008, 16:14
|- - Сергей Борщ   Цитата(yes @ Mar 4 2008, 18:14) как прави...   Mar 4 2008, 17:46
|- - dxp   Цитата(yes @ Mar 4 2008, 22:14) есть вопр...   Mar 5 2008, 06:18
|- - yes   спасибо еще раз за детальный ответ : по поводу пр...   Mar 5 2008, 14:35
|- - dxp   Цитата(yes @ Mar 5 2008, 20:35) теоретиче...   Mar 6 2008, 15:36
|- - yes   Цитата(dxp @ Mar 6 2008, 18:36) Каналы жи...   Mar 6 2008, 17:33
|- - yes   Обнаружил конкретную проблему: для передачи управ...   Mar 7 2008, 11:51
|- - dxp   Цитата(yes @ Mar 7 2008, 17:51) EX_INTERR...   Mar 7 2008, 12:22
|- - yes   Цитата(dxp @ Mar 7 2008, 15:22) Я понял, ...   Mar 7 2008, 13:20
|- - Сергей Борщ   Цитата(yes @ Mar 7 2008, 15:20) сяду сейч...   Mar 7 2008, 13:28
|- - dxp   Цитата(Сергей Борщ @ Mar 7 2008, 19:28) А...   Mar 7 2008, 13:50
|- - yes   Цитата(Сергей Борщ @ Mar 7 2008, 16:28) А...   Mar 7 2008, 13:57
||- - Сергей Борщ   Цитата(yes @ Mar 7 2008, 15:57) А обсужде...   Mar 7 2008, 14:03
||- - dxp   Цитата(Сергей Борщ @ Mar 7 2008, 20:03) Е...   Mar 7 2008, 14:28
|- - yes   Цитата(Сергей Борщ @ Mar 7 2008, 16:28) А...   Mar 7 2008, 14:34
|- - dxp   Цитата(yes @ Mar 7 2008, 20:34) если есть...   Mar 9 2008, 06:44
- - dxp   Проблема, с которой началась ветка, пофиксена. Взя...   Mar 9 2008, 13:50
- - yes   Цитата(dxp @ Mar 9 2008, 16:50) Проблема,...   Mar 9 2008, 20:44
- - dxp   Цитата(yes @ Mar 10 2008, 02:44) если ест...   Mar 10 2008, 13:08


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

 


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


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