/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Compilering af POSIX kode til både target ~
Fra : Hansen


Dato : 08-02-08 14:51

Hejsa,

Jeg er ved at skrive en applikation til et StrongArm target, der skal kunne
skrive til en com port (RS232). Applikationen kan også køre på Win32 som
simulation.

På target er plads begrænset, mens det på windows ikke er et issue.

Er det muligt at skrive kode der kan kompileres til begge targets med hjælp
fra et bibliotek der wrapper Win32 api'et med funktioner der har samme
definition som på target (POSIX)

Et konkret eksempel:

På target skriver man følgende: open()
mens man på Win32 bruger _open()

jeg vil gerne i min kode kunne undgå ifdef's og blot skrive open(), ioctl()
osv. og så kompilere til Win32 ved hjælp af et bibliotek.

Er der nogen der ved om det er muligt, og evt. hvilket bibliotek man kunne
anvende? Jeg tænkte på om MinGw, Cygwin, UWin eller noget 4. kunne bruges?



 
 
Arne Vajhøj (10-02-2008)
Kommentar
Fra : Arne Vajhøj


Dato : 10-02-08 05:55

Hansen wrote:
> Jeg er ved at skrive en applikation til et StrongArm target, der skal kunne
> skrive til en com port (RS232). Applikationen kan også køre på Win32 som
> simulation.
>
> På target er plads begrænset, mens det på windows ikke er et issue.
>
> Er det muligt at skrive kode der kan kompileres til begge targets med hjælp
> fra et bibliotek der wrapper Win32 api'et med funktioner der har samme
> definition som på target (POSIX)

Principielt ja.

> Er der nogen der ved om det er muligt, og evt. hvilket bibliotek man kunne
> anvende? Jeg tænkte på om MinGw, Cygwin, UWin eller noget 4. kunne bruges?

MinGW duer ikke til dette formål, så enten Cygwin eller UWin.

Jeg kender kun Cygwin.

Mit gæt vil være at du vil skulle investere en del tid i at få dit
environment på plads, hvis du vil have det til at virke på denne
måde - der er mange ting som man drille.

Arne

JohnK (21-02-2008)
Kommentar
Fra : JohnK


Dato : 21-02-08 16:18


Hej,

Man kan sagten have samme kode/funktionalitet til flere 'target's (windows
eller embedded eller simuleret osv)

Din prmære kode skal bruge macroer eller ligende funktioner der derefter
justeres til den specificke anvendelse(=platform)
typisk for seriel kommunikation bruges følgende i den kode:

Application layer:
-Open
-Close
-Create
-Status
-SetOptions (terminal mode, XOn/XOff, osv)
-SendByte (put in fifo)
-ReceiveByte (get from fifo)
-SendString (process string --> fifo)
-ReceiveString (process string from fifo)

FIFO layer:
PutInTxFifo - (outbound called by appl)
GetFromTxFifo (outbound called by IRQ_Tx to fetch next tx byte)
TxFifoStatus

PutInRxFifo (inbound called by ISR to store received byte)
GetFromRxFifo (inbound called by Appl to get next byte)
SignalToRxFunction (signal to appl - if using RTOS- byte is received)
RxFifoStatus

Lower layer:
Interrupt service routiner mellem Hw og Driver
-IRQ_RxByte
-IRQ_TxByte
-IRQ_Error

Disse ovenstående funktioner referes rundt i din kode ...

Du vil næsten aldrig kunne have en-til-en funktions interfaces, så du skal
lave dine egne funktions wrappers.
Derefter er der 2 forskellige angrebsvinkler (for dit driver layer):
1) destination (dvs windows eller target) koden er i hver eneste funktion.
Og kan via compiler flag til/fravælges.
2) du har forskellige filer for hvert target - RS232_PC.c, RS232_AVR.c,
RS232_SimulatorPC.c osv osv
(disse linkes så på tilsidst)

Vedligeholdelsesmæssigt og test mæssig er 2) at forstrække ...

/johnk



Søg
Reklame
Statistik
Spørgsmål : 177415
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste