在阵列中存储200kb的数据?

时间:2017-06-30 14:49:35

标签: c++ arrays memory-management texas-instruments

我对嵌入式应用程序的编程很新(除了一些Arduino的东西),我正在使用德州仪器的CC3220SF微控制器。

目前我有一个程序不断轮询设备并存储结果。我想存储100,000个这样的样本(每个是2个字节),给我200kb的数据存储。我不确定我应该怎么做,因为试图制作一个大小为[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;
}

这种^^^方式适用于小型阵列,但就像我说我需要存储200kb ......我知道CC3220SF有512kb可供使用,我该如何最好地写入/读取?

尊敬, -James

1 个答案:

答案 0 :(得分:3)

有可能将static放在那个庞大的阵列前面使它运作起来。

嵌入式系统的大多数编译器都会将函数局部变量放在CPU堆栈上,但static变量具有“静态存储持续时间”,并且基本上表现为全局变量。链接器确切地知道那些需要多少内存,并试图使它们适合它们。

当然,static会使函数不可重入,但无论如何你无法在256 kB设备上分配两个200 kB阵列。