7

10K の RAM を搭載した MSP430 チップを使用しています。RAM の使用量が 5k を超えると、main() に到達できなくなります。初期化コードは__data20_memzero、使用されている RAM スペースをクリアするために呼び出します。

__data20_memzero ソース

メモリをインクリメントし、R14 = R12 までバイトをクリアするように見えます。R14 は 0x34B4 です。ただし、再起動して最初からやり直す前の R12 の最大値は 0x2c86 です。デバッガーを介してウォッチドッグを手動でオフにすると、正常に動作し始めました。これが普通とは思えません。この問題を回避する方法はありますか?

4

2 に答える 2

6

これを投稿した直後に、このアプリケーションノートを見つけました

http://supp.iar.com/Support/?note=37778&from=search+result

アプリケーションにグローバルに初期化されたデータが大量 (4k 以上) ある場合、cstartup 内の初期化は、ウォッチドッグがタイムアウトする (そしてデバイスがリセットされる) 前に終了しません。

The solution

The Watchdog timer must be turned off before the initialization phase. This should preferably be done in __low_level_init.

The steps (for F1610, F1611 or F1612)
Copy of the file "low_level_init.c" (from ...\430\src\lib\) to your project directory.
Add the copied "low_level_init.c" file to your project.
Edit your copy of the "low_level_init.c" file
In the file you need to add, either...

#include <msp430x16x.h>

...or add...

#include <io430x16x.h>

You should add, in the __low_level_init() function.

WDTCTL = WDTPW + WDTHOLD;
于 2013-07-28T07:22:34.363 に答える