Sida 1 av 1

Byta RAM-bank med LPC1768 för FreeRTOS

Postat: 14 augusti 2011, 15:04:25
av Korken
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:

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;
Och så ändrar jag detta till:

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;
Och i linker-scriptet:

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
  ...
}
Ä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