including cpp-filer MPIDE (Uno32) "LÖST"

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: including cpp-filer MPIDE (Uno32)

Inlägg av johano »

Ok, *vad* är det som går fel då? Du har ju ingen aning heller så då kan det mycket väl vara att roderpil inte alls innehåller det du tror att den ska...

Sätt en brytpunkt i din main och stega sedan igenom rad för rad i debuggern, kolla hur programmet exekverar, kolla innehållet i variablerna så kommer du hitta felet...kallas felsökning och är en fundamental del i programutvecklingsarbetet.

/johan
nifelheim
Den första
Inlägg: 2345
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: including cpp-filer MPIDE (Uno32)

Inlägg av nifelheim »

eftersom TS skriver
"Ja det spelar ju inte så stor roll vad den gör sedan eftersom den inte ens går att kompilera."
blir det lite svårt :)


Vad får du för felkod vid kompileringen?

Bocka i
File -> Preferences -> Show verbose output

expandera konsolfönstret , det svarta i nederkant,
läs vad den klagar på.
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

mri skrev:Jag tror du borde lära dig grunderna i c först före du ger dig på svårare saker. Börja med att blinka diod, och då menar jag att du faktiskt förstår vad som händer i hela ditt arduino program. Sen blinka dioden från en annan funktion än loop(). Sen flytta den funktionen till en annan fil, osv...
Som det är nu gissar du dig fram...
Det där var lågt. Kan du inte tillräckligt om detta problem för att kunna komma med en lösning så tycker jag du kan hålla inne med spydigheter av den här typen. Eller trampade jag dig på tårna när jag påstod att det verkar vara dåligt med kunskaper i Arduinovärlden.

Jag har programmerat i C flera år och hade inga som helst problem med att göra predis vad jag ville i MPLAB. Arduinos IDE är emellertid anorlunda och det är svårt att hitta rätt syntax osv. här. Detta beror förmodligen på att de som håller till i Arduinovärden inte så ofta gör just något annat än klipper och klistrar.
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

johano skrev:Ok, *vad* är det som går fel då? Du har ju ingen aning heller så då kan det mycket väl vara att roderpil inte alls innehåller det du tror att den ska...

Sätt en brytpunkt i din main och stega sedan igenom rad för rad i debuggern, kolla hur programmet exekverar, kolla innehållet i variablerna så kommer du hitta felet...kallas felsökning och är en fundamental del i programutvecklingsarbetet.

/johan
Det är klart att roderpil.c innehåller precis det den skall göra. Programmet fungerar precis som det skall när det körs för sig själv.

Sedan är det ju så här då att sitta och felsöka när det borde finnas någon som mycket enkel kunde visa hur header och CPP- filerna skall se för att det skall fungera. "...kallas felsökning" konstigt vad en del blir spydiga när de inte kan presentera ett enkelt svar.
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

nifelheim skrev:eftersom TS skriver
"Ja det spelar ju inte så stor roll vad den gör sedan eftersom den inte ens går att kompilera."
blir det lite svårt :)


Vad får du för felkod vid kompileringen?

Bocka i
File -> Preferences -> Show verbose output

expandera konsolfönstret , det svarta i nederkant,
läs vad den klagar på.
I detta inlägg finns fellistan vid kompileringen samt hur jag gjort header occ CPP filen
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: including cpp-filer MPIDE (Uno32)

Inlägg av johano »

Åh jag ber tusen ggr om ursäkt att jag tagit av min tid och försökt hjälpa dig, det var verkligen inte meningen att komma med dumma ideer om vad som kan vara fel när du redan har allt klart för dig. Ja utom då möjligen den lilla detaljen varför det inte funkar...

Lycka till önskar jag dig, jag ska inte besvära dig mer.

/johan
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

Jag eftersöker inte vad som är fel. Jag letar efter någon som är kapabel att fylla i de rader som behövs i header och CPP-filen men det klarade du ju tyvärr inte av.
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

Ok vi tar det igen.
Jag har ett program dör jag kan välja att göra olika saker..

t.ex som att rita en bild på en display.

