Villkora kod beroende på vald uC i Atmel Studio 6?
Re: Villkora kod beroende på vald uC i Atmel Studio 6?
Du kan uppnå det samma utan LTO, genom att använda gcc -ffunction-sections -fdata-sections och ld --gc-sectionssnigelen skrev:Den (avr-ld) länkar in hela de objekt-filer (.o) som finns i lib-filen (.a) om man använder något från objekt-filen. Man bör alltså ha orelaterade delar i olika objekt-filer annars tas rubbet med. Detta gäller förstås inte om man använder LTO (Link Time Optimization), men det är relativt nytt och kanske inte helt robust än.
Re: Villkora kod beroende på vald uC i Atmel Studio 6?
Jo det går ju, och gör man ett lib man bara skall använda själv så kan man ju använda det. Men det är väl inte att rekomendera om man gör ett lib som skall användas av andra; att tvinga på dem att använda -function-sections/-gc-sections är inte så "snällt". T.ex rekomenderar avr-libc-manualen:
How the linker behaves is very important in designing a library. Ideally, you want to design a library where only the functions that are called are the only functions to be linked into the final application. This helps keep the code size to a minimum. In order to do this, with the way the linker works, is to only write one function per code module. This will compile to one function per object module. This is usually a very different way of doing things than writing an application!
Re: Villkora kod beroende på vald uC i Atmel Studio 6?
Jo, jag håller med, bättre är ju att organisera sin kod så att .o filerna blir vettiga istället då.
Re: Villkora kod beroende på vald uC i Atmel Studio 6?
En fulvariant jag sett i Arduinosammanhang är att skriva ett "lib" som placeras i samma kataloggren som andra Arduinolib, men där .c-filen är i stort sett tom, och all implementation ligger i .h-filen. Man kommer då att länka med ett tomt "riktigt" lib, och .h-filen får man ju ändå alltid inkludera.
Man kan då distribuera och installera koden som om den vore bibliotekskod, men den kompileras specifikt för varje projekt/target.
Man kan då distribuera och installera koden som om den vore bibliotekskod, men den kompileras specifikt för varje projekt/target.
Re: Villkora kod beroende på vald uC i Atmel Studio 6?
En .c fil är inget "lib".
För att resonemnget ska vara rellevant så ska det vara objektkod.
I det fall du beskriver (med en .c fil) så kan man lika gärna kompilera den
rakt av istället för att köra med en "ful-h" fil. Om man istället distribuerade
en tom .o fil (eller .lib) så hade jag förstått det bättre.
I alla fall i det generella fallet, om Arduino har något "eget" för sig vet jag inte...
För att resonemnget ska vara rellevant så ska det vara objektkod.
I det fall du beskriver (med en .c fil) så kan man lika gärna kompilera den
rakt av istället för att köra med en "ful-h" fil. Om man istället distribuerade
en tom .o fil (eller .lib) så hade jag förstått det bättre.
I alla fall i det generella fallet, om Arduino har något "eget" för sig vet jag inte...