|
Общий вид программы (Кейл) можно представить в виде (хотя это слишком упрощенно):
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