Problem med länkning Atmel Studio 6

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Problem med länkning Atmel Studio 6

Inlägg av toffie »

Hej på er,
Har lite problem med att länka ihop filer.

Tanken är.. Jag har två separata projekt, som ligger tillsammans i en "Solution". I vardera projekt har jag lagt in en mapp som heter "Drivers". I dessa mappar har jag lagt till fyra stycken "drivrutiner" som jag själv skrivit.. dvs vanliga .c och .h filer. Dessa är inlagda genom "Add as link".

Ändå hittar inte AS6 de filerna. De syns likt "genvägar" i Windows med en liten pil-ikon på sig i min "Drivers" mapp, men de verkar inte gå att använda.

Jag vill helt enkelt ha flera gemensamma filer mellan olika projekt som agerar "drivrutiner", där jag kan ändra en sak i en fil och det påverkar samtliga projekt. Ni förstår säkerligen vad jag menar, men jag förklarar lite extra ;)

Atmel lyckas ju, så varför fungerar det inte? Någon som har någon idé?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med länkning Atmel Studio 6

Inlägg av sodjan »

Aktuella felmeddelanden o.s.v är alltid bra. D.v.s vad betyder
"hittar inte" och "verkar inte gå att använda" med konkret?
Och är det AS6 eller kompilatorn som ger fel?
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: Problem med länkning Atmel Studio 6

Inlägg av toffie »

Bra där! Ja det är väl kompilatorn i AS6 som ger felet.

Kod: Markera allt

Drivers/usart.h: No such file or directory
Det är exakt så det ligger i strukturen också, så jag vet inte riktigt.. Tittar man på koden och går till den rad som har den aktuella inkluderingen, dvs #include "Drivers/usart.h" så står det uppe i övre delen av kodfönstret;

"C:\Users\Chris\Documents\Atmel Studio\_PROJECTS\Projekt1\Drivers\usart.h"

Hela genvägen är dessutom korrekt.. öppnar jag den rakt av i exempelvis Anteckningar så är det ju rätt fil som öppnas. Så AS6 vet ju både vart filen är och förmodligen att den finns. Men den använder inte filen i projekten.
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Problem med länkning Atmel Studio 6

Inlägg av hummel »

Använd inte genväg.
Lägg dina drivrutiner i en egen katalog.
Lägg sedan till sökvägen till denna katalog till AS6.
Använd som vanligt #include i dina källfiler.

Du vet skillnaden mellan #include <> och #include "" ?
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: Problem med länkning Atmel Studio 6

Inlägg av toffie »

Ok, inte genväg då! Men om jag lägger till sökvägen i AS6, går det att begränsa så bara aktuell "Solution" alt. projekt har tillgång till denna? Har inte lyckats hitta detta.

Tyvärr vet jag inte "exakt" skillnaden mellan <> och "" när det gäller include. Mitt försök; <> är för bibliotek "libraries" och "" är för att inkludera inom samma mapp / struktur?
Senast redigerad av toffie 2 februari 2014, 15:09:27, redigerad totalt 1 gång.
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Problem med länkning Atmel Studio 6

Inlägg av hummel »

Dina include-kunskaper är goda, det stämmer. :-)
Det bör finnas ett ställe där du kan lägga till "include-pather" i just ditt projekt/solution.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med länkning Atmel Studio 6

Inlägg av sodjan »

Många miljöer har även metoder för att lägga till include-kataloger.
D.v.s kataloger som kommer att genomsökas efter include <...>
filer utan att man måste lägga till katalogen direkt till projektet.
(Som hummel just skrev dessutom... :-) )
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Problem med länkning Atmel Studio 6

Inlägg av hummel »

Laddar hem AS6 nu så ska jag leta read på det åt dig, men är det möjligt att AS6 är på 900 MB. Ingår all kod som utvecklats sedan datorn begynnelse i paketet? :-)
bearing
Inlägg: 11676
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Problem med länkning Atmel Studio 6

Inlägg av bearing »

Anledning till storleken är väl att det är baserat på MS Visual Studio... =)
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: Problem med länkning Atmel Studio 6

Inlägg av toffie »

hummel
Ah, då kunde man ju det ;)

Hittade hur man kan lägga till en include path, men det verkar inte vilja gå heller.

Project -> Properties -> AVR/GNU C Compiler -> Directories och här kan man lägga in "Include Paths". Både relativt till projektet och/eller full sökväg till en mapp. Inget av det fungerar.

Varken med #include <> eller "".


------
Nu verkar jag ha "kommit på" vad det är som inte fungerar. Jag får in header filer, men inte kod filer (.c)... Går det möjligen att ställa in på något sätt?


Edit..
hummel
Haha.. Jadu, man hade kanske kunnat hoppas på det men nej tyvärr ;)


Edit2..
Nu har jag löst det! Om jag gör följande verkar det fungera helt och hållet.

