智能车制作

标题: Error :C1815 :OSFlagTbl not declared [打印本页]

作者: 凌晨    时间: 2013-3-24 16:02
标题: Error :C1815 :OSFlagTbl not declared
本帖最后由 凌晨 于 2013-3-24 16:05 编辑

在UCOS-II的移植中编译时会出现了一个报错:
Error :C1815 :OSFlagTbl not declared (or type name)

原程序如下:
  1. void OS_FlagInit( void ){

  2. #if OS_MAX_FLAGS == 1
  3.         OSFlagFreeList                                = ( OS_FLAG_GRP * ) &OSFlagTbl[0];        /* Only one event flag group !                 */
  4.         OSFlagFreeList->OSFlagType         = OS_EVENT_TYPE_UNUSED;
  5.         OSFlagFreeList->OSFlagWaitList = ( void * ) 0;
  6. #endif

  7. #if OS_MAX_FLAGS >= 2
  8.         INT8U                                i;
  9.         OS_FLAG_GRP                        *pgrp1;
  10.         OS_FLAG_GRP                        *pgrp2;
  11.         
  12.         pgrp1        = &OSFlagTbl[0];
  13.         pgrp2        = &OSFlagTbl[1];
  14.         for( i = 0; i < ( OS_MAX_FLAGS - 1 ); i++ ){
  15.                 pgrp1->OSFlagType                 = OS_EVENT_TYPE_UNUSED;
  16.                 pgrp1->OSFlagWaitList        = (void *)pgrp2;
  17.                 pgrp1++;
  18.                 pgrp2++;
  19.         }
  20.         pgrp1->OSFlagWaitList         = (void *)0;
  21.         OSFlagFreeList                        = (OS_FLAG_GRP *)&OSFlagTbl[0];
  22. #endif
  23. }
复制代码
其中 OSFlagTbl数组是在UCOS_II.H中声明的:
extern OS_FLAG_GRP OSFlagTbl[ OS_MAX_FLAG ];
extren OS_FLAG_GRP *OSFlagFreeList;

用Codewarrior编译时会报错,可能用其他编译器不会,

(好吧,写不完,接下面)


作者: 凌晨    时间: 2013-3-24 16:05
因此,在使用这两个变量时最好声明下是外部变量:
  1. void OS_FlagInit( void ){

  2. #if OS_MAX_FLAGS == 1
  3.         OSFlagFreeList                                = ( OS_FLAG_GRP * ) &OSFlagTbl[0];        /* Only one event flag group !                 */
  4.         OSFlagFreeList->OSFlagType         = OS_EVENT_TYPE_UNUSED;
  5.         OSFlagFreeList->OSFlagWaitList = ( void * ) 0;
  6. #endif

  7. #if OS_MAX_FLAGS >= 2
  8.         INT8U                                i;
  9.         OS_FLAG_GRP                        *pgrp1;
  10.         OS_FLAG_GRP                        *pgrp2;
  11.        
  12.         /* 添加的部分 ,声明外部变量       */
  13.         extern  OS_FLAG_GRP OSFlagTbl[];
  14.         extern  OS_FLAG_GRP *OSFlagFreeList;
  15.        
  16.         pgrp1        = &OSFlagTbl[0];
  17.         pgrp2        = &OSFlagTbl[1];
  18.         for( i = 0; i < ( OS_MAX_FLAGS - 1 ); i++ ){
  19.                 pgrp1->OSFlagType                 = OS_EVENT_TYPE_UNUSED;
  20.                 pgrp1->OSFlagWaitList        = (void *)pgrp2;
  21.                 pgrp1++;
  22.                 pgrp2++;
  23.         }
  24.         pgrp1->OSFlagWaitList         = (void *)0;
  25.         OSFlagFreeList                        = (OS_FLAG_GRP *)&OSFlagTbl[0];
  26. #endif
  27. }
复制代码





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2