Funktionsanrop i Arduino....

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av mri »

Whatever.

Den ursprungliga koden hade 3 fel:

1. Saknade funktionsprototyp för lcdPrint(), s.k. forward declaration.
2. Anropet lcdPrint(0, 0, 0) har en parameter för lite. Måste explicit ha 4 parametrar eftersom endast parameter 5 ("cls") har ett default värde.
3. Default värde skall endast anges på ett ställe, och i detta fall i funktionsprototypen.

De väsentliga ställena skall se ut såhär:

// Prototyp
void lcdPrint(int lcdRows, int lcdColums, int lcdText, float lcdTemp, boolean cls = false);
...

void startUp()
{
lcdPrint(0, 0, 0, 0); // Minst 4 parametrar
...
}

// Inget default värde anges här:
void lcdPrint(int lcdRows, int lcdColums, int lcdText, float lcdTemp, boolean cls)
{
...
}


Och detta är INTE arduino specifikt på nåt sätt, detta är C++.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: Funktionsanrop i Arduino....

Inlägg av Wedge »

Funktionsprototyper är inte helt nödvändiga i Arduino. De skapas automatiskt, en av anledningarna till att en del hävdar att Arduinokod inte är C/C++, och att nybörjare inte lär sig programmera ordentligt.
Hur som helst, den automatiska prototypen skapas inte för funktioner med defaultargument.
Vill man gräva ned sig i detaljerna kan man börja här:
http://arduino.cc/en/Hacking/BuildProcess
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av mri »

Se där ja:

"Next, the environment searches for function definitions within your main sketch file and creates declarations (prototypes) for them. These are inserted after any comments or pre-processor statements (#includes or #defines), but before any other statements (including type declarations)."

Så det verkar vara tasking implementation av just det här då, eftersom funktioner med default värde inte fångas up korrekt.

Hursomhelst, jag kan förstå varför man skapat denna feature... Varför kräva att programmeraren skriver prototyper när kompilatorn kan göra samma jobb automatiskt.

Dock gillar jag inte det övriga automatiska copy/pastandet som sker med shetchen före kompileringen.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Funktionsanrop i Arduino....

Inlägg av sodjan »

Icke-programmerare gillar Arduino.
Och det är väl gott nog...
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av mri »

Ja kanske det.
Jag är bara rädd att när koden stuvas om automatiskt i bakgrunden just före den når kompilatorn, hur hittar man då felet (ifall det nu uppstår nåt knepigt strukturellt fel) när det inte är orginalfilerna som skickades till kompilatorn utan en omstuvad version. Men kanske denna rädsla är obefogad.
JonLee
Inlägg: 12
Blev medlem: 17 november 2013, 20:34:26
Ort: Gideå, västernorrlands län
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av JonLee »

Infekterat ämne detta om Arduino verkar det som....

Sodjan:
Icke-programmerare gillar Arduino.
Och det är väl gott nog...
Så bara för att man sitter och leker med Arduino så gillar man inte att programmera, snacka om fördomsfullt o.O Jag har lekt med programmering sedan VIC64'an men tycker att arduinon duger åt mig eftersom den är lätt att koppla upp saker man vill prova, det går snabbt att programmera den. Även för mig som inte har suttit så mycket med C/C++ .

MRI:
Whatever.

Den ursprungliga koden hade 3 fel:

1. Saknade funktionsprototyp för lcdPrint(), s.k. forward declaration.
2. Anropet lcdPrint(0, 0, 0) har en parameter för lite. Måste explicit ha 4 parametrar eftersom endast parameter 5 ("cls") har ett default värde.
3. Default värde skall endast anges på ett ställe, och i detta fall i funktionsprototypen.

De väsentliga ställena skall se ut såhär:

// Prototyp
void lcdPrint(int lcdRows, int lcdColums, int lcdText, float lcdTemp, boolean cls = false);
...

void startUp()
{
lcdPrint(0, 0, 0, 0); // Minst 4 parametrar
...
}

// Inget default värde anges här:
void lcdPrint(int lcdRows, int lcdColums, int lcdText, float lcdTemp, boolean cls)
{
...
}


Och detta är INTE arduino specifikt på nåt sätt, detta är C++.
Jo det var ju det som var fel med min kod, att jag inte skickade 4 argument med anropet. Att inte behöva prototypen för funktionen visste jag redan, så det var därför jag hade default värdet i funktionshuvudet.
Att ha default värden är mycket enklare att hantera i Python kod vilket jag har suttit mest med så därför valde jag att prova samma väg som jag gör där. Det kanske beror på att C/C++ är dåligt implementerad i Arduinons IDE.

ICeCap:
JonLee: I C finns inte overloaded funktioner, det finns i C++. Grejen är att det är bättre att använda korrekt syntax för det aktuella språket än att anta att "alla är lika" och "det borde vara...".

Många funktioner är mycket lika mellan olika språk, helt enkelt för att man behöver dom, detta betyder dock inte att syntax är identisk.
Jovisst är det så, men jag kör mycket trail and Error fungerar det ja då har jag lärt mig hur man gör, fungerar det inte ja då får man en bra lärdom av hur det ska se ut efter timmar att letande och testande i kod. Det är mitt sätt och lära mig på. Böcker fine men jag lär mig bäst på att prova mig fram...

