Sida 2 av 2
Postat: 10 oktober 2007, 08:57:22
av Mike
Själv använder jag inte MPLAB. Använder MPLAB en makefile? Isåfall borde du kunna se vilka header filer som inkluderas till varje objektfil i makefilen. Ett annat alternativ är att filerna kommer med genom direktiv till kompilatorn. Se om du kan hitta vilka options som används när du kallar på kompilatorn.
För att klargöra static och volatile:
static inne i en funktion betyder behåll värdet mellan funktionsanrop,
static utanför funktioner betyder bara synlig i denna fil.
Att static används för båda betydelse förvillar (någon som vet varför 'static' återanvänds?)
volatile betyder hämta alltid värdet från minnesutrymmet.
(dvs vi skippar optimeringar som 'det går nog snabbare om vi lagrar värdet i register A istället' eller 'denna variabel är ju 42 hela tiden, lika bra vi använder värdet 42')
Postat: 10 oktober 2007, 09:06:32
av speakman
> (någon som vet varför 'static' återanvänds?)
För att det är exakt samma funktion, fast den används olika beroende på om den är i en funktion eller i en modul?
F.ö. så är det inte säkert att headerfilerna finns i Makefilen, men ett vettigt IDE som sköter kontrollen av Makefile borde se till att alla dependenies finns med där. Men det är inget krav.
Postat: 10 oktober 2007, 09:55:10
av sodjan
> Använder MPLAB en makefile?
Använder och använder.
Den har en make-funktion inbyggt, och det finns ett menyval
för "Export makefile" (som jag dock aldrig har provat).
Postat: 10 oktober 2007, 11:28:13
av speakman
Men den har ett eget format för själva "projektet"?
Men har den bara fullt kompatibelt make-stöd så är det iaf möjligt att använda en Makefile, vilket många gånger är ovärderligt.
Postat: 10 oktober 2007, 12:49:26
av sodjan
MPLAB har ett eget format för projekt-filen (.mcp).
Det är ett rent textformat, men det är inte i make format.
Och, som sagt, den kan exportera en make fil, om man vill...
Postat: 10 oktober 2007, 12:54:12
av speakman
Jo, men det väsentliga är att den kan *nyttja* Makefiles. Inte bara exportera dom.
Postat: 10 oktober 2007, 12:58:14
av sodjan
Jag tror inte det, den gör ju i princip samma sak själv, fast internt...
EDIT: Jag antar att docs har detaljerna...
Postat: 10 oktober 2007, 13:47:04
av speakman
> i princip samma sak själv
Som man kan styra med en Makefile har jag mycket svårt att tro att en IDE täcker upp för allt. Jag har aldrig sett något i närheten.
Om man bara använder Makefile för att speca objektfiler för ett projekt så räcker stödet i IDE. Men Makefile är så mycket mer än så...
doc har nog svaret, men jag är inte så intresserad hur det egentligen ligger till eftersom jag inte har för avsikta att använda MPLAB.
Men det är helt klart en stor fördel *om* den stöder Makefiles fullt ut.
Postat: 10 oktober 2007, 14:09:50
av sodjan
Den gör vad den behöver...

Postat: 10 oktober 2007, 14:59:45
av speakman
Allt gör vad det behöver. Frågan är vilka behov som användare man har. Och den flexibilitet som finns med Makefiles har jag inte sett i någon IDE.
Inte sagt att man inte klarar sig utan, men då blir det lätt kompromisser i den form Icecap nämner tidigare i tråden.
Postat: 10 oktober 2007, 19:06:18
av BoF
>Att static används för båda betydelse förvillar (någon som vet varför 'static' återanvänds?)
Static betyder bara en sak, att den initieras bara en gång (vid kompilering). Den försvinner inte efter funktions anrop utan finns kvar och behåller sitt aktuella värde under hela programkörningen.
Räckvidden påverkas ju var man deklarerar variabeln, en variable får vid deklarering utanför funktioner globalt räckvidd i alla filer. Deklarerar man en static utanför funktionerna så får den begränsad räckvidd, kan bara användas av funktioner som ligger i samma fil och nedanför variabledefinitionen.
Den återanvänds inte utan finns under hela programkörningen.
Postat: 10 oktober 2007, 19:32:47
av speakman
Tack för klargörandet.

Postat: 11 oktober 2007, 03:53:47
av Mike
>Static betyder bara en sak, att den initieras bara en gång (vid kompilering).
Jag vet inte om jag håller med..
Variablar i C har flera egenskaper och static ändrar olika egenskaper beroende på om den använd i en funktion eller utanför
1. I en funktion används static för att modifiera hur länge variabelns värde sparas
utan static skapas variabeln när man går in i blocket och förstörs när man går ut.
med static skapas variabeln och den finns kvar tills programmet slutar.
Tredje alternativert är när man allokerar minne (med malloc eller etc)
2. utanför metoden bestämmer static vilken linkage variabeln får. med static får den internal linkage och utan blir det external linkage. Är variabeln deklarerat i en funktion har den ingen linkage.
Andra egenskaper en variabel kan ha är 'scope' och namespace.
Men flåt att jag snodde tråden. Hur går det med MPLAB, har du kommit på var alla inkludefiler inkluderas? Du kanske kan söka igenom projektfilerna och se om du kan hitta var projektet lagrar dina includefiler
Postat: 11 oktober 2007, 08:24:38
av speakman
Ytterligare en förklaring på samma sak fast med andra ord. Kanske mer korrekta facktermer dock.
(inser att jag själv blandar ihop definering/deklarering ibland)
En noggrann genomgång ges
här för den som vill fördjupa sig ytterligare.
Däremot har jag aldrig hört talas om "namespace" annat än i C++-sammanhang. Det får gärna förklaras lite mer. Kanske i en ny tråd?
