GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるねWebコンパイラの "LYCHEE - OpenCVプログラミングテンプレート(Ver V1.03.02)"をベースに、顔認識をサンプルプログラムベースで改造して使っていますが、
走らせると以下のエラーがでてとまってしまい困っています。
------------------------------------------------------------------------------------------------OpenCV Error: Insufficient memory (Failed to allocate 382976 bytes) in OutOfMemoryError, file ../core/src/alloc.cpp, line 52OpenCV Error: Assertion failed (u != 0) in create, file ../core/src/matrix.cpp, line 433------------------------------------------------------------------------------------------------
改造といっても、 camera_if.cpp / face_detector.cpp 辺りの関数単位で main.c に持ってきて改造しているレベルです。ほぼ同じ処理に戻しても見たのですが、症状は変わりませんでした。
エラーの内容からは、malloc でヒープを確保でなくて落ちているというように見えるのですが、リンカースクリプトgr_common/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_GR_LYCHEE/device/TOOLCHAIN_GCC_ARM/RZA1LU.ldみても、特にサイズ指定していないのでよく見ていくと
gr_common/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1XX/TARGET_GR_LYCHEE/device/TOOLCHAIN_GCC_ARM/startup_RZ1ALU.Sの中に以下の記述があったので
@ Heap Configuration
.EQU Heap_Size , 0x00080000
.section .heap .align 3 .globl __HeapBase .globl __HeapLimit__HeapBase: .space Heap_Size .size __HeapBase, . - __HeapBase__HeapLimit: .size __HeapLimit, . - __HeapLimit 試しに 0x00090000 にしてみたのですが、 map 上以下のようになって、変わっているように見えません。
.heap 0x2012ed98 0x80000 0x2012ed98 __end__ = . 0x2012ed98 end = __end__ *(.heap*) .heap 0x2012ed98 0x80000 ./gr_common/gr_common.a(startup_RZ1ALU.o) 0x2012ed98 __HeapBase
.stack_dummy 0x2012ed98 0x17300 *(.stack*) .stack 0x2012ed98 0x17300 ./gr_common/gr_common.a(startup_RZ1ALU.o) 0x20200000 __StackTop = (ORIGIN (RAM) + LENGTH (RAM)) 0x20200000 _estack = __StackTop 0x201e8d00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy)) 0x201e8d00 __HeapLimit = __StackLimit 0x20200000 PROVIDE (__stack, __StackTop) 0x00000001 ASSERT ((__StackLimit >= __HeapLimit), region RAM overflowed with stack) 0x181862c0 __etext2 = (__etext + SIZEOF (.data))
もちろん、gr_common/gr_common.a は削除してからビルドしています。
また、試しに以下の CannyEdge サンプルからgithub.com/.../GR-Boards_CannyEdge_DisplayAppmain.c だけをこのテンプレートベースの main.c にコピペて、Display のコンパイルスイッチ ON にしたもので試してみたのですが、やはり、スタック溢れ系のエラーとなり、 main_task のスタックを増やすと malloc で落ちるようです。
そもそも、誰も騒いでいないのでスケッチベースでは動いていると思っていて、ヒープサイズをかえる必要はないのではと思っています。以前のテンプレートバージョンが古かったときの OpenCV のサンプルベースのプロジェクトと差分をとってみたところ、mbedOS 周りを含めてかなりの差分があります。今のプロジェクトが整合性が取れていないのかとも思っているのですが…
ライブラリ側なので、奥のほうまで追いにくいのですが、何か対応策ありますでしょうか?