Jag har läst C++ en kortare kurs på högskolan men anledningen till att jag övergav det är just för att det är så bökigt att hålla på med. Så fort man ska skriva något så ska det måsvinge klammras till förbannelse :shock: Helt enkelt ett jobbigt sätt att programmera, Visst koden blir snabb och har många fördelar med Objekt orienterad programmering och återvinning av kod tack vara det..

Python är för mig lämpligt då jag bara behöver tänka på indragning för att veta i vilken del av koden jag är och under vilken funktion som något körs. Men som Sodjan sa jag kanske inte är en programmerare bara för att jag donar med Arduino... :roll:

Nåväl...

Jag får tacka för svaren jag fått om problemet jag hade iaf, vilket gjorde att jag löste just mitt problem. :bravo:
Nerre
Inlägg: 27210
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Funktionsanrop i Arduino....

Inlägg av Nerre »

JonLee, ditt inlägg bekräftar ju mer eller mindre att "Icke-programmerare gillar Arduino.":)

"Jag har lekt med programmering"

"Att ha default värden är mycket enklare att hantera i Python kod vilket jag har suttit mest med så därför valde jag att prova samma väg som jag gör där"

"mycket trail and Error"
JonLee
Inlägg: 12
Blev medlem: 17 november 2013, 20:34:26
Ort: Gideå, västernorrlands län
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av JonLee »

Nerre:
JonLee, ditt inlägg bekräftar ju mer eller mindre att "Icke-programmerare gillar Arduino.":)

"Jag har lekt med programmering"

"Att ha default värden är mycket enklare att hantera i Python kod vilket jag har suttit mest med så därför valde jag att prova samma väg som jag gör där"

"mycket trail and Error"
Du tycker alltså att beroende på hur man skriver ett inlägg så avgör det om man kan programmera eller inte?? Skulle jag kanske ha skrivit att "jag har suttit med programmering" har det avgjort att jag kan programmera i olika språk och inte bara är en sk icke programmerare??

Default värden går att använda i C++ också om du kanske vet det. Det skrevs det om tidigare i inläggen. Det har jag använt i C++ också med då angivet i funktions prototypen. På det viset kan jag skicka bara ett värde om funktionen egentligen ska ha 2... Dock är detta mycket enklare att hantera i Python, därav min kommentar om det...

Så för att olika människor har olika sätt att lära sig så betyder det att jag är en icke programmerare?? Jag finner mycket bra info i böcker och tutorials men vinner mest på att prova mig fram för inlärningen...
Visst jag önskar att jag kunde C++, Python, Assambler mfl utantill men nu har jag inte dom kunskaperna men jag lär mig dag för dag och skriver program oavsett vad dom ska vara till för. Men måste man vara proffs :humm: för att fråga här så kan jag nog hitta andra bättre forums...
Nerre
Inlägg: 27210
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Funktionsanrop i Arduino....

Inlägg av Nerre »

En programmerare "leker" inte med programmering. Det är som om du skulle gå till en bilverkstad och få höra "jag har lekt med bilar sen jag var liten"... Där skulle i alla fall inte jag lämna in bilen.

En programmerare känner till skillnaderna mellan olika programspråk och försöker inte använda BASIC-funktioner i ett Pascal-program. Det finns massor av grejer som går att göra i många språk, men man gör det på hela olika sätt.

De flesta språk kan slå ihop strängar, i BASIC kan du slå ihop strängar med + men i C måste du använda strcat etc.
JonLee
Inlägg: 12
Blev medlem: 17 november 2013, 20:34:26
Ort: Gideå, västernorrlands län
Kontakt:

Re: Funktionsanrop i Arduino....

Inlägg av JonLee »

Nerre:
Ok tackar för synpunkterna. Eftersom jag tydligen inte är värdig eftersom jag fortfarande lär mig så ber om ursäkt för alla jag har råkat trampa på fötterna då och eftersom jag inte kan radera kontot här tydligen så det bli inaktivt istället.
H.O
Inlägg: 5914
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Funktionsanrop i Arduino....

Inlägg av H.O »

JonLee,
Detta forum svämmar över av liknande trista diskusioner.... BASIC kan inte användas till annat än att på sin höjd blinka en LED, om ens det. "Arduino" och dess variant av C är bara leksaker för folk som inte kan eller vet nått. Kodar du i C "på riktigt" ja då är det är sunkigt för att du inte kodar i ASM och kodar du mot förmodan i ASM då skulle du helst koda direkt i maskinkod.

När det gäller programmering i allmänhet och av uC i synnerhet så är det tyvärr så "tonen" är häromkring. Försök att inte bry dig om det, låt det rinna av dig och gå vidare eller sök upp ett forum där folk har mer respekt för att alla inte är födda hardcore "programmerare" - vad nu gällande definition för en sådan är...
Nerre
Inlägg: 27210
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Funktionsanrop i Arduino....

