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

вообще, кто-нибудь пользует этот порт?
Я использую. С самого начала.

Цитата(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) сайт.
«Отыщи всему начало, и ты многое поймёшь» К. Прутков