いろいろなテクニック.Nucleo と DISCO-F746 用.

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Sun Oct 15 11:41:48 2017 +0000
Revision:
0:bb939e0bc6e2
Child:
1:bbb9f0c3e523
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:bb939e0bc6e2 1 //------------------------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 2 // See "https://developer.mbed.org/users/okini3939/notebook/mbed256_memory/"
MikamiUitOpen 0:bb939e0bc6e2 3 //
MikamiUitOpen 0:bb939e0bc6e2 4 // このプログラムは,STM 社のマイコンを使用し,mbed ライブラリが
MikamiUitOpen 0:bb939e0bc6e2 5 // リビジョン 153 の場合に有効なことを確認している.それ以外は未確認
MikamiUitOpen 0:bb939e0bc6e2 6 //
MikamiUitOpen 0:bb939e0bc6e2 7 // new 演算子でメモリ割り当てに失敗した場合はターミナルに
MikamiUitOpen 0:bb939e0bc6e2 8 // "Operator new[] out of memory" というメッセージが表示される
MikamiUitOpen 0:bb939e0bc6e2 9 //
MikamiUitOpen 0:bb939e0bc6e2 10 // 割り当てに失敗した段階で上記のメッセージが出てプログラムが終了するので,
MikamiUitOpen 0:bb939e0bc6e2 11 // if 文以下は実行されない.
MikamiUitOpen 0:bb939e0bc6e2 12 //
MikamiUitOpen 0:bb939e0bc6e2 13 // set_new_handler() は働いていないようである
MikamiUitOpen 0:bb939e0bc6e2 14 //
MikamiUitOpen 0:bb939e0bc6e2 15 // 2017/10/15, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:bb939e0bc6e2 16 //------------------------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 17 //#include <new> // set_new_handler() を使う場合でも不要
MikamiUitOpen 0:bb939e0bc6e2 18
MikamiUitOpen 0:bb939e0bc6e2 19 /*
MikamiUitOpen 0:bb939e0bc6e2 20 void MemoryAssignError()
MikamiUitOpen 0:bb939e0bc6e2 21 {
MikamiUitOpen 0:bb939e0bc6e2 22 printf("Can't allocate to memory!\r\n");
MikamiUitOpen 0:bb939e0bc6e2 23 while(true);
MikamiUitOpen 0:bb939e0bc6e2 24 }
MikamiUitOpen 0:bb939e0bc6e2 25 */
MikamiUitOpen 0:bb939e0bc6e2 26
MikamiUitOpen 0:bb939e0bc6e2 27 void MyNew()
MikamiUitOpen 0:bb939e0bc6e2 28 {
MikamiUitOpen 0:bb939e0bc6e2 29 // set_new_handler(MemoryAssignError);
MikamiUitOpen 0:bb939e0bc6e2 30
MikamiUitOpen 0:bb939e0bc6e2 31 uint8_t *ptr;
MikamiUitOpen 0:bb939e0bc6e2 32 // ptr = new uint8_t[100000]; // OK
MikamiUitOpen 0:bb939e0bc6e2 33 ptr = new uint8_t[1000000]; // 大きすぎて割り当てに失敗する
MikamiUitOpen 0:bb939e0bc6e2 34
MikamiUitOpen 0:bb939e0bc6e2 35 if (ptr == NULL)
MikamiUitOpen 0:bb939e0bc6e2 36 printf("\r\nMemory allocation error\r\n");
MikamiUitOpen 0:bb939e0bc6e2 37 else
MikamiUitOpen 0:bb939e0bc6e2 38 {
MikamiUitOpen 0:bb939e0bc6e2 39 printf("\r\nptr = 0x%08x\r\n", ptr);
MikamiUitOpen 0:bb939e0bc6e2 40 delete[] ptr;
MikamiUitOpen 0:bb939e0bc6e2 41 printf("正常に終了.\r\n");
MikamiUitOpen 0:bb939e0bc6e2 42 }
MikamiUitOpen 0:bb939e0bc6e2 43 }