Inlägg av Nerre »

JonLee skrev:Nerre:
Ok tackar för synpunkterna. Eftersom jag tydligen inte är värdig eftersom jag fortfarande lär mig så ber om ursäkt för alla jag har råkat trampa på fötterna då och eftersom jag inte kan radera kontot här tydligen så det bli inaktivt istället.
Men snälla nån, om du fortfarande lär dig så kan du väl inte kalla dig programmerare?

En programmerare är inte nån som programmerar ibland, programmerare är en yrkestitel.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Funktionsanrop i Arduino....

Inlägg av sodjan »

En stor del av Arduinons framgång bygger på att det helt enkelt krävs
mindre teknisk kunskap av den som "programmerar" den än andra
liknande lösningar. Mer är färdigt och "paketerat". I det ligger inte
det minsta av värderingar, det bara är så. Att snacka om fördommar är
bara larvigt. Det är inte *jag* som brukar kalla Arduino för "skit"!
Tvärtom har den som sagt haft stora framgångar och många som
kanske inte skulle ha byggt något liknande tidigare har fått chansen.

Min kommentar om att många icke-programmerare gillar Arduino var en
motvikt mri's ganska tekniska kritik av utvecklingsmiljön. Det var väl
inte direkt fel, men det missade ju poängen med Arduino.

> Att inte behöva prototypen för funktionen visste jag redan, så
> det var därför jag hade default värdet i funktionshuvudet.

Men du hade missat att det inte fungerar *om* man har default värden.
Och det är ju tydligen tydligt dokumenterat, vilket framkom senare.

> Jag har läst C++ en kortare kurs på högskolan men anledningen till att
> jag övergav det är just för att det är så bökigt att hålla på med.

Hur då "övergav" ??
Olika språk är bara olika verktyg med olika användningsområden!

Jag gillar Python, men skulle aldrig få tanken att det skulle ersätta våra Cobol
applikationer! Python och C++ är också väldigt olika "under the hood". Vi har
både Cobol (huvudapplikationerna), C (kommunikationsrutiner) och Python (script
för web-sidor) på samma maskin.

> Python är för mig lämpligt...

Det är fullkomligt ointressant vad som passar *dig*. Det är vad som
passar det aktuella problemet som betyder något. Du kommer att få
problem om du försöker trycka in Python där just det inte passar.

> Men som Sodjan sa jag kanske inte är en programmerare...

Så barnsligt. Jag vet inte ett smack om dig (mer än att du är rellativt ny
inom programmering). Däremot vidhåller jag att många icke-programmerare
gillar Arduino just p.g.a den förenklade miljön, mycket exempelkod och
bra "community". Om just *du* tillhör den gruppen vet jag inget om.
ToPNoTCH
Inlägg: 5144
Blev medlem: 21 december 2009, 17:59:48

Re: Funktionsanrop i Arduino....

Inlägg av ToPNoTCH »

Gud så löjligt att försöka definiera kriterier för att kalla någon "programmerare" eller inte.
"Om man inte har fotboll som yrke så kan man inte vara fotbollsspelare"

Arduino "duger inte till något kvalificerat" = Skitsnack.
MCU'n går inte långsammare för den sitter på ett "PCB märkt Arduino".
Hela jävla internet är FULLT med motsägelser exempelvis i princip varje 3D skrivare är MEGA baserad, för att inte tala om autonoma flygsystemen (ardupilot, MultiWII) osv.
Gör gärna NÅGON SLAGS källforskning innan sådana uttalanden.

Det som är MEST kritiska mot Arduino är oftast dom som inte använder det eller ens har provat det = Mycket okunskap i kritiken.

Det är dyrt = skitsnack
Tidigare i tråden länkades till kompletta kort vars pris nästan understiger lös MCU till och med.
När man kommer över 32 PIN så måste grejorna på ett kort på ett eller annat sätt och i dagsläget är Arduino korten det billigaste alternativet.
Även om man vill köra C eller ASM så blir det billigast att köpa Arduino kort. Investeringen kan således användas oavsett språk och därmed om man vill byta.

Jag tror det övergripande problemet är att nybörjare oftast väljer eller blir hänvisade till Arduino och att man därför "förknippar" hårdvaran och språket med "nybörjar grejor".
Oförtjänt tycker jag.

Detta är MIN nyanserad bild.
Jag programmerar PIC i assembler och ATMEL i Arduino så jag har fötter i båda världarna lite. Är dock ingen programmerare för jag lever inte på det :-)

Försöker hålla mig från dom här trådarna, men får svårt att hålla mig när det blir så otroligt barnsligt som det blev i denna tråd (Igen).
ToPNoTCH
Inlägg: 5144
Blev medlem: 21 december 2009, 17:59:48

Re: Funktionsanrop i Arduino....

Inlägg av ToPNoTCH »

Nerre skrev: Men snälla nån, om du fortfarande lär dig så kan du väl inte kalla dig programmerare?
Prova att läsa meningen högt för dig själv 3 gånger, sen funderar du på om den fortfarande är korrekt.
Skriv svar