|
楼主 |
发表于 2008-3-3 18:15:32
|
显示全部楼层
感谢 ATmega32 cortex-m3 ,特将代码改进如下:
# define MEMORY_INITIAL(__ADDR,__LEN,__SYMBLE) \
{\
if ((__LEN) < 0xFF)\
{\
Small_Object_Initial((__ADDR),(__LEN),(__SYMBLE));\
}\
else if ((__LEN) < 0xFFFF)\
{\
Normal_Object_Initial((__ADDR),(__LEN),(__SYMBLE));\
}\
else\
{\
Large_Object_Initial((__ADDR),(__LEN),(__SYMBLE));\
}\
}
# define OBJECT_INITIAL(__OBJECT,__SYMBLE) MEMORY_INITIAL(&(__OBJECT),sizeof(__OBJECT),(__SYMBLE))
/***********************************************************
* 函数说明:对象初始化函数(小) *
* 输入: 对象指针,对象大小 *
* 输出: 对象指针 *
* 调用函数:无 *
***********************************************************/
void *Small_Object_Initial(void *pData,UINT8 chLength,UINT8 chSymble)
{
BYTE *p = pData;
if ((pData == NULL) || (chLength == 0))
{
return NULL;
}
while(chLength--)
{
*p++ = chSymble;
}
return pData;
}
/***********************************************************
* 函数说明:对象初始化函数(中) *
* 输入: 对象指针,对象大小 *
* 输出: 对象指针 *
* 调用函数:无 *
***********************************************************/
void *Normal_Object_Initial(void *pData,UINT16 wLength,UINT8 chSymble)
{
BYTE *p = pData;
if ((pData == NULL) || (wLength == 0))
{
return NULL;
}
while(wLength--)
{
*p++ = chSymble;
}
return pData;
}
/***********************************************************
* 函数说明:对象初始化函数(中) *
* 输入: 对象指针,对象大小 *
* 输出: 对象指针 *
* 调用函数:无 *
***********************************************************/
void *Large_Object_Initial(void *pData,UINT32 dwLength,UINT8 chSymble)
{
BYTE *p = pData;
if ((pData == NULL) || (dwLength == 0))
{
return NULL;
}
while(dwLength--)
{
*p++ = chSymble;
}
return pData;
}
使用方法改变为:
OBJECT_INITIAL(Example,NULL); |
|