10 years, 1 month ago.

スタック・サイズはどのくらいですか?

main関数(初期スレッド?)のスタックサイズと、スレッド生成したときのデフォルトの スタックサイズを教えていただけますか?

こじょう

Question relating to:

Team for GR-PEACH Producer Meeting

2 Answers

10 years, 1 month ago.

Yuuichi Akagawaさん、調査およびアドバイスありがとうございます。 メモリマップに関してはご説明の通り、MBRZA1H.sctにて定義しております。 DEFAULT_STACK_SIZEは、アプリケーションが使用するマクロになります。 CMSIS-RTOS RTXが提供するデフォルトのスタックサイズについては、以下を参照してみてください。

CMSIS-RTOS RTXでのmainスレッドのスタックサイズ、 およびスレッド生成時のデフォルトのスタックサイズに関しては、 rtos\rtx\TARGET_CORTEX_A\RTX_Conf_CA.c にて設定しています。 使用しているCMSIS-RTOS RTXのVerは、V4.61です。

詳細は以下を参照ください。

http://www.keil.com/pack/doc/cmsis_rtx/_thread_config.html#StackConfig

注意が必要なのは、設定した各スタックサイズに関しては、4倍された値が設定されることです。 以下を参照ください。

http://www.keil.com/pack/doc/cmsis_rtx/_r_t_x__conf__c_m.html

<o>Default Thread stack size [bytes] <64-4096:8><#/4>

Accepted Answer

丁寧な説明ありがとうございます。おかげさまで、初期スレッドのスタックサイズを少し大きくとることに成功しました。

しかし、元のサイズ見てびっくり! 何が悲しくて10MバイトRAMのプロセッサにこんな小さなスタックなんだろう???

こじょう

posted by Kojo 01 Dec 2014
10 years, 1 month ago.

「RTOSの」ということであれば、2048バイトみたいですね。

mbed-rtos/rtx/TARGET_CORTEX_A/cmsis_os.h

// The stack space occupied is mainly dependent on the underling C standard library
#if defined(TOOLCHAIN_GCC) || defined(TOOLCHAIN_ARM_STD)
#    define WORDS_STACK_SIZE   512
#elif defined(TOOLCHAIN_ARM_MICRO)
#    define WORDS_STACK_SIZE   128
#endif

#define DEFAULT_STACK_SIZE         (WORDS_STACK_SIZE*4)

※念のため、printf("%d\n", DEFAULT_STACK_SIZE);してみたら2048でした。

この辺の情報が役に立つかもしれません。 mbed RTOS の メモ&Tips

メモリマップ的なモノは mbed-src/targets/cmsis/TARGET_RENESAS/TARGET_RZ_A1H/TOOLCHAIN_ARM_STD/MBRZA1J.sct ですかね。

さっそく、ありがとうございます。

メモリー10Mのボードにしては、ずいぶん小さいんですね。 スレッド生成時に気をつけて指定しないといけないですね。了解です。

こじょう

posted by Kojo 30 Nov 2014