在移植ucosII的时候出现了这样的一个错误 Error: L6218E:Undefined symbol OS_StrLen (referred from os_task.o).,一般来说,大家都知道这个是由于这个函数没有定义造成的,可能是没有引入.h头文件或.c的源文件造成的,可是由于编译不成功,不知道这个函数是在哪个文件定义的。后来终于发现是在ucos_ii.h的文件里有对这个函数的定义,其定义原型如下
#if (OS_EVENT_NAME_EN > 0u) || (OS_FLAG_NAME_EN > 0u) || (OS_MEM_NAME_EN > 0u) || (OS_TASK_NAME_EN > 0u)
INT8U OS_StrLen (INT8U *psrc);
#endif
哦,原来是要OS_EVENT_NAME_EN、OS_FLAG_NAME_EN、OS_MEM_NAME_EN、OS_TASK_NAME_EN这四个寄存器的值都清零之后,该函数才有定义。而这四个寄存器是在os_cfg.h的文件里定义的,因此只需把里面的#define OS_TASK_NAME_EN 1u
#define OS_FLAG_NAME_EN 1u
#define OS_MEM_NAME_EN 1u
#define OS_MEM_NAME_EN 1u
变成
#define OS_TASK_NAME_EN 0u
#define OS_FLAG_NAME_EN 0u
#define OS_MEM_NAME_EN 0u
#define OS_MEM_NAME_EN 0u
即可,就不会再出现上述错误了。