|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
keil中srruct使用 |
作者:zdjtcl1 栏目:单片机 |
在一文件中定义 struct aa { ...... }; struct bb { ....... } 在另一文件中使用 extern struct aa; extern struct bb aa code aa[10]; bb code bba; 编译时 aa[10]正常 提示 bba 无效的结构 请高手解答,谢谢! |
2楼: | >>参与讨论 |
作者: yuands 于 2007/1/1 7:52:00 发布:
extern struct bb后面没有分号 |
3楼: | >>参与讨论 |
作者: 农民讲习所 于 2007/1/1 8:34:00 发布:
理解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 于 2007/1/2 10:51:00 发布:
谢谢 有点没明白 就是说在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:00 发布:
不会产生代码的全部放.h文件里,随时引用 会产生代码和内存分配的全部放.c文件里,加入工程编译 所有代码段(变量、常量、程序段等)都只在最相关程序中分配一次,在对应.h文件里加#ifndef _标识 extern...; struct 的声明应该放对应的.h中,和相应的extern...;一起,这样包含了该头文件也就可以引用该外部变量了,而且和放什么.c文件里无关 全局或公共变量只在最上层或最相关程序中分配一次! |
6楼: | >>参与讨论 |
作者: 王紫豪 于 2007/1/2 12:35:00 发布:
俺喜欢用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:00 发布:
俺也喜欢typedef~~~ |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |