Omzetten GCC ARM ARM aan ADS C bron.

Y

yodathegreat

Guest
Hi all,

Hoe te converteren GCC deze code aan ADS ARM C-code?.

met vriendelijke groet# define portSAVE_CONTEXT () \
(\
extern vluchtige void * vluchtige pxCurrentTCB; \
\
/ * Push R0 als we hier gaan gebruiken, het register.* / \
asm volatile ( "STMDB SP!, (R0)"); \
\
/ * Stel R0 te wijzen op de taak-stack pointer.* / \
asm volatile ( "STMDB SP, SP () ^"); \
asm volatile ( "SUB SP, SP, # 4"); \
asm volatile ( "LDMIA SP!, (R0)"); \
\
/ * Duw het retouradres op de stack.* / \
asm volatile ( "STMDB R0!, LR ()"); \
\
/ * Nu hebben we opgeslagen LR we kunnen gebruiken in plaats van R0.* / \
asm volatile ( "MOV LR, R0"); \
\
/ * Pop R0 dus we kunnen slaan op het systeem-modus stack.* / \
asm volatile ( "LDMIA SP!, (R0)"); \
\
/ * Duw alle systeem-modus registers op de taak stack.* / \
asm volatile ( "STMDB LR, (R0-LR }^"); \
asm volatile ( "SUB LR, LR, # 60"); \
\
/ * Duw de SPSR op de taak stack.* / \
asm volatile ( "MEVROUW R0, SPSR"); \
asm volatile ( "STMDB LR!, R0 ()"); \
\
/ * Bewaar de nieuwe top van de stack voor deze taak.* / \
asm volatile ( "LDR R0,% 0": "M" (pxCurrentTCB)); \
asm volatile ( "STR LR [R0]"); \
)

 
ADS hebben deze syntax van inline asm

# define SWI_SHOWREGS __asm (SWI 0x0000004)

__asm (MRC P15, 0, i, C0, C0;)

 
Hi Dainis,

Ik weet dat de __asm.

maar het probleem is SP!in inline asm ADS onmogelijk te gebruiken SP registreren ..

met vriendelijke groet

Dainis schreef:

@ DS hebben deze syntax van inline asm# define SWI_SHOWREGS __asm (SWI 0x0000004)__asm (MRC P15, 0, i, C0, C0;)
 
yodathegreat schreef:

Hi Dainis,Ik weet dat de __asm.maar het probleem is SP!
in inline asm @ DS onmogelijk te gebruiken SP registreren ..met vriendelijke groetDainis schreef:

@ DS hebben deze syntax van inline asm# define SWI_SHOWREGS __asm (SWI 0x0000004)__asm (MRC P15, 0, i, C0, C0;)
 
Het probleem hier is dat de macro-functionaliteit is een onderdeel van RTOS proting code waar taak schakelaar is gedaan.Dus SP wordt gebruikt legaal.Van de andere kant van de functie kan niet worden gewoon herschreven zonder modificatie zoals asm bestand en gekoppeld aan c-bestanden als de macro wordt als inline-bestand dat betekent geen stack gebruik op functieaanroep.en er is een andere reden - verschillende registreren voor gebruik fucntion oproepen vanwege verschillende compilers.

 

Welcome to EDABoard.com

Sponsor

Back
Top