Jag har en egen mapp någonstans på datorn där jag har "drivrutiner", .h och .c filer som jag vill använda i flera projekt. För detta projekt vill jag ha dem just för den "Solution" som är en "hållare" för två stycken projekt. Hur som helst, för detta projekt har jag två delar.. en för "Server" och en för "Nod" som delar på uart.c/h system.c/.h osv.

Om jag lägger in en "Include Path" till mappen där mina "drivrutiner" finns via Project -> Properties -> AVR/GNU C Compiler -> Directories i Atmel Studio 6 så länkas header filerna in. Om jag sedan högerklickar på mitt projekt i "Solution Explorer" och väljer "Add -> Existing Item" och väljer samtliga filer från min "drivrutins" mapp så har jag både tillgång till alla filer som om de egentligen låg direkt i projektmappen, men de är även inlänkade i projektet.

Detta gör; Jag har filerna på en central plats för båda mina projekt i denna "Solution", vilket gör att om jag ändrar i ex. usart.h så ändras det för båda projekten vilket är det jag ville komma till.

Om jag endast la in "Include Path" så länkades in .c filerna in korrekt samtidigt om jag varken kunde se och redigera .h eller .c filer i "Solution Explorer".

Om jag endast la in filerna via "Add as link" så kunde jag se filerna, men header filerna kopplades inte ihop med projektet och jag kunde inte använda .c filernas kod.

Så om man både lägger in "Include path" enligt ovan och lägger in filerna i "Solution Explorer" via "Add as link" så fungerar det som det ska! :)
Senast redigerad av toffie 2 februari 2014, 15:03:07, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med länkning Atmel Studio 6

Inlägg av sodjan »

> Jag får in header filer, men inte kod filer (.c)...

Vad menar du med "få in" C-filer?

H-filer includeras med #include till själva källkoden.
C-filer separatkompileras och läggs till via länkaren som objektfiler.
Det är två ganska olika operationer!

De flesta utvecklingsmiljöerna brukar hantera detta, om man lägger
till C-filer så separatkompileras dom och sedan så tas det omhand
antingen på kommandoraden till länkaren eller genom den make fil
som skapas dynamiskt. Projektet måste dock veta att C-filerna ingår.
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: Problem med länkning Atmel Studio 6

Inlägg av toffie »

Ja det fungerar väl om man inte ska ha dem "separat" från mappen där koden finns. Att lägga in både header (.h) och .c filer kan jag utan problem när allt ligger i samma mapp. Det fungerar!

Men om de ligger i separat mapp som antingen är tillgänglig via mappstruktur eller som ligger utanför mappstrukturen så fungerar det inte utan det jag beskrev i inlägget ovan.

Edit..
Så det hela "känns" som att det är löst nu. Vad säger ni? Det fungerar ju i detta läget, är det något konstigt mer än att det är komplicerat eller känns det som en bra "lösning"?

Själva "grejen" med detta är ju att jag inte vill ha kopior av filer, utan istället dela ofta förekommande kod mellan flera projekt i ett projekt så att säga. Ha en "master" fil med kod för exempelvis USART funktioner som samtliga underprojekt i ett projekt kan använda. Behövs något uppdateras så lär det ju behöva uppdateras i samtliga underprojekt. Om inte, så får man göra ett "special" projekt istället för just det underprojektet.
hummel
Inlägg: 2544
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Problem med länkning Atmel Studio 6

Inlägg av hummel »

Tänk på att du inte länkar in .c och .h-filer du inkluderar dessa. Det som som sedan kompilerats kan länkas.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med länkning Atmel Studio 6

Inlägg av sodjan »

Alltså...
Egentligen vill man nog inte lägga till *C*-filerna för gemensamma "drivers",
utan man länkar bara in objektfilen till varje projekt. Nu så kanske det inte går
alltid (annat i projektet påverkar kompileringen) jag vet inte hur det är här.

C-filerna till "drivers" har normalt sina helt egna projekt där de byggs för sig
(alltså skapar O filen), alltså helt skilt från själva applikationsprojekten.

De enda filerna från "drivern" som varje (applikations-) projekt behöver
känna till är H och O filerna. Om det är många O filer så kan de med
fördel byggas ihop till en LIB fil, men det kanske är överkurs här.
Användarvisningsbild
toffie
Inlägg: 1888
Blev medlem: 22 juli 2004, 21:38:07
Ort: Töreboda / Stockholm
Kontakt:

Re: Problem med länkning Atmel Studio 6

Inlägg av toffie »

sodjan
Ah, nu pratar du om riktiga "drivrutiner" :P jag kallar mina för drivrutiner, fast det kanske egentligen ska kallas för vanliga .c och .h filer.. :P Jag ser dessa filer, som jag skrivit med USART rutiner och liknande för ja.. någon sorts drivrutin för mina Atmega uCs.

De blir ju ungefär som det. Men egentligen är det bara vanliga .c och .h filer som jag vill ha inkluderade i flera projekt utan att gå vidare och bråka med O filer eller för den delen bygga en egen LIB. Det kommer! Inte så att jag inte vill komma dit, men har inte riktigt kommit så långt i min egna utveckling än :P
Skriv svar