Co je spatne?

MK info@mcu.cz
Pátek Říjen 1 17:52:52 CEST 2004


> mam na procesoru ATmega8535 takovyto kod:
> 
> // A/D converter bit mask. Enables ADC, one conversion
> // at a time, frequency CLK/64 (~160kHz). Disable interrupts
> #define admask 0x86
> // ADIF bit mask
> #define adif   0x10
> // ADSC mask
> #define adsc   0x40
> 
>    uint16_t i, h, l;
>    uint8_t value, prevval;
> 
>    for (i=1; i<256; i++) {
>        // Start conversion, loop until it is done
>        ADCSRA = admask | adsc;
>        while (ADCSRA & adsc) ;
>        ADCSRA = ADCSRA | adif;
>        // Read value
>        l = ADCL;
>        h = ADCH;
>        value = ((h << 8) | l) >> 2;
> 
> /**/      char buffer[10];
> /**/      sprintf( buffer, "%x%x", ADMUX, (h<<8) | l);
> /**/      DisplayText( buffer);
> 
>        if (prevval!=value) return 0xFF;
>        prevval = value;
>    }
> 
> /*************************/
> 
> Kdyz je kod oznaceny /**/ tam, kde ted je, vse funguje spravne a pri 
> zmene napeti na vstupech AD prevodniku se meni displej. Kdyz ovsem tento 
> kod dam az za cyklus na pozici oznacenou /*************************/, 
> tak to porad zobrazuje 3FF bez ohledu na to, co je ne vstupu. Uz nad tim 
> badam druhy den a porda na nic nemuzu prijit. Nevite, v cem je chyba? 
> Prekladam to pomoci nejnovejsi verze WinAVR. Pokud enkdo vite o 
> disassembleru pro ATmega8535, budu moc rad - prohlednu si primo 
> prelozeny kod a treba budu moudrejsi.

Jsem uz dneska nejak pretazenej a proto asi kod vubec nechapu :-)))
Je to v main(), nebo je to fragment nejake funkce ???
Pokud to je v main-u, kam se vlastne chcete vracet  tim returnem ???
A s jakou hodnotou pri nesplnene podmince???

Jinak pokud to je funkce a promenna "h" je globalni, tak ji musite definovat jako volatile,
jinak Vam to prekladac mirne poupravi :-)))
A zaroven, pokud to je funkce, tak je to .... (nevim jak slusne to nazvat) napsane.
Koser by pak bylo vracet opravdu hodnotu a ne pouzivat globalni promennou

Neni nutny dissasembler, staci si jen nechat udelat preklad GCCckem do asm


S pozdravem

===============================
Milan Kostomlatsky
Belcicka 14 
14100 Praha 4 - Sporilov
Czech Republic
-------------------------------
GSM : +420 604 281 263
ICQ : 167 766 629
HTTP: http://www.mcu.cz
===============================




Další informace o konferenci Hw-list