Microchip
直播中

刘平

7年用户 240经验值
私信 关注
[问答]

如何确定RB1的位字段地址?

嗨,我只是想知道,既然PIC单片机是位址的,有没有什么方法可以识别端口的地址(位,像RB1或RB2)。因为当我使用下面的语句时:unsigned int*bitPtr;bitPtr=&PORTBbits.RB1;编译器说“不能获取位字段‘RB1’的地址”,但我确实需要一些RBx端口作为参数,我可以用一个函数来改变它们。我该怎么办?我的函数是:空格转换符(无符号int * BitPtr){//更改端口级别基于某些条件* BitPtr ^=1;}

回帖(6)

胡芝恒

2020-5-1 13:20:40
通过ANSI C标准,位字段没有地址。在真正的芯片中,比特不是单独可寻址的。
举报

王璨

2020-5-1 13:40:35
你可以得到端口的地址而不是比特的地址。无论如何,拥有端口地址就足够了。您已经知道端口内的位的“地址”。因此您可以使用只对感兴趣的邮寄位具有单个“1”的值来异或整个端口,或者应用一些其他方案。
举报

杨叶

2020-5-1 14:00:09
嗨,在你对比特字段进行逻辑操作之前,或者甚至是指向BITFEAR的指针之前,我建议你检查代码大小的生成/执行时间。我的意思是,BITFIELD对于赋值或测试值都很有好处,但是你应该避免它们进行逻辑运算或算术运算。NS。这是由于它们是通过结构和/或工会来声明的。由于C编译器必须处理一个特定的方法,从而导致更长的代码。为了“可视化”我的观点,只需编译下面的行并检查每个实现生成了多少汇编指令。如果你不关心执行时间/代码大小,那么你就可以感到惊讶了。
举报

王璨

2020-5-1 14:10:00
你对PICS有什么了解?PIC16/18和PIC24/DSPIC具有由编译器非常有效地使用的特殊位操作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分