C 在嵌入式系统中存储大整数/值
我正在开发一个嵌入式系统,可以测试大量的电线(多达360根)——本质上是一个连续性检查系统。系统通过在测试向量中计时并读取另一端的输出来工作。然后将输出与存储的结果(存储在SD卡上)进行比较,以确定输出应该是什么。测试向量只是一个移动向量,因此不需要将它们存储在任何地方。这个过程有点像如下所示:C 在嵌入式系统中存储大整数/值,c,embedded,avr,avr-gcc,C,Embedded,Avr,Avr Gcc,我正在开发一个嵌入式系统,可以测试大量的电线(多达360根)——本质上是一个连续性检查系统。系统通过在测试向量中计时并读取另一端的输出来工作。然后将输出与存储的结果(存储在SD卡上)进行比较,以确定输出应该是什么。测试向量只是一个移动向量,因此不需要将它们存储在任何地方。这个过程有点像如下所示: 时钟输出测试向量(步行向量) 读入输出测试向量 从SD卡读取相应的输出测试向量,告诉输出向量应该是什么 比较步骤2和步骤3中的测试向量 在单独的数组中记录错误/故障 除非检查了所有导线,否则继续返回步骤
我需要存储任何传统变量类型都无法表示的大值。目前我打算将这些值存储在一个位数组中。在SD卡的文本文件中存储这些值的最佳方法是什么?这些不是整数值,而是位图;它们没有算术意义。您所建议的只是一个长度为360/8的字节数组,与“大整数”完全无关。然而,一些更合适的数据结构或表示可能是可能的
如果测试向量是360中的单个位,那么为每个向量存储360位既低效又不必要,值0到359足以明确定义每个向量。如果正确的输出也是单个位,那么也可以将其存储为位索引,如果不是,则可以将其存储为应设置的每个位的索引列表,具有一些sentinel值>=360,或者为什么首先要将二进制数据存储为文本?没有可移植性或可读性要求。例如,
fwrite(array,sizeof(array),file)
有什么问题吗?如果我错了,请纠正我:您需要从SD读取测试样本,将其打卡,重新打卡,并将打卡结果与初始样本进行比较?另外,您将如何生成测试向量(存储在SD卡上的向量)?因为,如果您有一组固定的测试数据,那么将数据存储在程序内存中的一个简单数组中可能会更容易。您希望输入中同时有多少个“1”位?如果预期的输入是稀疏的,则只需存储“1”位的位置。因此,当我读入移位寄存器的全部内容时,我应该简单地记下“1”的位置并丢弃位数组?位数组中不会有太多的“1”,因此这种方法将非常有益。
byte_address = base_address + bit_index / 8 ;
bit_mask = 0x01 << (bit_index % 8) ;