|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
想请问关于处理未对齐起始字节段(handle unaligned start bytes)中,由wp = (addr & ~1)可以看出wp与addr最多相差1,那下面if中为什么还要用循环呢?麻烦哪位热心善良的高手给解释一下这段代码以及函数的几个形参吧~~感激不尽~~!!
int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt){
ulong cp, wp;
ushort data;
int l; int i, rc;
wp = (addr & ~1); /* get lower word aligned address */
/* * handle unaligned start bytes */
if ((l = addr - wp) != 0)
{
data = 0;
for (i = 0, cp = wp; i < l; ++i, ++cp) { data = (data >> 8) | (*(uchar *) cp << 8); }
for (; i < 2 && cnt > 0; ++i) { data = (data >> 8) | (*src++ << 8); --cnt; ++cp; }
for (; cnt == 0 && i < 2; ++i, ++cp) { data = (data >> 8) | (*(uchar *) cp << 8); }
if ((rc = write_word (info, wp, data)) != 0) { return (rc); } wp += 2; }
……} |
|