Hjälp med kod!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Excl
Inlägg: 6
Blev medlem: 10 november 2012, 14:15:15

Re: Hjälp med kod!

Inlägg av Excl »

nodanolo:

Jojo det förstår jag men vad för argument ska placeras där? Varje gång jag placerar något i read_convert() parentesen får jag bara ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).
Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hjälp med kod!

Inlägg av Icecap »

Argumentet väljer vilken analog kanal som ska användas.
unsigned int read_convert(unsigned char ch)
{
ADMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal

Du har skrivit
int main(void) - men du har ingen return(nånting) i slutet på main.

Deklarera hellre main som:
void main(void)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med kod!

Inlägg av sodjan »

> Jojo det förstår jag men vad för argument ska placeras där?

Har du ens kollat vad read_convert använder parametern till?
Du har ju svaret i ditt eget program:
> DMUX = (ADMUX & ~15) | ch;//Väljer ADCx kanal

> Varje gång jag placerar något i read_convert() parentesen får jag bara
> ett felmeddelande (spelar ingen roll vad jag placerar i parentesen).

Om du varken anger vad du har försökt med eller vilket fel du fick,
så behöver vi knappt veta alls att du har försökt... :-)

> Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?

Det beror på att main() i en mikrokontroller aldrig avslutas och då behöver
den inte ha någon datatyp. Prova med "void main()" istället.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Hjälp med kod!

Inlägg av snigelen »

Excl skrev:Samtidigt får jag även varningen 'main is normally a non-static function'. Vad beror detta på?
Det beror på att du inte avslutat föregående funktion read_convert (det saknas en avslutande }), så kompilatorn tror att det är main en lokal funktion i read_convert (man kan inte ha lokala funktioner i standard C, men gcc stödjer det).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med kod!

Inlägg av sodjan »

Hm, borde man inte få något om "unbalanced {}" eller liknande?
Eller är det syntaxtiskt OK att inte ha lika många { som } ?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Hjälp med kod!

Inlägg av snigelen »

Det kommer senare, sista felmeddelandet blir

Kod: Markera allt

main.c:57: error: expected declaration or statement at end of input
viket antyder att det t.ex fattas en '}' där. Den skulle egentligen vara tidigare, men eftersom man kan ha lokala funktioner i gcc så blir det fel först här.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med kod!

Inlägg av sodjan »

Jaha, men borde inte även Excl ha fått det felet !?
Det stog inte ett skit om det...
Nerre
Inlägg: 27223
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hjälp med kod!

Inlägg av Nerre »

Så som C fungerar är det inte alltid som kompilatorn kan avgöra om man har glömt att avsluta något på rätt sätt eller om man har råka inleda något annat på fel sätt.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: Hjälp med kod!

Inlägg av stekern »

Jo han borde ha fått det felet (och fick det förmodligen), det andra är ju dessutom "bara" en varning som med default inställningar inte ens syns.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hjälp med kod!

Inlägg av sodjan »

Med "expected declaration or statement" får man väl inte ens någon objekt fil (?).
Vilket inte heller påstogs, men i alla fall... :-)
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Hjälp med kod!

Inlägg av snigelen »

Excl skrev bara första felet, sedan första varningen i ett senare inlägg. Om jag tar sista programmet på förra sidan, i detta inlägg, och försöker kompilera får jag följande

Kod: Markera allt

$ avr-gcc -c -Os -Wall -mmcu=atmega328p test.c
test.c: In function ‘read_convert’:
test.c:41: warning: ‘main’ is normally a non-static function
test.c: In function ‘main’:
test.c:47: error: too few arguments to function ‘read_convert’
test.c: In function ‘read_convert’:
test.c:60: error: expected declaration or statement at end of input
så någon objektfil har inte genererats.

Om jag lägger till en avslutande } i read_convert och byter ut main till detta

Kod: Markera allt

int main(void)
{
    init_ADC();
    init_PWM();
    DDRB|=(1<<PB5);// Pin PB5(OCR1A) är output
    DDRB|=(1<<PB6);//Pin PB6(OCR1B) är output
       
    while(1)
    {
        // read_ADC() returns a left adjusted result (or?...)
        // use >> 8 to get upper eight bits (or >>6 to get upper 10)
        OCR1A=read_convert(4) >> 8;//converterad värde läses på pin PB5      
        OCR1B=read_convert(5) >> 8;//converterad värde läses på pinPB6
    }
}
blir det inga fel eller varningar.

Trots att denna rad i read_convert inte gör någonting

Kod: Markera allt

      ADMUX | (1<<ADLAR);//Vänsterjustering av ADC resultet
Det är en tom sats, men kompilatorn måste nog generera en läsning av ADMUX eftersom den är volatile. Det skall troligen stå

Kod: Markera allt

      ADMUX |= (1<<ADLAR);//Vänsterjustering av ADC resultet
i stället. (Om man nu vill ha vänsterjusterat resultat) (men det kan man lika gärna flytta till init_ADC() i så fall).
Skriv svar