完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好,我有一个关于编程最佳实践的问题。我希望有一个ISR在呼叫之间保持一定程度的状态,但是,我不想使用全局变量。我正在考虑使用静态类型内部的ISR实现呼叫之间的固定状态。有没有其他的方法更符合C最佳实践?谢谢您!
|
|
相关推荐
14个回答
|
|
|
我对“最佳实践”不太确定,但是您总是可以直接指定一个寄存器来保存值。也就是说,我建议检查实际的应用程序目标,而不是盲目遵循编程范例。如果全局变量是有用的,并且对应用程序的未来可能不有害,那么它会带来什么问题呢?
|
|
|
|
|
|
为什么不呢?无论哪种方式最终都会在PIC中使用完全相同的资源。
|
|
|
|
|
|
呵呵。程序设计专业的学生被“全局变量”赶了出来,很少考虑他们为什么会首先存在。真的,从“寄存器”的角度来看它更令人愉快。你的照片上有“Zobs先生”,它们是真正的变量。在这个应用程序中,你真正关心的是他们使用的一个短语与另一个短语之间的关系?
|
|
|
|
|
|
嗯,一个PIC几乎没有寄存器来避免在中断中保持一个值。
|
|
|
|
|
|
静态变量与全局变量没有什么不同。事实上,在标准中,它们都具有相同的名称、具有静态链接的变量,这意味着它们在程序的整个执行过程中都保持在相同的位置。那些。在所有情况下完全避免它们是完全不可能的,并且它们通常是实现事情的最佳实践方法。例如,在这种情况下,如果没有使用具有静态链接的变量,则根本无法保持状态,因此这不仅是最佳实践,而且是惟一的方法。创建变量的方法有好也有坏,并且您需要注意以安全的方式访问它,特别是如果主线代码也可以使用它。我可能会使用带有静态关键字的全局变量,这将给它提供内部链接,这克服了全局变量的大多数“坏处”,因为其他模块根本不能访问该变量,只有ISR可以。
|
|
|
|
|
|
没有达里奥,这里唯一的问题就是使用“全局”和“变量”两个词。所以,除了提到“应用目标”的明智之处外,我还想说:“是的,我有办法做到这一点,MOVWF。”巴姆!现在你的教授不能因为你使用了太多的“全局变量”而失败。
|
|
|
|
|
|
为了增加O.P.的压力水平:在微芯片中声明的所有SFR提供的标准标头实际上是全局的。你会有雪花的机会在地狱做任何有用的不使用它们!
|
|
|
|
|
|
你们这些家伙开始深奥了。它们不是完全相同的,因为它们进入RAM中。作用域有助于程序控制变量,因此程序员不必这样做。关键词是有原因的。Zobs:是的,在ISR中有一个静态变量是很好的。这是一种限制变量范围的好方法。静态变量还可以将范围限制为单个C文件,从而创建具有有限范围的全局。
|
|
|
|
|
|
静态是好的。10年后,您查看代码,查看变量,然后立即知道它是持久的,但位于ISR内部,并且不在其他任何地方使用。您也不需要滚动来查找声明。否则,它和全球一样。
|
|
|
|
|
|
我见过他们说使用静态变量比普通变量快,谁能确认?
|
|
|
|
|
|
在支持为堆栈上的函数分配自动局部变量,但没有快速堆栈指针+偏移相对寻址模式的体系结构中,静态局部变量可能更快,因为它是在固定地址分配的。s,默认为使用自动编译的“堆栈”来自动变量,它将与本地静态变量或全局变量一样快。如果需要更快的变量访问,则需要使用近限定符(仅对全局有效)和--ADDERQUAL require或request编译器选项在极其有限的公共RAM或访问库中分配它们
|
|
|
|
|
|
视情况而定。给定PIC24/33,如果变量位于近记忆空间中,则可以更有效地寻址。除非强迫变量驻留在临近空间中,否则链接器可以将变量存储放在它所选择的任何位置。也许编译器在NEAR空间中放置了静态。对于PIC32,如果存在差异,我会很惊讶。对于8位,也许编译器可以玩游戏。但是正如其他人所提到的,函数中的静态实际上是全局的,但是编译器将范围限制为包含以下内容的函数静态的。不能在函数之外访问它。文件作用域中的静态值只不过是该编译单元作用域有限的全局值。这用于防止全局变量名称空间的污染并防止其他编译单元故意访问。
|
|
|
|
|
|
是的,我就是这么想的。由于使用全局变量,不能总是确定它们在哪里被修改。谢谢你的回答!
|
|
|
|
|
|
静态与函数内部声明的正则局部变量不同。如果递归地调用函数(尽管使用XC8编译的堆栈不能这样做),则函数的每次调用将接收其自己的规则局部变量集,但是它们将共享静态变量的相同副本。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5794 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 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 10:53 , Processed in 0.982129 second(s), Total 98, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3675