1

我现在并且一直在为 Pebble 开发软件。这是我第一次使用C,我正在努力弄清楚如何在程序中管理信息/数据。我习惯于拥有包含数千个条目的多维数组。使用 Pebble,我们非常有限。

我可以谈论我的程序的要求,但很高兴看到任何关于该主题的讨论。

我正在构建的应用程序需要在每次按下按钮时存储正在运行的数据源。理想情况下,我想在每次按下时存储一个二进制值和两个小整数值。我想利用 Pebble 上的本地存储,每个数组限制为 256 个字节,这带来了挑战。

我考虑过使用自定义结构 - 并拥有多个数组,确保检查每个数组不超过 256 字节标记。管理起来似乎真的很混乱和复杂......我是否遗漏了一些基本简单的东西,还是需要这么复杂?

目前我的程序只存储二进制值,我根本不关心小整数值。

4

1 回答 1

2

也许你可以定义如下结构:

#pragma pack(1)
typedef struct STREAM_RECORD_S
   {
   unsigned short uint16;        // The uint16 field will store a number from 0-65535
   unsigned short uint15 : 15;   // The uint15 field will store a number from 0-32767
   unsigned short binary : 1;    // The binary field will store a number from 0-1
   } STREAM_RECORD_T;

typedef struct STREAM_BLOCK_S
   {
   struct STREAM_BLOCK_S *nextBlock;  // Store a pointer to the next block.
   STREAM_RECORD_T        records[1]; // Array of records for this block. 
   } STREAM_BLOCK_T;
#pragma pack(0);

数组中的实际记录数取决于 nextBlock 指针的大小。例如,如果您使用 32 位寻址运行,则 nextBlock 大小可能是 4 个字节;16 位寻址时为 2 个字节,64 位寻址时为 8 个字节。(我不知道 ARM Cortex-M3 处理器上的指针大小)。

所以,recordsPerArray = (256 - sizeof(nextBlock)) / sizeof(STREAM_RECORD_T);

于 2014-04-23T01:28:37.617 回答