jag skriver då i mitt program: ritabild();

Jag har en rutin i samma program som ropar på en biblioteksrutin som ritar bilden.
void ritabild(){
myGLCD.drawBitmap (130, 80, 60, 150, roderpil,90,30,125);
//Senare kanske jag vill göra lite mer här, men det hoppar över så länge.
}


OK klart så långt.

Nu vill jag inte ha denna rutin i detta program utan vill lägga det i ett annat progam eller tab som det kalls i Arduinovörlden.

Jag har då sökt läst testat ett antal lösningar på hur headerfilen och CPP filen skall se ut. orkar man gå tillbaka i mina inlägg så kan man se vad som inte fungerar sedan kan man antingen komma med förslag ock påstående om vad som är fel eller som någon klok man föreslog, felsöka, :bravo: eller så kan man helt radikalt leverera dom fåtal rader som H och CPP-filen skall innehålla för att det skall funka. Svårare än så är det inte.

Självfallet så krävs det ju att den som levererar dessa rader också kan sin kateches annars uppstår ju tyvärr bara fler och fler frågetecken och jag tycker det har blivit nog av den varan nu. Det är ju inte kärnforskning det är frågan om utan kanske 5 programrader. Det är inte så att jag är otacksam för de hjälpförsök som ramlat in, men man börjar ju fundera på att hoppa tillbaka till MPLAB-världen igen och se Arduino som den parentes det kanske är.
Mr Andersson
Inlägg: 1400
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: including cpp-filer MPIDE (Uno32)

Inlägg av Mr Andersson »

Enligt bilden så blandar du C och C++
http://en.cppreference.com/w/cpp/langua ... ge_linkage
nifelheim skrev:Vad får du för felkod vid kompileringen?
Ingen alls. Det TS listade är länkningsfel, inte kompileringsfel.
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

Nu har saken komkit i ett lite annat läge. Jag har också mistänkt att någon fil inte var med i länkningen. Felet var egentligen ganska uppenbart och syns på den bild jag lagt in i ett tidigare inlägg som visar MPIDE. Jag hade råkat döpa cpp filen till UTFT_visa_roder.CPP vilket ställde till det. skulle varit UTFT_visa_roder.cpp (Att ni inte såg det). :D. Den länkades aldrig in.

Det gör den nu och jag får ett annat fel som någon kanske bättre kan förklara vad det beror på.

Till att börja med kan jag säga att jag testat med att skriva heade och cpp-filerna som både C och C++ felmeddelandena blir de samma i båda fallen. Kommenterar jag bort "myGLCD.drawBitmap (130, 80, 60, 150, roderpil,90,30,125);" i cpp-filen och skriver något rubbish t.ex "int i = i + 1 ;" så går kompileringen igenom utan fel.
visaroder.cpp: In member function 'void rclass::ritapil()':
visaroder.cpp:6:6: error: 'myGLCD' was not declared in this scope
visaroder.cpp:6:43: error: 'roderpil' was not declared in this scope
myGLCD är ju från grafikbiblioteket som är declarerat i huvudprogrammet.
roderpil är c-filen som innehåller bilden på pilen, den är också declarerad i huvudprogrammet.
Men (och här får jag medge att mina kunskaper är lite bristfälliga så att mri blir glad) :) Hur rättar jag till felmedelandet om libraryfunkriionen myGLCD?

Felmeddelandet om roderpil försvinner om jag declarerar den även i cpp-filen

Kod: Markera allt

#include "visaroder.h"

rclass::rclass()
{}
    extern unsigned short roderpil[0x2328]; 
    
    void rclass::ritapil(){
    myGLCD.drawBitmap (130, 80, 60, 150, roderpil,90,30,125);
     
  }
rclass roder = rclass();  
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: including cpp-filer MPIDE (Uno32)

Inlägg av Wedge »

myGLCD har du skapat i huvudprogrammet:

Kod: Markera allt

UTFT myGLCD(ITDB32S,38,39,40,41);
I alla andra filer som ska separatkompileras så ska du bara hänvisa till den som en externt definerad variabel:

Kod: Markera allt

