打印

keil中srruct使用

[复制链接]
3251|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zdjtcl1|  楼主 | 2007-1-1 06:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
yuands| | 2007-1-1 07:52 | 只看该作者

extern struct bb后面没有分号

使用特权

评论回复
板凳
农民讲习所| | 2007-1-1 08:34 | 只看该作者

理解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

使用特权

评论回复
地板
zdjtcl1|  楼主 | 2007-1-2 10:51 | 只看该作者

谢谢

有点没明白
就是说在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| | 2007-1-2 11:46 | 只看该作者

不会产生代码的全部放.h文件里,随时引用

会产生代码和内存分配的全部放.c文件里,加入工程编译

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


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

使用特权

评论回复
6
王紫豪| | 2007-1-2 12:35 | 只看该作者

俺喜欢用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| | 2007-1-2 12:41 | 只看该作者

俺也喜欢typedef~~~

使用特权

评论回复
8
csq463276932| | 2011-4-30 16:23 | 只看该作者
顶起,学习。

使用特权

评论回复
9
wang_2003| | 2011-5-3 12:52 | 只看该作者
学习一下~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

51

帖子

0

粉丝