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

 
 
> 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
сообщение Mar 3 2008, 19:37
Сообщение #3


Гуру
******

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



Спасибо.

при включенной оптимизации (скорее всего interprocedural или как там она называется) не сохраняет аргументы в стек
но хочется и подебажить smile.gif

судя по примерам, включена еще "элиминация" в смысле выбрасывание неиспользуемых меток - в скрипте линкера если не объявлять и элиминация выключена - требует эти метки для линковки libc
ldf_heap_length
ldf_heap_space
даже при условии, что кучей не пользоваться...

==========

пропажа v2 - пропали мои исходники - у Вас все в порядке smile.gif
но если переписывать, то лучше на v3

в работе RTOS никаких непонятностей не заметил.

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

а с использованием Scratch памяти в качестве стека задач, какие-нибудь проблемы возможны?
по DMA доступ не нужен, байтовый доступ ... можно сделать чтобы не было
а я почему-то не встречал использования Scratch
ни в каких примерах ldf, а тут проект без внешней памяти - каждый килобайт на счету ...

вот описание аномалии:
Reads from the scratchpad memory may return incorrect data under some conditions. The problem occurs when reads of scratchpad
memory are immediately followed by another read (of any location, including non-scratchpad locations), where the addresses being
accessed do not have the same least significant address bit. This means that one of the transfers has to be a byte access. The other access
has to be either a byte, 16-bit or 32-bit access on a different byte boundary than the first access. In addition, the instruction immediately
before the Scratchpad memory read has to generate a memory stall due to either a dual DAG bank collision, a non-L1 memory data fetch,
or a cache-line fill.
If an instruction does not perform a read immediately after the scratchpad read, no problems occur. Also, back to back non-byte reads
function properly.
WORKAROUND:
The simplest workaround for assembly programmers is to place any non-read instruction after each scratchpad read. For C programmers,
one solution is not to map any data to the scratchpad.
Alternatively the VisualDSP++ Blackfin compiler includes a workaround for this hardware anomaly. The compiler will automatically enable
the workaround for the appropriate silicon revisions and part numbers, or the workaround can be enabled manually by specifying the
compiler flag -workaround scratchpad-read' With the workaround enabled, when a sequence of three load instructions occurs (or occur
as parts of a multi-issue instruction), where at least one of (2) and (3) is a byte load, a nop will be inserted between (1) and (2) or (2) and (3):
A load instruction (1);
A load instruction (2);
A load instruction (3);
Go to the top of the page
 
+Quote Post
bmf
сообщение Mar 4 2008, 08:40
Сообщение #4


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

Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831



Цитата(yes @ Mar 3 2008, 22:37) *
..
а с использованием Scratch памяти в качестве стека задач, какие-нибудь проблемы возможны?
по DMA доступ не нужен, байтовый доступ ... можно сделать чтобы не было
а я почему-то не встречал использования Scratch
ни в каких примерах ldf, а тут проект без внешней памяти - каждый килобайт на счету ...

Используется, посмотрите исходники ROM загрузчиков от analog.
Еще используется для сохранения стека при прерываниях - порт bfin для RTEMS (cpu_asm.S).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- yes   scmRTOS (v3) blackfin   Feb 26 2008, 21:55
|- - dxp   Цитата(yes @ Mar 4 2008, 01:37) а с испол...   Mar 4 2008, 06:33
|- - 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 Текстовая версия Сейчас: 21st July 2025 - 17:17
Рейтинг@Mail.ru


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