Any way to access the other 32KB?
Topic last updated
17 May 2013, by
Toby Baumgartner.
7 replies
32KB,
memory,
RAM
The NXP LPC1768 processor has 64KB of RAM, but apparently 32KB is dedicated RAM for some peripherals (Ethernet, USB and CAN). I’m not using any of those so I was wondering if there is any way to reallocate some of that for standard memory?
I really need about 55KB of RAM to maintain the data access speeds for my application. Thanks for any help?
Replies
You can see the memory layout in LPC1768.sct. To use the extra regions, you can place your arrays using the section names:
static char buf1[0x2000] __attribute__((section("AHBSRAM0")));
But why do you need 55KB? There might be better ways to solve your issues.
Thank you for your response; I’ll do some testing to see if I can split my data into those regions.
I’m opening and processing small BMP image files (96x96-24Bit), but I need to apply some transformations as quickly as possible. If I open and process the file directly from flash (or micro SD card) it takes about 320mS, however if I load the same file into and process from RAM, it only takes about 1.9mS. I’m trying to stay under 4mS. I’m confident I could figure some other ways to around the issue, but the easiest is just storing all of the data in RAM.
The other way is, so long as you know nothing else is using AHBSRAM0 or AHBSRAM1 you can declare a pointer thus:-
char *buf = (char *)(0x2007C000);
because the two RAM banks are next to each other in the memory map you now have a 32k buffer thus:
buf[0] to buf[0x7FFF]
You can of course use pointers like this to "chunk it up" however you like. Also, using this method means the build stats (shown on the right of the compiler screen after a build) don't show this memory as being used. But of course, it is in your case.
I added some code to split my array between the main memory and this expanded area (0x2007C000). It seems to be working well!
Thanks for your help.
Hi,
I know this is a bit of an older post but I also want more memory!
I wrote this test code...
#include "mbed.h"
Serial pc(USBTX,USBRX);
#define SIZE 19200
int main() {
pc.printf("\n\r Extra memory test started...");
char memory [SIZE];
char *more_memory = (char *)(0x2007C000);
for (int i=0; i<SIZE; i++) {
memory[i] = 0x55;
more_memory[i] = 0xAA;
}
pc.printf("\n\r Data written, reading back...");
for (int i=0; i<SIZE; i++) {
pc.printf(" %X, %X,",memory[i],more_memory[i]);
}
pc.printf("\n\r Test ended...");
}
Which seems to work well. But I am a bit worried about Andy's comment...
The other way is, so long as you know nothing else is using AHBSRAM0 or AHBSRAM1 you can declare a pointer thus:-
I had a look through the datasheet and can't find AHBSRAM0 or AHBSRAM1. What are they? Also does the code above look OK? Is getting an extra 32kb of RAM this easy?
Regards
Martin
You can take a look at this post I made earlier this week in another thread. It shows how to see how much memory has been used in each bank and how to ask the compiler/linker to place variables into these other banks.
Hope that helps,
Adam
I've been trying to use the ram in AHBSRAM0 or AHBSRAM1 but doing so causes crashes.
I am using Ethernet, but not USB or CAN, so theoretically one of those banks should be free, however when I use either one, the thread crashes.
The code posted by Adam Green (thanks btw) yields the following results:
Main RAM = 14536
RAM0 = 16384
RAM1 = 11220
Can anyone tell me why both SRAM banks appear to be used?
regards,
Adrian.
Please log in to post a reply.
The NXP LPC1768 processor has 64KB of RAM, but apparently 32KB is dedicated RAM for some peripherals (Ethernet, USB and CAN). I’m not using any of those so I was wondering if there is any way to reallocate some of that for standard memory?
I really need about 55KB of RAM to maintain the data access speeds for my application. Thanks for any help?