Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在日历上高效地存储任务信息_C_Algorithm_Memory Efficient - Fatal编程技术网

C 如何在日历上高效地存储任务信息

C 如何在日历上高效地存储任务信息,c,algorithm,memory-efficient,C,Algorithm,Memory Efficient,我有一个嵌入式系统(没有任何操作系统的MCU),最终用户应该能够定义一年的系统级别(比例:0-100)。例如(时间x天矩阵): 我的想法是将数据存储为:time[分钟],sysLevel 上表是这样的: typedef struct{ uint16_t minute; //scale: 0 - 1440 min uint8_t level; //scale 0 - 100 (%) }timeLevel_t; //3 byte 然后将每天储存为 timeLevel_t first

我有一个嵌入式系统(没有任何操作系统的MCU),最终用户应该能够定义一年的系统级别(比例:0-100)。例如(时间x天矩阵):

我的想法是将数据存储为:
time[分钟],sysLevel
上表是这样的:

 typedef struct{
   uint16_t minute; //scale: 0 - 1440 min
   uint8_t level; //scale 0 - 100 (%)
 }timeLevel_t; //3 byte
然后将每天储存为

timeLevel_t firstJan[24] = { .. }; //it stores level changes, the array length doesn't have to be 24
timeLevel_t secJan[17] = { .. };
timeLevel_t thirdJan[20] = { .. };
...

(我将从CSV文件中获取数据,可能是出于主题,现在考虑这个问题)。 在最坏的情况下,系统预计会有每小时任务定义,因此24小时的时间级别(3字节)定义将是每天72字节的数据,然后365天的数据将是26280字节的数据

<> P>你会建议一个更有效记忆的算法来存储一个日历年的信息(程序每年更新一次,以便考虑2月29日)?< /P>
另外呢?制作一个二维数组以在1D上存储日信息,而在另一个维度上存储时间级别信息会更好吗?

您必须存储额外的信息,例如#天/月,或者假设每个数组31天,并浪费几个字节

这完全取决于你的痛点。您可以多打包字节以避免浪费位,但这会牺牲代码复杂性和计算时间

如果存储是绝对优质的,您可以将所有内容存储在一个巨大的1D阵列中,并将多余的位用于其他内容。 例如,第11位表示“下一天”,第12位表示“下一个月”,然后您可以对数组进行爬网并查找一年中的任何一天。你会有一个完整的其他4位各种恶作剧


请详细描述问题。

在我看来,数据源(您提到的CSV文件)是系统设计中非常重要的一部分。我认为您需要更具体地说明数据的存储位置(闪存/ram/网络驱动器)以及数据的访问方式。0-1440需要11位,0-100需要7位,因此每个条目需要18位。也许你可以把分辨率降低到2分钟2个百分点,把它压缩到16位?您还可以将4个18位条目打包成9字节,但这会使代码复杂化一点。我会将信息存储在MCU的内存中(超过2.62 kB),并通过网络更新数据(可以逐块(月)更新)。我认为理想的数据来源应该考虑不要失去问题的焦点(这是一年一次的过程)。我也在考虑压缩数据位,但找不到一种明智的方法。我想知道是否有可能压缩(编码)数据,只需解压缩(解码)当天的数据并删除旧数据。如果您有26280字节的未压缩数据和2620字节的存储数据,您需要10:1的压缩比。或者换句话说,您需要能够以平均2位/事件对每个事件进行编码。这不太可能发生。如果2.62kB的内存也用于代码和其他数据,那么情况就更糟了。
timeLevel_t firstJan[24] = { .. }; //it stores level changes, the array length doesn't have to be 24
timeLevel_t secJan[17] = { .. };
timeLevel_t thirdJan[20] = { .. };
...