|
发表于 2022-4-8 00:17:05
|
显示全部楼层
以此为例解释:if(adc ==ADC_1 && ( (ch&0xF00) == 0xF00 ) )
adc_index[adc]->ADCFG |= ADC_CFGR_VEN;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
问题1 “|=”是什么意思?
首先把“|”和“=”分开看“|”是“按位或”的意思,“=”是赋值的意思,
举个例子a=1010,b=0001,那么a|b的结果是1011
那a|=b的意思就是a=a|b,举一反三你猜猜a+=b是什么意思?
回到代码中
adc_index[adc]->ADCFG = adc_index[adc]->ADCFG | ADC_CFGR_VEN;
这样会不会算呢?
//////////////////////////////////////////////////////////////////////////////////////////////////////////
问题2 “&&”按位与是啥意思?
首先&&是什么?
&& (逻辑与):(三种),下面的真假就是1和0
a. 当&&左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
b. 当&&左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
c. 当&&左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)
那么回到代码中
①看 && 右侧,计算(ch&0xF00)的结果,得出结果后判断是否等于0xF00 ,
即((ch&0xF00) == 0xF00 ),如果相等结果为真也就是1,如果不相等结果为假也就是0;
②看 && 左侧,adc ==ADC_1 判断adc是否和ADC_1相等,
即如果相等结果为真也就是1,如果不相等结果为假也就是0;
③此时&&的左侧可能是0或者1,&&的右侧也可能是0或者1;假如&&两侧都是1的话,
那么1&&1的结果你会不会算呢?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
问题3 “~”是啥?
“~”是按位取反的意思,举个栗子,a=1010,~a=0101;
回到代码中去看
① “~”第一次登场在这句代码 RCC->APB2RSTR &= ~(RC_APB2RSTR_ADC1 << adc);
②先计算括号内RC_APB2RSTR_ADC1 << adc,意思是将RC_APB2RSTR_ADC1左移“adc”位
③将结果按位取反~(RC_APB2RSTR_ADC1 << adc),括号内的结果是0000的话,那按位取反后就是1111
接下来是“&=”这次你应该会算了吧 |
|