智能车制作

标题: 求救,看不懂啊这条代码,跪谢啊 [打印本页]

作者: 10058133    时间: 2013-4-24 21:33
标题: 求救,看不懂啊这条代码,跪谢啊
void yima_PutVal(byte Val)
{
  setReg(GPIO_A_DR,((getReg(GPIO_A_DR)) & ~yima_PIN_MASK) | ((word)Val & yima_PIN_MASK)); /* Set-up bits on port */
}


作者: 10058133    时间: 2013-4-25 11:15
自己顶
作者: DEATHRACE    时间: 2013-4-25 11:38
setReg(GPIO_A_DR,((getReg(GPIO_A_DR)) & ~yima_PIN_MASK) | ((word)Val & yima_PIN_MASK)); /* Set-up bits on port */

根据字面理解是:函数setReg()的功能是设置端口"GPIO_A_DR"的值为"((getReg(GPIO_A_DR)) & ~yima_PIN_MASK) | ((word)Val & yima_PIN_MASK))".关键是后面一个参数又是一个表达式.该表达式的值是前半部分"(getReg(GPIO_A_DR)) & ~yima_PIN_MASK)"的值与后半部分"((word)Val & yima_PIN_MASK))"进行或(|)运算.先看前半部分的值:通过函数getReg(GPIO_A_DR)获取端口"GPIO_A_DR"的值然后跟掩码"yima_PIN_MASK"取反(~)后的值再进行与(&)运算得到.后半部分的值是先将参数Val强制转换成word型数据再与掩码yima_PIN_MASK进行与(&)运算得到.这么说不知道你可明白?
作者: 10058133    时间: 2013-4-27 15:24
DEATHRACE 发表于 2013-4-25 11:38
setReg(GPIO_A_DR,((getReg(GPIO_A_DR)) & ~yima_PIN_MASK) | ((word)Val & yima_PIN_MASK)); /* Set-up bi ...

将参数Val强制转换成word型数据,是什么意思,如果Val是11转换后成了什么啦,谢谢啦

作者: DEATHRACE    时间: 2013-4-27 16:05
10058133 发表于 2013-4-27 15:24
将参数Val强制转换成word型数据,是什么意思,如果Val是11转换后成了什么啦,谢谢啦。

word就是双字节数据,用法跟其他数据类型是一样的.如果Val=11,(word)Val的值也是11.如果Val的值原先是0x87654321.占了四个自己,当强制转换后高位的两个字节就舍去,((word)Val )的值是0x4321.

作者: g106    时间: 2013-4-27 17:55
Set-up bits on port 




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2