メモリについて
main開始直後でもmallocで確保出来るのは25Kほど。
しょぼん(´・ω・`)としていたら、twitterで教えてもらったのでメモ。
参考:
http://twitter.com/tedd_okano/status/58525435058851841
http://mbed.org/forum/mbed/topic/604/?page=1#comment-3025
つまり
mbedは64KのRAMが積まれているが、メインメモリとしては32Kしか使えない。
残りはUSB/Ethernet用にそれぞれ16K予約されていて、この部分を使うには__attribute__
指定でグローバルメモリとして確保する必要がある。
参考:
http://mbed.org/projects/libraries/svn/mbed/trunk/LPC1768/LPC1768.sct
AHBSRAM0 がUSB用
AHBSRAM1 がEthernet用
ちなみに、CANRAMを指定すると起動しなくなった
#include "mbed.h" DigitalOut myled(LED1); unsigned char usbArea[1024] __attribute__((section("AHBSRAM0"))); unsigned char ethArea[1024] __attribute__((section("AHBSRAM1"))); int main() { void *p; int i=0; while(1) { p = malloc(i); if (p == NULL) break; free(p); i++; } printf("%d bytes can be used.\n", i - 1); printf("Start Address(usbArea) 0x%08X\n", usbArea); printf("Start Address(ethArea) 0x%08X\n", ethArea); while(1) { myled = 1; wait(0.2); myled = 0; wait(0.2); } }
結果
26188 bytes can be used.
Start Address(usbArea) 0x2007C000
Start Address(ethArea) 0x20080000
Please log in to post comments.