いろいろなテクニック.Nucleo と DISCO-F746 用.
Dependencies: Array_Matrix mbed
MyNew.hpp@0:bb939e0bc6e2, 2017-10-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sun Oct 15 11:41:48 2017 +0000
- Revision:
- 0:bb939e0bc6e2
- Child:
- 1:bbb9f0c3e523
1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |