我有一些代码需要在2个不同的PCB上运行。在启动时,代码会检测/知道它运行的硬件并设置标志。指向端口寄存器位的指针
现在,一些信号根据硬件改变端口,即:在HW1上的 ,信号A在P9上的0x08上,而在其他硬件上的P14上,信号A在0x02上。
我可以很容易地检查到处使用信号A的标志 - 但是这个解决方案对我来说似乎并不“好”。
我也可以很容易地像这样更改端口在启动:
if(cIsHW1) Reg = &P14;
else Reg = &P9;
,并使用注册来访问每个HW正确的端口。
但是,如何更改位的位置呢?我现在没有像寄存器中的某个指针那样的东西 - 这实际上是我认为我需要的东西。
我需要读取这些端口位并设置/清除它。
我是否错过了某些东西,或者我真的需要检查标志(如果..其他)我需要访问该端口位吗?
感谢 MCL
即使你*可能*有一个指向单个位的指针,你将如何在没有'if'语句的情况下检查它? –
通过使用位掩码,说'if(cIsHW1)掩码= 0x02; else mask = 0x08;'然后用'Reg&mask'读取端口位,它将是'== 0'或'!= 0'。 –
使用位移运算符。设置:'var | =(1 << bitnum)',阅读:'res =(var >> bitnum)&1' –