在rtthread中,自带了内存设置函数rt_memset,其目的是将某段内存的内容设置为指定的数值。该函数接受三个参数:源内存地址s,要设置的值c,以及要设置的长度count。在函数中,首先判断了是否使用了RT_USING_TINY_SIZE宏,如果使用了,则通过循环逐个设置内存的值,然后返回源内存地址。
如果没有使用RT_USING_TINY_SIZE宏,则会根据内存对齐情况和设置的值大小进行不同的处理。如果设置的长度大于等于一个块的大小并且内存地址是块对齐的,就会使用较高效的方式进行设置,否则会通过逐个字节设置的方式来完成设置操作。
下面是这个函数的具体内容:
/**
* This function will set the content of memory to specified value
*
* @param s the address of source memory
* @param c the value shall be set in content
* @param count the copied length
*
* @return the address of source memory
*/
void *rt_memset(void *s, int c, rt_ubase_t count)
{
#ifdef RT_USING_TINY_SIZE
char *xs = (char *)s;
while (count--)
*xs++ = c;
return s;
#else
#define LBLOCKSIZE (sizeof(rt_int32_t))
#define UNALIGNED(X) ((rt_int32_t)X & (LBLOCKSIZE - 1))
#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE)
int i;
char *m = (char *)s;
rt_uint32_t buffer;
rt_uint32_t *aligned_addr;
rt_uint32_t d = c &
RT-Thread内存设置优化

最低0.47元/天 解锁文章
1645

被折叠的 条评论
为什么被折叠?



