完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好。一个非常基本的问题让我困惑。一个变量在ISR()文件和3个非中断文件中更新(读和写),并且我希望它的生存期延长,这意味着它在函数/文件调用之间保留它的值。它将被限定为“volatile”。但是,它是否还需要具备“静态”的资格呢?如何确保在调用之间保留它的值?非常感谢你的帮助。
|
|
相关推荐
19个回答
|
|
|
嗨,Static是必需的,这样编译器就会给变量提供一个永久的地址。如果对ISR中修改的globabl变量的代码进行优化,以避免编译器优化外部可变的变量(即在中断中),volatile是必需的。解释如下:HTTPS://BARRGROP.COM/EngulDeD Stasks/Ho-to/C FraveKythOrth.
|
|
|
|
|
|
未经许可不能回复邮件
|
|
|
|
|
|
如果在其中一个.c文件中将其定义为“.”,那么会得到以下警告:initeerom.c:6:warning:(367)标识符已经处于外部;不能是staticEdit:pls。忽略这一点。这是错误的,因为它也被声明在同一.h文件中。
|
|
|
|
|
|
例如,我有以下文件:main.c isr.c file1.c file2.c file3.c变量在除了main.c之外的所有文件(isr、file1、file2、file3)中被更新,那么我如何确保当我在一个filex.c文件中定义变量时,它在调用之间保持其值?
|
|
|
|
|
|
嗨,看一本关于局部/全局变量的C语言书。如果你想在多个文件中使用变量,它应该只声明一次作为全局变量(外部函数),然后被其他文件引用为ext.:http://microhipdeveloper...01:multi file-projectsRegards
|
|
|
|
|
|
我不能理解的是,我必须在main.c中定义这个变量是正确的,虽然它不用在这个文件中,但是用在其他文件中?如果我只是把它定义为“volatile”,而不是任何函数之外的main.c文件中的“.”,那么它将成为全局的,并且它将在整个程序生命周期中保持它的值,并且它可以被使用“ext.”限定符的其他文件中的函数访问。如果我错了,请告诉我。
|
|
|
|
|
|
没有人感到难过,您必须在main.cIt中定义它,只要在可以看到外部dclarationYes的任何C文件中声明它是全局的,但是不管您在哪个C文件中定义它,它都不必在main.c中。
|
|
|
|
|
|
NeeEM1234是时候更新你的经验水平了!在函数外定义的cAn变量是全局的……相反,应用于“function-local”变量上的“.”会导致在调用之间保留它的值。“另行通知”。一个易失性的结果:编译器放弃了一些更好的优化选项。
|
|
|
|
|
|
不用难过,您必须在main.cIt中定义它,只要在可以看到外部dclarationYes的任何C文件中声明它是全局的,但是不管您在哪个C文件中定义它,它都不必在main.c.中。
|
|
|
|
|
|
谢谢。
|
|
|
|
|
|
C语言中没有“Meal.C”这样的东西。你不需要在你的程序中有一个名为“Meal.C”的文件,如果你这样做,它就没有任何特殊的属性。你的主()函数不需要在一个名为“Meal.C”的文件中。
|
|
|
|
|
|
仅供参考,您可能想看看这篇文章如何描述C.Jeff中的变量。
|
|
|
|
|
|
我正在尝试使用本文中的“范围”、“存储”和“链接”方面来理解变量的深层概念。如果在任何函数外部的文件“x1.c”的顶部定义了变量,那么它在项目中有“文件范围”,并且它也被项目中的其他文件使用“ext.”限定符引用。那么,它是否保证只在内存中创建一次,并且即使在程序的顺序流中调用和退出相关的文件或函数时,它在整个程序生命周期中仍会保留其值?2。如果变量是在任何函数之外的文件“x1.c”中间的某个地方定义的,那么它将在项目中再次具有“文件范围”。我所理解的是,在这个特定的文件中,它只能被定义之后在这个文件中出现的所有函数访问。当其他文件在使用“ExtLN”限定符访问时,它可以在整个文件中引用。因此,“文件范围”不仅仅是“文件范围”,还有一个“度”。这样说是正确的吗?
|
|
|
|
|
|
对。变量在程序的整个生命周期中都存在,并且与相同C文件中的函数无关。通常,“ext.”定义将位于头文件中,您还将将其包括在这个C文件中,因此它将为整个文件定义。
|
|
|
|
|
|
R:变量定义在“中间”…考虑这个“可怕的风格”。了解WHESE和WHIT:编译器正在自上而下读取文件。因此,它不知道一些变量,除非它读取“外部”声明或变量定义。(尽管它可以为任何未知的“符号”假设一个int。这就是处理未定义函数的返回值和参数的方法。如果希望使它们成为某个函数的本地(但是保留函数调用之间的值),则在函数中定义它们,并用“.”作为前缀(在本上下文中使用时,用于保留调用之间的值的魔术单词)。
|
|
|
|
|
|
本文明确地指出,变量是从在文件中看到的位置定义的,直到文件的结尾。OP,所以它是学术的定义发生。
|
|
|
|
|
|
列出你的头文件。
|
|
|
|
|
|
本文明确地指出,变量是从在文件中看到的位置定义的,直到文件的结尾。op,所以定义出现的地方是学术性的。是的,现在我正在根据推荐的C和H文件重写(或影响重构)整个项目。请介绍多文件项目中的“联合”。我很少有“工会”,他们在不同的文件中使用。推荐的方式是什么?我是否应该为“工会”使用“TyPulf”?如果需要“TyPulf”,那么“TyPulf”在C文件或H文件中的何处?
|
|
|
|
|
|
您可以对联合使用typedefs,它不是强制性的。typedef根据C文件IF中C.的规则(它是唯一将使用的地方)进行操作,在Header IF中它将在其他文件中使用。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:41 , Processed in 1.034552 second(s), Total 78, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1008