Как лучше реализовать такую вещь
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено MPL 03 февраля 2003 г. 13:47

Общий вид программы (Кейл) можно представить в виде (хотя это слишком упрощенно):

void main(void)

{
unsigned char mode; // переменная отвечает за режим


mode = 0;

while (1)
{
func1(); // постоянно исполняемая подпограмма
func2(); // постоянно исполняемая подпограмма
if (mode == 0)
func_mode0();
else if (mode == 1)
func_mode1();
}

}

int Par1; // переменная func_mode0

void func_mode0(void)

{
Par1++;
}


int Par2; // переменная func_mode1
int Par3; // переменная func_mode3

void func_mode1(void)

{
Par2++;
Par3++;
}

Теперь опишу что нужно.
Программа может находиться в каком-либо режиме.
Каждому режиму соответствует своя подпрограмма (func_mode0/func_mode1).
У каждой подпрограммы (режима) есть свои переменные (Par1/Par2/Par3),
они объявляются глобальными, так как мы постоянно выходим из подпрограммы соответствующему режиму, чтобы выполнить постоянно исполняемые подпрограммы (func1, func2) и при этом не хотим терять текущий контекст.
Но при переходе к другому режиму (другой подпрограмме func_mode0/func_mode1)
переменные другого модуля уже в принципе не нужны, а так как они объявлены глобальными, то никуда от них деться.
Как сделать перекрытие переменных соответствующих различным режимам, чтобы они занимали поменьше памяти. Конечно, можно использовать malloc, freeloc итп...
В действительности режимов может быть много. RTOS использовать не предполагается.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru