我一直在为Pebble开发软件。这是我第一次使用 C ,我正在努力探索如何管理程序中的信息/数据。 我习惯于能够拥有数千个条目的多维数组。 Pebble我们非常有限。
我可以谈谈我的计划的要求,但很高兴看到有关该主题的任何形式的讨论。
我正在构建的应用程序需要按下每个按钮来存储正在运行的数据源。理想情况下,我希望每次按下时存储一个二进制值和两个小整数值。我想利用Pebble上的本地存储,每个阵列限制为256字节,这是一个挑战。
我考虑过使用自定义结构 - 并且有多个数组,确保检查每个数组是否超过256字节标记。它只是看起来非常麻烦和复杂...我错过了一些从根本上说简单的东西,还是需要这么复杂?
目前我的程序只存储二进制值,而我根本没有打扰小整数值。
答案 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);