如何在年历上有效地存储任务信息

时间:2015-04-16 20:19:29

标签: c algorithm memory-efficient

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

       | 1st Jan | 2nd Jan | 3rd Jan | .. | 31 Dec |
00:30  |  40 (%) | 40      |  45     | .. |   50   |
01:48  |  48     | 47      |  55     | .. |   33   |
02:26  |  64     | 64      |  60     | .. |   68   |
..     |  ..     | ..      |  ..     | .. |   ..   |
22:15  | 79      | 82      |  89     | .. |   100  |
23:37  | 100     | 100     |  97     | .. |   100  |

我认为将数据存储为:time [in minutes], 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小时的timeLevel_t(3字节)定义将是每天72字节数据,那么365天的数据将是26280字节数据。

你会建议一个更节省内存的算法来存储日历年的信息(程序会每年更新一次,以便考虑2月29日)吗?

另外?制作二维数组以在1D上存储日信息,在另一个维度上存储timeLevel_t会更好吗?

1 个答案:

答案 0 :(得分:0)

您必须存储其他信息,例如#day / month,或假设每个31,并浪费几个字节。

这一切都取决于你的痛点。你可以打包更多的字节,不会浪费任何比特,代价是代码复杂性和计算时间。

如果存储空间非常宝贵,您可以将所有内容存储在一个巨大的1D阵列中,并将额外的位用于其他内容。 例如,第11位可以指示"第二天",第12和第34;下个月"然后你可以抓取阵列并查找一年中的任何一天。对于各种恶作剧,你还有另外4位。

请详细说明问题。