在有限空间工作时有效存储信息的不同方法

时间:2014-04-22 22:29:38

标签: c pebble-watch pebble-sdk

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

我可以谈谈我的计划的要求,但很高兴看到有关该主题的任何形式的讨论。

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

我考虑过使用自定义结构 - 并且有多个数组,确保检查每个数组是否超过256字节标记。它只是看起来非常麻烦和复杂...我错过了一些从根本上说简单的东西,还是需要这么复杂?

目前我的程序只存储二进制值,而我根本没有打扰小整数值。

1 个答案:

答案 0 :(得分: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个字节;它将是2字节的16位寻址,或8字节的64位寻址。 (我不知道ARM Cortex-M3处理器上的指针大小。)

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