[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено AK 27 сентября 2002 г. 10:27
В ответ на: Только Вы, AK, кое о чём умалчиваете(+) отправлено AlexD 27 сентября 2002 г. 10:09

на асм перед тем, как вызвать свою 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