diff --git a/armsrc/apps.h b/armsrc/apps.h index c3d3bae12..5ecd1753c 100644 --- a/armsrc/apps.h +++ b/armsrc/apps.h @@ -20,6 +20,10 @@ typedef unsigned char byte_t; // maybe processed in some way. uint32_t BigBuf[8000]; +// This may be used (sparingly) to declare a function to be copied to +// and executed from RAM +#define RAMFUNC __attribute((long_call, section(".ramfunc"))) + /// appmain.h void ReadMem(int addr); void __attribute__((noreturn)) AppMain(void); @@ -97,7 +101,7 @@ void ReadSTMemoryIso14443(uint32_t parameter,uint32_t dwLast); void SnoopIso14443(void); /// iso14443a.h -void SnoopIso14443a(void); +void RAMFUNC SnoopIso14443a(void); void SimulateIso14443aTag(int tagType, int TagUid); // ## simulate iso14443a tag void ReaderIso14443a(UsbCommand * c, UsbCommand * ack); void ReaderMifare(uint32_t parameter); diff --git a/armsrc/iso14443a.c b/armsrc/iso14443a.c index c3f6647b4..dd0f2689a 100644 --- a/armsrc/iso14443a.c +++ b/armsrc/iso14443a.c @@ -146,7 +146,7 @@ static struct { uint8_t *output; } Uart; -static int MillerDecoding(int bit) +static RAMFUNC int MillerDecoding(int bit) { int error = 0; int bitright; @@ -410,7 +410,7 @@ static struct { uint8_t *output; } Demod; -static int ManchesterDecoding(int v) +static RAMFUNC int ManchesterDecoding(int v) { int bit; int modulation; @@ -607,7 +607,7 @@ static int ManchesterDecoding(int v) // triggering so that we start recording at the point that the tag is moved // near the reader. //----------------------------------------------------------------------------- -void SnoopIso14443a(void) +void RAMFUNC SnoopIso14443a(void) { // #define RECV_CMD_OFFSET 2032 // original (working as of 21/2/09) values // #define RECV_RES_OFFSET 2096 // original (working as of 21/2/09) values diff --git a/armsrc/ldscript b/armsrc/ldscript index 70be53b54..dcb04bf09 100644 --- a/armsrc/ldscript +++ b/armsrc/ldscript @@ -47,6 +47,7 @@ SECTIONS .data : { *(.data) *(.data.*) + *(.ramfunc) . = ALIGN(4); } >ram AT>osimage :data