2017-06-30 17 views
1

私は組み込みアプリケーションのプログラミングにはかなり新しい(Arduinoのもの以外にも)、私はTexas InstrumentsのCC3220SFマイクロコントローラを使って作業しています。配列に200kbのデータを保存していますか?

現在、私は常にデバイスをポーリングして結果を保存しているプログラムを持っています。私はこれらのサンプル(それぞれ2バイト)を100,000個保存して、200 KBのデータを保存したいと思います。私は実際にこのようなことをやっていかなくてはならないと思っています。サイズの配列[100] [1000]をデバイスにクラッシュさせるだけです。

このデータを後で使用するために保存するにはどうすればよいですか?

#define MAX_ARR_LENGTH     1000 
#define MAX_ARR_DEPTH     100 

// Later in the collection function: 
uint16_t measurmentsArr[MAX_ARR_DEPTH][MAX_ARR_LENGTH] = {0}; 
unsigned int arr_length = 0; 
unsigned int arr_depth = 0; 

// And later, after a data point has 
// been verified as useful: 
if (arr_length < MAX_ARR_LENGTH){ 
    measurmentsArr[arr_depth][arr_length++] = angle; 
} else { 
    arr_length = 0; 
    measurmentsArr[arr_depth++][arr_length] = angle; 
} 

この^^^方法は、小さな配列のために動作しますが、私は200キロバイト保存する必要が言ったように...私は最高の書き込み/それに読まないか、CC3220SFを使用するために512キロバイトを持って知っていますか?

謹んで、 -James

+0

スタックの大きさによってスタックがオーバーフローする可能性があります。サイズがコンパイル時にわかっていても、ヒープ割り当てにはより安全です。 – CoryKramer

+1

あなたのプラットフォームが動的メモリ割り当てをサポートしているなら、 'std :: vector > measurmentsArr {MAX_ARR_DEPTH};'を使うことをお勧めします。 – NathanOliver

+1

[datasheet](http://www.ti.com/product/CC3220/datasheet)は256kBのRAMしか要求していません。さらに、このプラットフォームでは、浮動小数点数は32ビット(それぞれ4バイト)で、400kBの配列サイズを生成します。 – doynax

答えて

2

チャンスはその巨大な配列の前でstaticを貼り付けることはそれを動作させていることです。

組み込みシステム用のコンパイラのほとんどは、CPUスタックに関数ローカル変数を配置しますが、static変数は静的な記憶期間を持ち、本質的にグローバルのように動作します。リンカーは、必要なメモリ量を正確に把握しており、それらを適合させようとします。

もちろん、staticは機能を再入可能にしませんが、256 kBデバイスに2つの200 kBアレイを割り当てることはできません。

関連する問題