1、 memset函数的实现方式
void m_memset(uint8_t *p,uint8_t fill,int num_bytes)
{
int num_ints;
while(num_bytes && ((sizeof(int)-1)&(uint32_t)p ) )
{
*p++ = fill;
num_bytes--;
}
num_ints = num_bytes/sizeof(uint32_t);
if (num_ints)
{
int fill_int;
int *p_int;
num_bytes &= (sizeof(int)-1);
if (sizeof(int) == 2)
{
fill_int = fill * 0x0101;
} else if (sizeof(int) == 4)
{
fill_int = fill * 0x01010101;
}
p_int = (int*)p;
while(num_ints > 4)
{
*p_int++ = fill_int;
*p_int++ = fill_int;
*p_int++ = fill_int;
*p_int++ = fill_int;
num_ints -= 4;
}
while(num_ints)
{
*p_int++ = fill_int;
num_ints--;
}
p = (uint8_t*)p_int;
}
while(num_bytes)
{
*p++ = fill;
num_bytes--;
}
}
2、 测试
uint8_t memset_test_buf[1024];
void crc_memset_functiong(uint8_t *p,uint8_t fill,uint32_t len)
{
uint32_t i;
for (i=0; i<len; i++)
{
if (memset_test_buf[i] != 0xaa)
break;
}
if (i>=(len-1))
{
PRINTF_HEAP_MEM("memset ok,size:%d\n",len);
}
}
int main(void)
{
memset(memset_test_buf,0x55,sizeof(memset_test_buf));
m_memset(memset_test_buf,0xaa,100);
crc_memset_functiong(memset_test_buf,0xaa,100);
memset(memset_test_buf,0x55,sizeof(memset_test_buf));
m_memset(memset_test_buf,0xaa,200);
crc_memset_functiong(memset_test_buf,0xaa,200);
memset(memset_test_buf,0x55,sizeof(memset_test_buf));
m_memset(memset_test_buf,0xaa,1024);
crc_memset_functiong(memset_test_buf,0xaa,1024);
}