|
uC/OS-II移植中出现OSTaskStkInit redefinition错误
[复制链接]
哎,编译uC/OS-II的时候又出现了莫明的错误....
先看OS_CPU.H文件
- //仅贴出OSTaskStkInit函数的定义
- void *OSTaskStkInit (void (*task)(void *pd), void *p_data, void *ptos, INT16U opt) reentrant
- {
- OS_STK *stk;
- p_data = p_data;
- opt = opt; //opt没被用到,保留此语句防止告警产生
- stk = (OS_STK *)ptos; //用户堆栈最低有效地址
- *stk++ = 15; //用户堆栈长度
- *stk++ = (INT16U)task & 0xFF; //任务地址低8位
- *stk++ = (INT16U)task >> 8; //任务地址高8位
- *stk++ = 0x00; //PSW
- *stk++ = 0x0A; //ACC
- *stk++ = 0x0B; //B
- *stk++ = 0x00; //DPL
- *stk++ = 0x00; //DPH
- *stk++ = 0x00; //R0
- *stk++ = 0x01; //R1
- *stk++ = 0x02; //R2
- *stk++ = 0x03; //R3
- *stk++ = 0x04; //R4
- *stk++ = 0x05; //R5
- *stk++ = 0x06; //R6
- *stk++ = 0x07; //R7
- //不用保存SP,任务切换时根据用户堆栈长度计算得出。
- *stk++ = (INT16U) (ptos+MaxStkSize) >> 8; //?C_XBP 仿真堆栈指针高8位
- *stk++ = (INT16U) (ptos+MaxStkSize) & 0xFF; //?C_XBP 仿真堆栈指针低8位
-
- return ((void *)ptos);
- }
复制代码
uCOS-II.H文件(仅贴出OSTaskInit函数的声明)
- OS_STK *OSTaskStkInit(void (*task)(void *pd), void *p_data, OS_STK *ptos, INT16U opt) reentrant;
复制代码
编译时出现下面的错误提示:
..\OS_CPU\OS_CPU_C.C(73): error C231: '_?OSTaskStkInit': redefinition
..\OS_CPU\OS_CPU_C.C(100): error C231: '_?OSTaskStkInit': redefinition
注:73和100行分别为OSTaskStkInit函数的第一行和最后一行
附:
本来在uC/OS-II的源代码里是没有在函数OSTaskStkInit后面加上reentrant声明的,reentrant声明是我自己后来加上去的,(原因请参考 http://read.pudn.com/downloads102/sourcecode/embed/418121/The%20uC%20OS-II%20port%20for%20Keil%20C%20V6.20,%20V6.21%20or%20higher/os_kc51.h__.htm),但是无论是否加上reentrant声明,都会出现上面的编译错误。
本人实在不知道错在哪里,还望高手指点,感激不尽!!
|
|