我有一个嵌入式系统(没有任何操作系统的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会更好吗?
答案 0 :(得分:0)
您必须存储其他信息,例如#day / month,或假设每个31,并浪费几个字节。
这一切都取决于你的痛点。你可以打包更多的字节,不会浪费任何比特,代价是代码复杂性和计算时间。
如果存储空间非常宝贵,您可以将所有内容存储在一个巨大的1D阵列中,并将额外的位用于其他内容。 例如,第11位可以指示"第二天",第12和第34;下个月"然后你可以抓取阵列并查找一年中的任何一天。对于各种恶作剧,你还有另外4位。
请详细说明问题。