登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

keil中srruct使用

作者:zdjtcl1 栏目:单片机
keil中srruct使用
在一文件中定义
struct aa
{
  ......
};



struct bb
{
.......
}



在另一文件中使用

extern struct aa;
extern struct bb

aa  code aa[10];
bb  code bba;
编译时


aa[10]正常
提示 bba 无效的结构
请高手解答,谢谢!


2楼: >>参与讨论
yuands
extern struct bb后面没有分号
 
3楼: >>参与讨论
农民讲习所
理解struct aa相当于unsigned CHAR
没有定义实体变量。
所以把struct aa
{
  ......
};放到H文件中。

比如下例:
//---------------------------------------------------------------------------
//系统时间管理,产生20MS系统时间和闪烁时间
//采用了T4
//----------------------------------------------------------------------------

struct SysTimer{
    unsigned int bSysTouch;                //系统20ms时间触发
    unsigned int bSysFlashTouch;        //闪烁时间触发
    unsigned int bSysFlashState;        //闪烁状态
    unsigned int bSysAlarmColorTouch;    //报警背景色渐变时间到
};

#ifdef _SysTimerH
    struct SysTimer sSysTimer;                //用户可以使用的变量

#else
    extern struct SysTimer sSysTimer;

    //-------------------------------------------------------------------------
    //根据mBaseTime设置T4
    //mBaseTime=<5ms(5000).提供给波形扫描用。
    //-------------------------------------------------------------------------
    extern void SysTimer_SetupBaseTime( unsigned int mBaseTime );

    //-------------------------------------------------------------------------
    //注册BaseTime弱实时任务处理函数:基准时间中断
    //-------------------------------------------------------------------------
    extern void SysTimer_Weekness_BaseRegister( void(*Function_BaseTime)() );

    //-------------------------------------------------------------------------
    //注册弱实时任务处理函数:5ms时间中断
    //-------------------------------------------------------------------------
    extern void SysTimer_Weekness_5msRegister( void(*Function_5ms)() );

    //------------------------------------------------------------
    //构造
    //入口:闪烁亮的时间计数、闪烁灭的时间计数
    //------------------------------------------------------------
    extern void SysTimer_Init( unsigned int mFlashOnCount, unsigned int mFlashOffCount );

    //------------------------------------------------------------
    //析构,释放在init()中使用到的硬件资源
    //------------------------------------------------------------
    extern void SysTimer_Destory(void);
    
    //-------------------------------------------------------------------------
    //循环
    //-------------------------------------------------------------------------
    extern void SysTimer_Loop(void);

    //main.c使用的主循环
    #define SysTimer_MainLoop()    \
            do{ sSysTimer.bSysTouch = sSysTimer.bSysFlashTouch = sSysTimer.bSysAlarmColorTouch = 0;\
                SysTimer_Loop();\
            }while(0)
            
#endif


4楼: >>参与讨论
zdjtcl1
谢谢
有点没明白
就是说在h文件中定义如下:
//aa.h
struct aa
{
.......
};
struct bb
{
......
};
完后
在c文件中用
#include"aa.h
这时候用预处理吗
还是在h文件中用
#ifdef _SysTimerH
    struct SysTimer sSysTimer;                //用户可以使用的变量

#else
    extern struct SysTimer sSysTimer
这几句详细意思是啥?
谢谢,因为我这个程序是在EDE(tasking)上移过来得
在EDE上好用,但keil中不好用就这个结构定义得地方.
其他已改好,


5楼: >>参与讨论
xwj
不会产生代码的全部放.h文件里,随时引用
会产生代码和内存分配的全部放.c文件里,加入工程编译

所有代码段(变量、常量、程序段等)都只在最相关程序中分配一次,在对应.h文件里加#ifndef _标识 extern...;
struct 的声明应该放对应的.h中,和相应的extern...;一起,这样包含了该头文件也就可以引用该外部变量了,而且和放什么.c文件里无关


全局或公共变量只在最上层或最相关程序中分配一次!

6楼: >>参与讨论
王紫豪
俺喜欢用typedef...
typedef struct{
    enum ENUM_FUNCTION function;
    double frequency;
    float amplitude;
    float offset;
    float phase;
    int sync;
    struct{
        float dcycle;
        }squ;
    struct{
        float symmetry;
        }ramp;
    struct{
        enum ENUM_MODULATE_FUNCTION function;
        double frequency;
        double deviation;
        int state;
        }fm;
    struct{
        enum ENUM_MODULATE_FUNCTION function;
        double frequency;
        float depth;
         int source;
         int state;
        }am;
    struct {
        enum ENUM_MODULATE_FUNCTION function;
        double frequency;
        float deviation;
        int state;
        }pm;
    struct {
        double  frequency;
        double rate;
        int source;
        int state;
        }fsk;
    struct {
        float depth;
        double rate;
        int source;
        int state;
    }ask;
    struct{
        float phase;
        double rate;
        int source;
        int state;
    }psk;
    struct {
        double start;
        double stop;
        int spacing;
        double time;
        int marker;
        double marker_frequency;
        int state;
        int direction;
    }sweep;
    struct{
        int mode;
        int source;
        float phase;
        double period;
        int ncycle;
        int gate_polarity;
        int state;
        int trigger_source;
        int trigger_slope;
        }burst;
}FUNCTION_PARAMETER;

typedef struct {
    int receive_port;
    }SYSTEM_STATE;

7楼: >>参与讨论
hotpower
俺也喜欢typedef~~~
 

参与讨论
昵称:
讨论内容:
 
 
相关帖子
对农民讲习所培训资料里有个地方不太明白,请大家指点!
请问,哪位朋友有过YM12864R液晶显示模块?
也谈如何实现PID控制的UK值与PWM占空比对应
USB键盘
看门狗复位后不能恢复现场
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号