智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 13041|回复: 1
打印 上一主题 下一主题

Error :C1815 :OSFlagTbl not declared

[复制链接]

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
QQ
威望
299
贡献
112
兑换币
42
注册时间
2012-2-28
在线时间
39 小时
跳转到指定楼层
1#
发表于 2013-3-24 16:02:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 凌晨 于 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编译时会报错,可能用其他编译器不会,

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

1

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
489
QQ
威望
299
贡献
112
兑换币
42
注册时间
2012-2-28
在线时间
39 小时
2#
 楼主| 发表于 2013-3-24 16:05:21 | 只看该作者
因此,在使用这两个变量时最好声明下是外部变量:
  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. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 14:22 , Processed in 0.094134 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表