能不能解释·一下,这个是么之意思。
HG:
如果是二进制位操作,组合就是不同改的比特位按照一定的规律拼成一个二进制数值。填充就是不同的位去填入新的值。
jia liu4:
回复 HG:
能不能举例说明,蛮烦了。
xyz549040622:
回复 jia liu4:
比如你有几个个按键IO,分别是PA0,Pa1,PB2,PB4,PC5,PC7 那么你读取按键IO状态的时候,如何读取呢,这时候就需要把这个几个IO重新组合为一个8位的IO了。那么如何组合呢,读取每个IO的状态,进行移位,然后进行|运算,最终组合为一个uchar型的数据。
jia liu4:
回复 xyz549040622:
GPIO_PIN_0 0x00000001
GPIO_PIN_1 0x00000002
num = GPIO_PIN_0 |GPIO_PIN_1
那么应该不需要以为感觉只需要进行或运算啊!
还有就是num应该是个32位的数据,除非我强制类型转换,才能成为8位。是这样理解吗?
xyz549040622:
回复 jia liu4:
对的。我上面的只是拿u8的数据类型做个比喻,这个在这里是u32类型的。但是当你读取某一个IO数据的时候,很有可能返回的是布尔型的数据,这时候就用到移位了。以及位组合。
jia liu4:
回复 xyz549040622:
就是还有一个问题,那就是地址,每一个模块就有一个地址,比如GPIO_PIN_0的地址是0x00000001,那么我给它赋值,改的是一个什么东西,地址值没有变吧!还有就是,像调用函数时,比如说配置时钟的函数,里面有几个参数,而那几个参数也有地址,而且还是或起来的,所以应该传过去来是个值,关键就是这里,地址到底变没有变,值是不是就是那几个或起来的得到的值。简单的说能不能像这样理解,就是我们调模块的时候,也需要配置,所以也是给值,不过单纯的就是一个值,所以即使是或起来的也还是相当于怎样配置得到对应的值,从而就是给单片机什么命令了。