From 6c1e2d95f42c4178f8185a31b27f6bd28a917ddc Mon Sep 17 00:00:00 2001 From: "henryk@ploetzli.ch" Date: Fri, 8 Oct 2010 10:23:04 +0000 Subject: [PATCH] Add a ramfunc section in the data segment, which will be copied to ram on startup. Add a RAMFUNC function attribute to have functions copied to and run from ram. Fix "blew circular buffer" error in hf 14a snoop by executing SnoopIso14443a from ram (eats about 3.5k of ram) --- armsrc/apps.h | 6 +++++- armsrc/iso14443a.c | 6 +++--- armsrc/ldscript | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) 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