你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

局部变量和全局变量请教

[复制链接]
风铃草2 提问时间:2014-12-22 15:09 /
最开始定义AD是在函数里的局部变量 如下:
void AD_Single(unsigned char channel)
{        
        ADC_InitTypeDef     ADC_InitStructure;
......
}结果 一直得不到EOC
后来改成全局变量 在main函数里定义 再用extern ADC_InitTypeDef     ADC_InitStructure;
结果EOC FLAG就产生了 ,我晕 ,只要一换回去  就又失败了  
用调试看了下汇编 图片上传
这是ok的全局变量
ok.jpg
这是失败的局部变量
fail.jpg

收藏 评论23 发布时间:2014-12-22 15:09

举报

23个回答
Dylan疾风闪电 回答时间:2014-12-23 15:46:47
重点是保证ADC_InitTypeDef结构体修改的配置,与初始化函数,在同一个作用域。
不要在A函数处修改结构体,却去B函数初始化外设。
风铃草2 回答时间:2014-12-22 15:13:13
另上传源程序截图
这是定义的全局变量
~QPC03_GOQ7XKNPE[7KC}GO.jpg

这是我的工程文件 adc配置放在ad.c里面
E1AUBEM]34~5}68TV8WQ()7.jpg
这是定义成局部变量


这是AD采集等待EOC标志位

[WXC`BKZ{93@D}]]O6B$Y9T.jpg



晓枫VS枯叶 回答时间:2014-12-22 16:32:58
楼主要定义全局变量的话最好到函数外面去定义,然后另外一个地方extern就好了!
wambob 回答时间:2014-12-22 19:41:39
全局变量具有全局作用域,如果是另1个文件中已经定义了,可以用引用头文件的方式,也可以用extern关键字.

局部变量的作用域作用于函数体范围.
风铃草2 回答时间:2014-12-22 20:18:47
晓枫VS枯叶 发表于 2014-12-22 16:32
楼主要定义全局变量的话最好到函数外面去定义,然后另外一个地方extern就好了! ...

哥们 你没懂我意思  我是说  我定义成全局变量 ADC初始化成功 ,改成局部变量就失败 ,调试的时候 两者的内容是一模一样 区别就在汇编里面 但是就是没找到原因
arm8686 回答时间:2014-12-22 20:23:26


这里的函数,传递一个ADC的通道进来。
ADC_DeInit(ADC1); 这句里头的 ADC1,从哪里来的?这是个实参吧?

之前没有初始化过,这里却执行 清初始化(DeInit)。
wambob 回答时间:2014-12-22 20:39:23
变量的使用要遵循先定义后使用,请问那改成局部变量的时候,定义在哪
奔跑小蜗牛 回答时间:2014-12-23 10:00:11
    ADC_DeInit(ADC1); ADC的初始化过程调用的是全局变量,如果把 ADC_InitTypeDef   ADC_InitStructure定义为局部结构体变量,会造成ADC调取不到初始化配置,ADC不能完成正常初始化,自然也就得不到EOC了
小贾-370388 回答时间:2014-12-23 13:59:33
全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是从定义该变量的位置开始至源文件结束.而局部变量是定义在函数内部的作用域是之作用与该函数,当函数调用完以后,系统将会是放该变量占用的内存的。所以外部函数式调用不了的
123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版