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

Dependencies:   Array_Matrix mbed

Committer:
MikamiUitOpen
Date:
Wed Apr 10 06:32:33 2019 +0000
Revision:
1:bbb9f0c3e523
Parent:
0:bb939e0bc6e2
2

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 1:bbb9f0c3e523 5 // リビジョン 153, 172 の場合に有効なことを確認している.それ以外は未確認
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 1:bbb9f0c3e523 15 // 2019/04/10, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 0:bb939e0bc6e2 16 //------------------------------------------------------------------------------
MikamiUitOpen 0:bb939e0bc6e2 17 //#include <new> // set_new_handler() を使う場合でも不要
MikamiUitOpen 0:bb939e0bc6e2 18
MikamiUitOpen 0:bb939e0bc6e2 19 void MemoryAssignError()
MikamiUitOpen 0:bb939e0bc6e2 20 {
MikamiUitOpen 0:bb939e0bc6e2 21 printf("Can't allocate to memory!\r\n");
MikamiUitOpen 0:bb939e0bc6e2 22 while(true);
MikamiUitOpen 0:bb939e0bc6e2 23 }
MikamiUitOpen 0:bb939e0bc6e2 24
MikamiUitOpen 0:bb939e0bc6e2 25 void MyNew()
MikamiUitOpen 0:bb939e0bc6e2 26 {
MikamiUitOpen 1:bbb9f0c3e523 27 set_new_handler(MemoryAssignError);
MikamiUitOpen 0:bb939e0bc6e2 28
MikamiUitOpen 0:bb939e0bc6e2 29 uint8_t *ptr;
MikamiUitOpen 0:bb939e0bc6e2 30 // ptr = new uint8_t[100000]; // OK
MikamiUitOpen 0:bb939e0bc6e2 31 ptr = new uint8_t[1000000]; // 大きすぎて割り当てに失敗する
MikamiUitOpen 0:bb939e0bc6e2 32
MikamiUitOpen 0:bb939e0bc6e2 33 if (ptr == NULL)
MikamiUitOpen 0:bb939e0bc6e2 34 printf("\r\nMemory allocation error\r\n");
MikamiUitOpen 0:bb939e0bc6e2 35 else
MikamiUitOpen 0:bb939e0bc6e2 36 {
MikamiUitOpen 0:bb939e0bc6e2 37 printf("\r\nptr = 0x%08x\r\n", ptr);
MikamiUitOpen 0:bb939e0bc6e2 38 delete[] ptr;
MikamiUitOpen 0:bb939e0bc6e2 39 printf("正常に終了.\r\n");
MikamiUitOpen 0:bb939e0bc6e2 40 }
MikamiUitOpen 0:bb939e0bc6e2 41 }