Програма на C

+1 глас
349 прегледа
попитан 2018 юни 12 от Nas_ff (130 точки)
Здравейте,

Имам за задача да съставя State machine на C (switch - case структура), която следи текущ и изминал режим на работа.

Пример:

switch(opStateMode)
case 'A':
    /* ...... */
    break;
case 'B':
    /* ...... */
    break;    
case 'C':
    /* ...... */
    break;

Въпросът ми е как да определя и запомня последния "case", който е бил активен преди последващата негова промяна  ?

Или по точно казано променлива  oldopStateModе трябва да съхранява старият case, а opStateMode текущият.

Благодаря предварително за отделеното време !

1 отговор

+1 глас
отговорени 2018 юни 25 от Павката (3,410 точки)
Ако примерно избереш да дефинираш типа на стейта по следния начин:
typedef enum state_mode_e {

  EStateUndefined = 0,

EStateA, EStateB, ..., EStateN, EStateMax

} state_mode_t;

  В самата функция, която ще клати стейт машината можеш да дефинираш следната стекова променлива:
state_mode_t oldopStateModе = EStateUndefined;

после (вероятно в самия switch блок) всеки път, когато променяш стейта, т.е. всеки път преди да напишеш "opStateMode = ..."
добавяй като предишен ред
oldopStateModе = opStateMode;

ако смяташ да извикваш други функции във всеки от 'case'-овете подавай като параметър opStateMode като преди това можеш да извикваш въпросния ред за присвояване или направо можеш да ги подаваш и двете променливи (oldopStateModе и opStateMode) по указател, за да можеш да ги променяш от извиканата функция.
...