#include <UTFT.h>
extern UTFT myGLCD;
SeniorLemuren
Inlägg: 7859
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: including cpp-filer MPIDE (Uno32)

Inlägg av SeniorLemuren »

Gräsligt mycket tack Wedge. Jag hade precis 10 minuter innan detta inlägg fått samma svar i chipkit.nets forum och testat. Det fungerar nu som det skall.

Tack ni alla som gjort välmenta försök att lösa problemet. Synd att ni missade det där med CPP som ju egentligen var huvudorsaken till allt strul. :)

Får passa på att fråga MR Andersson vad jag skulle göra med denna information. >>Enligt bilden så blandar du C och C++<<

Eftersom det tydligen fungerar med C++ varianten som jag använder nu, så var ju denna information av typen "förvilla mer om det går". Men tack du också för att du tog dig tid. :)
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: including cpp-filer MPIDE (Uno32) "LÖST"

Inlägg av mri »

Nu verkar det här vara löst men jag kommenterar mitt "bidrag" ändå.
Det där var lågt. Kan du inte tillräckligt om detta problem för att kunna komma med en lösning så tycker jag du kan hålla inne med spydigheter av den här typen. Eller trampade jag dig på tårna när jag påstod att det verkar vara dåligt med kunskaper i Arduinovärlden.
Jag ber om ursäkt. Min avsikt var inte att göra ett påhopp eller att vara elak. Du trampade inte på mina tår.
Formuleringen blev inte längre eftersom jag postade via smartlur. Nu sitter jag vid ett riktigt tangentbord och kan brodera ut texten lite.
Jag kan bara reagera på vad du skrivit, jag känner dig inte och vet inte vad du kan. Men baserat på din aggresiva stil i frågeställningarna och faktumet att du hade flera fundamentala fel i C koden; t.ex. flera funktioner med samma namn, deklarera en funktion istället för att göra ett funktionsanrop, förståelse hur man löser kompilerings/länknings problem, så svarade jag som jag svarade.
Dvs. har man grundläggande luckor i hur ett C program byggs upp och den grundläggande C syntaxen, ja då blir det jättesvårt att göra större program. Man måste lära sig krypa förrän man börjar gå...

Vad jag menar med "aggressiva stil" är att du i dina frågor liksom kastar dina problem på de som försöker hjälpa dig, och blir irriterad när den rätta lösningen inte dyker upp fort nog.
Jag har programmerat i C flera år och hade inga som helst problem med att göra predis vad jag ville i MPLAB. Arduinos IDE är emellertid anorlunda och det är svårt att hitta rätt syntax osv. här. Detta beror förmodligen på att de som håller till i Arduinovärden inte så ofta gör just något annat än klipper och klistrar.
Sorry, men de flera års erfarenhet kunde jag inte skymta i det du postade i den här tråden.

Jag är medveten om att du kan ta det jag skrivit på fel sätt... men tja, det hoppas jag inte.
Mr Andersson
Inlägg: 1400
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: including cpp-filer MPIDE (Uno32)

Inlägg av Mr Andersson »

SeniorLemuren skrev:Får passa på att fråga MR Andersson vad jag skulle göra med denna information. >>Enligt bilden så blandar du C och C++<<

Eftersom det tydligen fungerar med C++ varianten som jag använder nu, så var ju denna information av typen "förvilla mer om det går". Men tack du också för att du tog dig tid. :)
Jag ber om ursäkt om jag felaktigt förväntade mig att någon som programmerat i flera år skulle klara av att läsa dokumentation.
För att länka C++ med C behövs extern "C", tex i din .cpp-fil

Kod: Markera allt

extern "C" {
#include "min_C_header.h"
}
eller tex

Kod: Markera allt

#ifdef __cplusplus
extern "C" {
#endif
void min_c_funktion();
#ifdef __cplusplus
}
#endif
I headerfilen, så kan man #include'a den från både C och C++ utan att behöva tänka på någonting.

Om det ändå fungerar att blanda språken utan extern "C" så är din kompilator trasig och kompilerar C-koden som C++
Skriv svar