首页 DSP技术 嵌入式开发 电源技术 单片机学习 IC设计 工业自动化 无线通讯技术 嵌入式实时操作系统
驱动开发 CAN总线 EDA技术 PCB设计 8051单片机 MSP单片机 PIC单片机
AVR单片机 ARM学习 LED论坛 FPGA论坛 周立功单片机 mp3开发 Flash闪存 手机方案

首页->AVR单片机->正文

求教全局变量和局部变量

上篇: 请教ICCAVR编译错误的提示
下篇: 求助:ATmega 8温度控制器参考程序!

 

问题: 我的ICC里分几个文件存放,不同的功能模块在不同的文件.

我如何使一个变量在各个文件的子程序都能访问? 如何声明全局变量 ?

有些变量我想出了这个模块就不用了,是不是在该文件开头处声明就可以了?

除了用全局变量,还有办法在不同文件的程序间传递参数吗 ?

如何定义LONG 类型的变量,可以使其存在与Rx等寄存器,而不是在DATA区 ?并且使用又如何释放呢...

请各位大侠指点!
回答1:呵呵全局变量在不同模块中实现调用可以用extern声明一下;实现函数间的参数传递的另外的好办法就是用形参,最好是指针类型的,这样有一个好处就是不会象全局变量占用系统资源而不释放。第三个问题没有试过,但是可不可以用结构题的方法来解决呢?

回答2:这样吧。本模块用的,出了本模块就无效的变量,在本模块开头作如下申明:
STATIC UCHAR DATA VARIABLE1;
这个只是示例,具体的变量类型,存储类型按你的要求,static是主要的。
至于你所说的所有模块可享用的变量,可以做个头文件(*.H),将所有的系统全局变量申明下就是了,extern uchar data variable1;但在定义这个变量的模块中,要完整定义,即,你在模块1中使用variable1,你除了加入头文件外,还要在程序开头定义variable1,uchar data variable1;否则会出错的。还用问嘛,头文件指示编译器在外部找这个变量的定义,都在外部找,总得有个模块定义啊,hehe。
你的最后一个问题,诚如amoy所说,可以用结构体来实现。但程序设计要求有点小高阿,自己找本书来看吧,说起来繁,我也不是很清楚阿,^_^。
就这样了吧,希望有所帮到你。hehe

回答3:非常感谢两位热心人!通过定义.h 文件以及声明变量为extern已经解决不能编译问题,但是调用到其他文件里的函数是外的时候,编译仍然提示"调用一个未定义参数的函数可能会引起未知错误"之类的提示.但不影响使用.同时发现ICC非常不稳定,偶尔会不提示错误,当然这时候根本没有进行编译!

还有就是不同文件里的函数之间好像不能互相调用 !? 我一调用就出错...现在不在家,回去看再贴出来.
回答4:错误提示是这样的...每当调用一个非本文件中的函数就会有这样的错误提示:
:[warning] calling function without prototype may cause errors

但是不影响编译.

还有,有时候改代码的时候没擦干净,剩下一些杂七杂八的字符(连结束的;都没有),ICCAVR 居然也可以编译通过,我真是服了!



回答5:to:cctv这个警告可以不理!

相关资料:

 ICP是不是涨价了? 程序还没有进入到main,就跳到数据中止了!
 7290的用法 今天看资料发现LPC2210的一个设计问题,高手进来说明
 PCF8576的功耗能不能降到20UA zlg7290里面的所有寄存器都是可读可写的吗?
 请问内部的EEPROM 求助:使用AT45DB081遇到的问题.
 写STC单片机FLASH的最好办法 STC MCU 商业版与工业版主要有哪些区别?
 STC和89S52对比实验 STC你哪有3.8元的单片机啊
 无线(非接触式)ISP就好了 想搞自己的isp
 求助关于ISP电路的问题 目前中发的一块89c52的仿真板大概多少钱

Copyright © 2005-2006 电子技术学习网 和 电子电路图网 均为 单片机设计网旗下网站