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

局部变量和全局变量请教

[复制链接]
风铃草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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版