首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

高分求:以1024收,以2048存的算法,该怎么解决

2013-03-14 
高分求:以1024收,以2048存的算法store_block (unsigned block, uchar * src, unsigned len)这里tftp的处理

高分求:以1024收,以2048存的算法
store_block (unsigned block, uchar * src, unsigned len)这里tftp的处理函数,len的长度是1024,也是说tftp每接收1024个字节就会调用这个函数。这个函数中我要把接收到的数据存起来(有点特殊的,是烧到Flash中)。由于硬件特性我必须2048个字节写进去。我怎么办。这个怎么算。做底层的对算来算去很头大。这个应该很简单,用一个全局变量为0。第一次时+1,先存到一个buffer[2048]的前1024个字节中,第二次时+1。判断这个全局变量为2了,就把这个buffer写到flash中。然后清零这个buffer[2048],清零这个全局变量。这是大概想出来的方法。不知道好不好。算法好的,帮我一下啦。100分送上。
[解决办法]
你想的算法就可以啊

[解决办法]
char buffer [2048];
char* pbuffer [2] = {&buffer[0],&buffer[1024]};
size_t curr = 0;
调用 store_block,写入 pbuffer[curr] 指向的缓存。
然后 curr = 1-curr; 来回打乒乓球。
每调用两次 (1024*2) store_block 存储一次 (2048)。
[解决办法]
你的算法基本上是OK的,这里提供一个改进的思路:
1、定义一块buffer[2048];
2、定义一个计数器counter;
3、每次store_block调用的时候,首先从buffer[(counter & 1) << 10]开始拷贝数据;
4、每次store_block调用的时候,然后判断counter & 1不为0的话,那么就擦除FLASH,并写入buffer中的数据,写入后buffer没有必要清零的;
5、每次store_block调用的时候,最后counter++。

引用:
store_block (unsigned block, uchar * src, unsigned len)这里tftp的处理函数,len的长度是1024,也是说tftp每接收1024个字节就会调用这个函数。这个函数中我要把接收到的数据存起来(有点特殊的,是烧到Flash中)。由于硬件特性我必须2048个字节写进去。我怎么办。这个怎么算。做底层的对算来算去很头大。这个应……

热点排行