[an error occurred while processing this directive]
|
на асм перед тем, как вызвать свою delay() и прыгать чёртекуда Вы освобождаете регистровый файл от промежуточных и локальных переменных, не так ли?
+++ нет, не так ;-)
// *******************************************************************
// return control to RTOS
// *******************************************************************
#pragma inline_asm(goto_RTOS)
static void goto_RTOS(void)
{
jmp @L_Back_to_RTOS ; // goto fixed global address
}// *******************************************************************
// get current SP value
// *******************************************************************
#pragma inline_asm(fetch_SP)
static unsigned long fetch_SP(void)
{
mov.l ER7,ER0 ; // copy SP to ER0, eg to return value
}
// *******************************************************************
// procedure to return to kernel
// *******************************************************************
void delay(int t)
{
Descriptor[Current_Task].Tick_Counter=t; // store new tick counter value
Descriptor[Current_Task].SP=fetch_SP(); // store current SP value in the table
goto_RTOS();
}
Т.е. фактически сохраняете контекст (пусть не в стеке, суть дела не меняется).
В Си же, такого механизма нет. Значит необходимо использовать сохранение
контекста в стеке - а это неизбежный асм модуль. И чего мозги пудрить?
+++ нет, не так ;-)
C already did it for me. When I entering delay(t) function all context is already stored in stack
В случае вытесняющей многозадачности, когда переключение задач может происходить
по инициативе ядра, требуется сохранять полный контекст - все регистры и статус.
В случае же кооперативной, когда переключение происходит ТОЛЬКО по инициативе
задачи, можно не сохранять статус и рабочие регистры (см. доку на компилер).
+++ сохранять only SP
Я не знаю как там сделано в Salvo, пусть знающие расскажут (любопытно, кстати взглянуть, может кто поделится исходниками?)
Предпочитаю Finite State Machine. Дёшево и сердито.
+++ Дешевка :-)))
E-mail: info@telesys.ru