čo sa vo svete je to s týmto kódom C??

D

david90

Guest
Kód:

# Include <avr/io.h>void delay (void);

int a, b;void main (void)

(

TCCR0 = 0x03;

DDRB = 0xff;

DDRD = 0x3;

= 0x3;

b = 0x1;switch ()

(

case 0: = 0x40;

break;

case 1: = 0x79;

break;

case 2: = 0x24;

break;

case 3: = 0x30;

break;

case 4: = 0x19;

break;

case 5: = 0x12;

break;

case 6: = 0x2;

break;

case 7: = 0x78;

break;

case 8: = 0;

break;

case 9: = 0x10;

break;

)

switch (b)

(

case 0: b = 0x40;

break;

case 1: b = 0x79;

break;

case 2: b = 0x24;

break;

case 3: b = 0x30;

break;

case 4: b = 0x19;

break;

case 5: b = 0x12;

break;

case 6: b = 0x2;

break;

case 7: b = 0x78;

break;

case 8: b = 0;

break;

case 9: b = 0x10;

break;

)while (1)

(

Portbou =;

PORTD = 0x1;

delay ();Portbou = b;

PORTD = 0x2;

delay ();

))void delay (void) / / Vytvoriť oneskorenie 65 ms pri 4 MHz

(

TCNT0 = 0x7F;

while (! (TIFR & 0x02));

/ / Čakať na pretečeniu timer0 vlajky, ktoré majú byť stanovené

TIFR = 0x02, / / Clear pretečeniu flag

)
 
Salam,

Návrhy, aby sa váš kód vyzerá lepšie.

1 - Pomocou funkcie nazvaná tj ConvertTo7Seg () namiesto písania prepínač funkcií 2 krát!

2 - Nepoužívajte a b vars ako globálny var, namiesto toho používajú sa ako miestny vars a používať ukazovateľ var nazývať je

tj zavolať funkciuKód:

x = ConvertTo7Seg (&)
 
OK.

Ale aj tak, prečo je zvyknutý execute "switch ()"???Je len na skok "switch (b)."

Môj program je efektívny, ale nie je tam žiadny dôvod, prečo by sa nemala vykonávať "switch (a)".

prečo je lepšie používať ukazovadlo?
Kód:

# Include <avr/io.h>

int a, b, ABB;void main ()

(ABB = 3;

b = 1;switch (b)

(

case 0: = 0x40;

break;

case 1: = 0x79;

break;

case 2: = 0x24;

break;

case 3: = 0x30;

break;

case 4: = 0x19;

break;

case 5: = 0x12;

break;

case 6: = 0x2;

break;

case 7: = 0x78;

break;

case 8: = 0;

break;

case 9: = 0x10;

break;)

)

 
Možno, že to pomôže:

Kód:# Include <avr/io.h>

void delay (void);const char segment_table [10] =

(

0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10;

)int a, b;void main (void)

(

TCCR0 = 0x03;

DDRB = 0xff;

DDRD = 0x3;

= 0x3;

b = 0x1;for (;;)

(

Portbou = segment_table [];

PORTD = 0x1;

delay ();

Portbou = segment_table ;

PORTD = 0x2;

delay ();

)

)void delay (void) / / Vytvoriť oneskorenie 65 ms pri 4 MHz

(

TCNT0 = 0x7F;

while (! (TIFR & 0x02)); / / Čakať na pretečeniu timer0 vlajky, ktoré majú byť stanovené

TIFR = 0x02, / / Clear pretečeniu flag

)

 
vďaka, ale ja nehľadám optimalizovaný kód.Hľadal som odpoveď na otázku, prečo môj kód s switch nefunguje.Aj keď je zlý kód Chcem vedieť, prečo to nie je 't work.

Snažil som sa ur kód, ale

avr-gcc-c-mmcu = AT90S2313-I.-g-Os-funsigned-char-funsigned-bitfields-fpack-struct-fshort-enums-Wall-Wstrict-prototypy-Wa,-adhlns = test.exe.program.lst-std = gnu99 test.exe.program.c -o test.exe.program.o
test.exe.program.c: 6: error: parse error before ',' token
test.exe.program.c: 12: warning: return typ 'hlavný' nie je `int '
test.exe.program.c: In function `main ':
test.exe.program.c: 16: error: `a 'undeclared (prvé použitie tejto funkcie)
test.exe.program.c: 16: error: (načierno Každý identifikátor je hlásený iba raz
test.exe.program.c: 16: error: pre každú funkciu sa zdá palcov)
test.exe.program.c: 17: error: `b 'undeclared (prvé použitie tejto funkcie)
test.exe.program.c: 34:40: warning: žiadny nový riadok na koniec súboru
test.exe.program.c: In function `meškania ':
test.exe.program.c: 34: error: parse error na konci vstupného
make.exe: *** [test.exe.program.o] Error 1

 
Čo myslíš tým "dodáva a b dohromady"?

Ak program pracuje (vám požadovaný výkon), potom sa nemusíte starať o výkone správaní, ktorú vidíte vo svojom simulátore.Váš kompilátor má mať optimalizované preč tie, switch, pretože sú zbytočné, pretože ste inicializuje a b s konštánt.Inteligentné optimalizácie kompilátora, môže mať tiež odstránené a b, a jednoducho písomné konštanty do Portbou.

Ak to nie je problém ....Nemám váš kompilátor, takže nemôžem zostaviť váš program (chýba avr / io.h).Možno, že keby nám ukázať, čo je v hlavičke, že by viac ľudí pomoct.Predovšetkým to, ako je definovaný Portbou?

C-Man je kód nemístnou bodkočiarka:
Kód:

const char segment_table [10] =

(

0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x2, 0x78, 0, 0x10

);
 

Welcome to EDABoard.com

Sponsor

Back
Top