Добрый день

Написал макрос, но оператор CASE не хочет работать. Я его упростил, но не помогло. В результате работы переменная I1 должна принять значение 5, но она почему-то 0.


int MacroEntry()
{
static unsigned short I1 = 0;
unsigned short I2 = 0;
unsigned short K;
unsigned short N1 = 1;
unsigned short _P1[3] = {1,2,76};
float _P2[3] = {3.1, 10.6, 70.4};
unsigned int _P10[3][8] = {
{82, 101, 99, 105, 112, 101, 32, 49},
{82, 101, 99, 105, 112, 101, 32, 50},
{82, 101, 99, 105, 112, 101, 32, 51}
};
bool Up_c;
bool Down_c;

J = J + 1;
N = N1;
_I1 = I1;

Up_c = Up;
Down_c = Down;

switch (I1){

case 0:
//if (Up_c == true) {I1 = 10;}
I1 = 5;
break;

case 5:
;
break;

case 10:
if (N1 >= 3) {N1 = 1;} else {N1 = N1 + 1;}
I1 = 20;

case 20:
if (Up_c == false) {I1 = 0;}
}

for (K = 0; K < 8; K++) {P10[K] = _P10[N1-1][K];}
for (K = 0; K < 2; K++) {P1[K] = _P1[K];}
for (K = 0; K < 2; K++) {P2[K] = _P2[K];}


return 0;
}


Убрал из макроса все лишнее и оператор CASE начал работать верно.

int MacroEntry()
{
static unsigned short I1 = 0;


switch (I1){

case 0:

I1 = 5;
break;

case 5:
;
break;

case 10:
if (N1 >= 3) {N1 = 1;} else {N1 = N1 + 1;}
I1 = 20;

case 20:
if (Up_c == false) {I1 = 0;}
}

return 0;
}

В чем может быть причина ?