Hallo, ich möchte die newlib in ein Projekt mit einem Cortex-M3
(LPC1768) integrieren. Als Toolchain habe ich dafür erstmal die von
Codesourcery (inklusive newlib) gewählt, die ohne newlib Unterstützung
auch funktioniert.
Im Linkerscript habe ich den Stack in den lokalen SRAM (32K) und den
Heap in den AHB SRAM (32K) gelegt:
1 | MEMORY {
|
2 | flash (rx) : ORIGIN = 0x00000000, LENGTH = 512K
|
3 | ram1 (rwx) : ORIGIN = 0x10000000, LENGTH = 32K
|
4 | ram2 (rwx) : ORIGIN = 0x2007C000, LENGTH = 32K
|
5 | }
|
6 |
|
7 | _stack_end = ORIGIN(ram1) + LENGTH(ram1);
|
8 |
|
9 | end = ORIGIN(ram2);
|
10 | __heap_start = ORIGIN(ram2);
|
11 | __heap_end = ORIGIN(ram2) + LENGTH(ram2);
|
Weiterhin habe ich die Funktion _sbrk() rudimentär implementiert:
1 | extern int __heap_start;
|
2 |
|
3 | caddr_t _sbrk (int incr) {
|
4 | static unsigned char *heap = NULL;
|
5 | unsigned char *prev_heap;
|
6 |
|
7 | if (heap == NULL) heap = (unsigned char *)&__heap_start;
|
8 | prev_heap = heap;
|
9 |
|
10 | heap += incr;
|
11 |
|
12 | return (caddr_t)prev_heap;
|
13 | }
|
Wenn ich das Ganze mit einem Demoprojekt übersetze und linke, kommen
keine Fehler. Leider bleibt der Controller jedoch stehen, sobald ich
eine Funktion (z.B. memset, malloc, etc.) aus der newlib aufrufe.
Habe ich noch etwas vergessen? Danke vorab.