Byta RAM-bank med LPC1768 för FreeRTOS
Postat: 14 augusti 2011, 15:04:25
Godagens!
Jag har en tanke jag vill testa, men är lite osäker på hur jag ska göra detta.
Processorn jag använder har totalt 64kB med SRAM uppdelat såhär:
SRAM Bank: 32k
AHBRAM0: 16k
AHBRAM1: 16k
Det jag vill göra är dela upp allt "vanligt" RAM och FreeRTOS RAM. Så FreeRTOS Heap ligger på hela AHBRAM0.
Så om man skapar globaler, static varibler och så vidare så läggs det på den första Banken.
Det jag då funderar på att göra är att skapa en section i linker-scriptet och lägga dess stack där.
För såhär ser koden som allokerar dess utrymme ut:
Och så ändrar jag detta till:
Och i linker-scriptet:
Är detta hur man ska göra detta? Eller är det något annat som man bör tänka på när man delar upp SRAM-banker?
Jag har aldrig gjort något liknande tidigare, så säg till om jag har gjort en tankevurpa.
Mvh
Emil
Jag har en tanke jag vill testa, men är lite osäker på hur jag ska göra detta.
Processorn jag använder har totalt 64kB med SRAM uppdelat såhär:
SRAM Bank: 32k
AHBRAM0: 16k
AHBRAM1: 16k
Det jag vill göra är dela upp allt "vanligt" RAM och FreeRTOS RAM. Så FreeRTOS Heap ligger på hela AHBRAM0.
Så om man skapar globaler, static varibler och så vidare så läggs det på den första Banken.
Det jag då funderar på att göra är att skapa en section i linker-scriptet och lägga dess stack där.
För såhär ser koden som allokerar dess utrymme ut:
Kod: Markera allt
static union xRTOS_HEAP
{
#if portBYTE_ALIGNMENT == 8
volatile portDOUBLE dDummy;
#else
volatile unsigned long ulDummy;
#endif
unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
} xHeap;
Kod: Markera allt
__attribute__((section(".freertosstack"))) static union xRTOS_HEAP
{
#if portBYTE_ALIGNMENT == 8
volatile portDOUBLE dDummy;
#else
volatile unsigned long ulDummy;
#endif
unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
} xHeap;
Kod: Markera allt
MEMORY
{
FLASH (rx) : ORIGIN = 0x0, LENGTH = 480k
EEMUL (rx) : ORIGIN = 0x78000, LENGTH = 32k
SRAM (rwx) : ORIGIN = 0x10000000, LENGTH = 32k
AHBRAM0 (rwx) : ORIGIN = 0x2007c000, LENGTH = 16k
AHBRAM1 (rwx) : ORIGIN = 0x20080000, LENGTH = 16k
}
SECTIONS
{
...
.freertosstack : {
*(.freertosstack)
} >AHBRAM0
...
}
Jag har aldrig gjort något liknande tidigare, så säg till om jag har gjort en tankevurpa.

Mvh
Emil