|
| 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
| |
|
|