我使用的是avr-8位单片机.它的RAM大小为2K。我必须声明并使用大小为16的int变量。这台机器上的int是两个字节。这个数组将消耗2*16*256 = 8k。这个大小是不可接受的,因为我只有2K内存。
我必须使用这个二维数组来存储正在写入的闪存页的状态。此数组将接受1或0值。1表示写了闪存中的页,0表示没有写入闪存中的页。
我正在寻找如何存储此状态的解决方案。不确定位字段在这里是否有用。
发布于 2015-08-22 11:31:55
如果只想使用数组存储布尔数据,则每个字段不需要整个16位。
要存储16*256位,只需要512字节。
以下示例中的makros可用于访问16xN缓冲区中的值:
#include <stdio.h>
#include <stdint.h>
#define BIT_ISSET(a, x, y) ((a[x] & (1<<y))!=0)
#define BIT_SET(a, x, y) (a[x] |= (1<<y))
#define BIT_CLEAR(a, x, y) (a[x] &= (1<<y)^0xffff)
int main()
{
uint16_t values[256] = {0};
// set some bits
BIT_SET(values, 3, 0);
BIT_SET(values, 3, 1);
BIT_SET(values, 3, 2);
BIT_SET(values, 3, 3);
BIT_SET(values, 3, 15);
// clear one of the previously set bits
BIT_CLEAR(values, 3, 2);
int i,j;
for (i=0;i<256;i++) { // 256 rows
for (j=0;j<16;j++) { // 16 columns
printf("%i", BIT_ISSET(values, i, j));
}
printf("\n");
}
return 0;
}发布于 2015-08-22 11:12:45
您可以使用位而不是数组。你只需要256*16位。所以256*16/8 = 384字节就足够了。您可以为此使用char数组并进行位操作以保存值:How do you set, clear, and toggle a single bit?
https://stackoverflow.com/questions/32155228
复制相似问题