函数的实现要在函数调用前面。
报错
/**
* 该函数将初始化对象并将对象添加到对象容器中
*
* @param object 要初始化的对象
* @param type 对象的类型
* @param name 对象的名字,在整个系统中,对象的名字必须是唯一的
*/
void rt_object_init(struct rt_object *object,enum rt_object_class_type type,const char *name)
{
// register 定义局部变量 将变量存入寄存器,寄存器中的访问比内快
// 一般的只有编译器将变量优化后才能存入寄存器
register rt_base_t temp;
struct rt_object_information *information;
// 获取对象信息,从容器中拿到对应对象列表头指针
information = rt_object_get_information(type);
// 设置对象类型为静态
object->type = type|RT_Object_Class_Static;
// 拷贝名字
rt_strncpy(object->name,name,RT_NAME_MAX);
// 关中断 接下来链表的操作不希望被中断
temp = rt_hw_interrupt_disable();
// 将对象插入到容器的对应列表中,不同类型的对象所在的列表不一样
rt_list_insert_after(&(information->object_list),&(object->list));
// 使能中断
rt_hw_interrupt_enable(temp);
}
char *rt_strncpy(char *dst,const char *src,rt_ubase_t n)
{
// 拷贝的最大长度不为0
if(n!=0)
{
char *d = dst;
const char *s = src;
do{
if((*d++=*s++)==0)
{
while(--n!=0)
*d++=0;
break;
}
}while(--n!=0);
}
return(dst);
}
解决
/**
* 该函数将指定个数的字符串从一个地方拷贝到另外一个地方
* @param dst 字符串拷贝的目的地
* @param src 字符串从哪里拷贝
* @param n 要拷贝的最大长度
* @return the result
*/char *rt_strncpy(char *dst,const char *src,rt_ubase_t n)
{
// 拷贝的最大长度不为0
if(n!=0)
{
char *d = dst;
const char *s = src;
do{
if((*d++=*s++)==0)
{
while(--n!=0)
*d++=0;
break;
}
}while(--n!=0);
}
return(dst);
}
/**
* 该函数将初始化对象并将对象添加到对象容器中
*
* @param object 要初始化的对象
* @param type 对象的类型
* @param name 对象的名字,在整个系统中,对象的名字必须是唯一的
*/
void rt_object_init(struct rt_object *object,enum rt_object_class_type type,const char *name)
{
// register 定义局部变量 将变量存入寄存器,寄存器中的访问比内快
// 一般的只有编译器将变量优化后才能存入寄存器
register rt_base_t temp;
struct rt_object_information *information;
// 获取对象信息,从容器中拿到对应对象列表头指针
information = rt_object_get_information(type);
// 设置对象类型为静态
object->type = type|RT_Object_Class_Static;
// 拷贝名字
rt_strncpy(object->name,name,RT_NAME_MAX);
// 关中断 接下来链表的操作不希望被中断
temp = rt_hw_interrupt_disable();
// 将对象插入到容器的对应列表中,不同类型的对象所在的列表不一样
rt_list_insert_after(&(information->object_list),&(object->list));
// 使能中断
rt_hw_interrupt_enable(temp);
}