完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想知道其他人认为访问PIC寄存器的最佳做法是什么。我可以读/写整个寄存器:我可以以各种方式访问各个位:或者,使用PIC32,可以使用SET/CLR/INV:我想提高可读性。宏是更好的选择吗?然后,建立一个引脚:把蜂鸣器打开或关闭:上面的语法是一个很好的做法,或类似的东西,而不是?如果PIN是活跃的低,我保持可读性与以下想法?谢谢,汤姆
|
|
相关推荐
7个回答
|
|
如果原子访问是一个问题,那么要么一次写入整个寄存器,要么使用SET/CURL/IVR寄存器。否则,这是味道的问题。我个人认为,由于不可移植性,BITFEX不应该用于别名硬件寄存器。不管你怎么做,把访问的功能或宏打包在一起,告诉读者你在做什么并不是一个坏主意。
|
|
|
|
使用静态内联函数是一种很简单的方法,不会增加任何开销。如果您需要在多个文件中使用它,请将带有函数体的完整定义放在头文件中。
|
|
|
|
如所写,这至少增加了-O0的开销,因为内联关键字并不强制代码在任何给定的优化级别上实际内联(编译器不在-O0处内联,并且如果使用多次,编译器可以选择将其作为大小优化的函数)。您可能希望添加它以强制内联。我更喜欢自己的宏库,我以前在类似的主题上已经发布过这个库(例如,这里是http://www..hip.com/for./FindPost/947569)。
|
|
|
|
真的。内联没有最终保证。但是,我总是用-WiLang-WError编译,这给了你保证,而且我总是用-O1编译。我认为,一方面使用-O0进行编译,另一方面又担心性能,这很少真正需要。我从来没有尝试过,但有人知道,发生了什么(0B000 000 01和lt;lt;2)或!(某物)在-0?然而,我必须承认,实际上我只有一个-O1的例子,其中编译器得出愚蠢的结论(从我的角度来看),内联一个函数不是有效的,我必须使用_u.((总是内联))强制它。然而,如果编译器抱怨内联,他可能有一个很好的理由,你应该考虑两次。对于只设置一个或几个寄存器的小型内联函数,我从未见过编译器拒绝与-O1内联。表达你正在使用它们。关于{ }的事情只是{ }的一个方面。这就是为什么很多代码指导行鼓励你使用内联函数。另一方面,宏往往更灵活。然而,互联网上充斥着关于“静态内联对宏”或“静态内联对定义”的优缺点的文章。BTW:Microchip和谐配置器(MHC)会为你生成如下的东西:
|
|
|
|
与任何其他优化级别相同。如果它可以在编译时计算,它将是。我的宏集使用类似的结构,例如,我已经检查了生成的预处理代码和在各种优化级别的asm,并且我获得了我所期望的。我对(静态)内联函数没有问题,我广泛地将它们用于其他目的(例如,HAL代码)。不管什么工作对我都有好处。只要它产生类似的(如果不是完全相同的)ASM(它通常做的),它就在那里带有缩进和注释风格。(我是对的,其他人都错了!!!!-D)
|
|
|
|
迄今为止的伟大信息。我很欣赏讨论和样品。非常有用。谢谢你,汤姆。
|
|
|
|
还没有提到的一点是使用宏或函数使得代码更容易进行单元测试。如果模拟硬件寄存器,则它们仅限于在测试用例中保存静态值,并且只能验证最后写入的值,而函数允许更复杂的测试序列。
|
|
|
|
只有小组成员才能发言,加入小组>>
5160 浏览 9 评论
1998 浏览 8 评论
1927 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3170 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2225 浏览 5 评论
727浏览 1评论
612浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
501浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
626浏览 0评论
524浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:42 , Processed in 1.311968 second(s), Total 59, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号