GCC fråga angående bygga ett API

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

GCC fråga angående bygga ett API

Inlägg av Micke_s »

Jag ska försöka beskriva vad jag menar och vad jag vill göra.
Går det i gcc att skapa en jump table som pekar på diverse funktioner, jag vill bygga ett API som man kan anropa.
Användningsområdet kan t.ex. vara att man vill göra ett api tillgängligt för en användare utan att den kan se läsa av hur funktionerna fungerar.

Ett exempel är atmel:s flip där man kan använda flash funktioner i bootloadern från mainprogrammet http://www.atmel.com/dyn/resources/prod ... oc7618.pdf ,
fast där är det skrivet i assembler.

Flip är en bootloader med några funktioner ("entry point") man kan anrop från sin applikation , dessa ligger alltid på samma address.
Användarvisningsbild
twse
Inlägg: 323
Blev medlem: 3 februari 2011, 21:12:31
Ort: Göteborg

Re: gcc fråga angående bygga ett api

Inlägg av twse »

Varför inte bara exportera symbolerna så kan funktionerna anropas direkt? Om du bygger en .so så kan en binär ladda in den och slå upp symbolerna med dlsym(). Vad är det för typ av binär du ska bygga?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: gcc fråga angående bygga ett api

Inlägg av johano »

Kika på bibliotek (libraries).
Här är en tutorial i ämnet efter en enkel googling på "gcc create lib":

http://www.crasseux.com/books/ctutorial ... brary.html

/johan
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: gcc fråga angående bygga ett api

Inlägg av sodjan »

Aktuell plattform är ju avgörande. Det verkar vara AVR (?).
Och då är väl knappast (?) saker som dynamisk laddning och dlsym() aktuella ?

Svaret på ursprungsfrågan är ja, allt detta fixar länkaren med automatik
och det är mycket standardiserad hantering och inget man behöver "skapa".

Jag utgår från att utv-miljön kring AVR kan hantera separatkompilering och
länkning mot obj eller lib filer.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: gcc fråga angående bygga ett api

Inlägg av Micke_s »

Jo, det är avr eller stm32 som gäller.
Problemet jag ser med länka in objektfiler är när man behöver fixa saker i det fasta, då kan addresser flyttas runt och jag vill att api:et är kompatibelt över olika versioner.
Kanske enklast att kasta in en sektion i linker scriptet och ha en jump table i assembler.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: gcc fråga angående bygga ett api

Inlägg av sodjan »

Det "fasta" vadå?
Länkningen sker till de aktuella adresserna just i den
obj eller lib som man länkar imot. Ändrar man i obj/lib så
länkar man bara om. Inga adresser är "fasta"...

Beskriv lite tydligare vilket problem du ser.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: GCC fråga angående bygga ett API

Inlägg av Micke_s »

Problemen uppstår om jag skulle göra en custom bootloader med vissa extrafunktioner som 3:e part kan använda. Uppdaterar jag bootloadern så vill jag inte behöva att 3:e part behöver uppdatera sin del.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: GCC fråga angående bygga ett API

Inlägg av sodjan »

OK.
Då kan du lägga en fast "jump-table" på dokumenterade adresser som
hoppar till de egentliga rutinerna. De fasta adresserna (och startadressen
till tabellen) behöver du inte ändra. Eller i alla fall försöka att inte ändra...
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: GCC fråga angående bygga ett API

Inlägg av Micke_s »

precis så tänkte jag, bara frågan om det går att göra i rätt så ren gcc c kod eller om lite assembler måste vara inblandad.

Edit: tror jag hittade något intressant http://stackoverflow.com/questions/5619 ... pplication
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: GCC fråga angående bygga ett API

Inlägg av sodjan »

Det som man måste ha tillgång till oavsett språk är en
mekanism för att ange en specific adress för en rutin.
Det borde finnas några pragma eller likande i C också.

Något i stil med

Kod: Markera allt

int funk1_public (param1 int, param2, int) <adress>
{
  return funk1_internal (param1, param2);
}

sedan någon annanstans i koden :

int funk1_internal (param1 int, param2, int)
{
  ...
  ...
  All kod som behövs för funk1
  return whatever...
}
D.v.s att funk1_public är låst till en specific adress medans
funk1_internal kan ligga var som helst. Det som behövs är
en mekanism för att lägga en funktion på en fast adress.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: GCC fråga angående bygga ett API

Inlägg av Micke_s »

jo, det finns det.
__attribute__((section(".blabla"))) kan läggas till en tabell, funktion mm. sedan måste .blabla defineras i linkern.
Länken jag hittade löste det jag försökte hitta.
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: GCC fråga angående bygga ett API

Inlägg av Icecap »

I "lite större" mikroprocessorer finns det ofta mjukvaru-interrupt, just till dessa funktioner.
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: GCC fråga angående bygga ett API

Inlägg av Micke_s »

Jo, det stämmer nog. I stm32 finns det user mode och kernel mode (om jag minns rätt) där man har ett interrrupt för detta. Avr 8 bit har ej det
Skriv svar