我觉得代码中阴影部分中应该是
int index=offset/memblksize[memx]+1;
举个例子
在外部flash中 __align(32) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));
外部flash的首地址为0x68000000,每个块的大小为32字节,块1的地址范围为:0x68000000-0x68000020-1,
块2的
地址范围为:0x68000020-0x68000040-1,
块3的地址范围为:0x68000040-0x68000060-1,
块4的地址范围为:0x68000060-0x68000080-1,
..........................................................................
任取一个地址0x68000050,偏移量为0x50=80, 这个地址应该落在块3中,根据程序中的运算 int index=offset/memblksize[memx]=80/32=2,按照计算的结果该地址落在块2中。在这种情况下int nmemb=mallco_dev.memmap[memx][index]; //内存块数量,获得的内存块的数量并不是要释放的内存块的数量,而是紧邻释放内存块的低地址内存块的数量。按照例程执行下来,是释放内存块的前面一个内存块开始,
紧邻释放内存块的低地址内存块的数量。这样,不需要释放的内存块释放了一个;假设需要释放的内存块的个数为n,相邻低地址的内存块为m,如果n+1=m,需要释放的内存块被全部释放,如果n+1<m,需要释放的内存块紧邻高低址内存也被释放一部分;如果n+1>m,需要释放的内存块部分被释放。
我觉得应该是
int index=offset/memblksize[memx]+1;
纯属个人意见,对与不对,还各位大神多多指正!
一周热门 更多>