c语言关于Clear=Clear的疑问
扫描二维码
随时随地手机看文章
/************************************************//*函数功能:初始化UART口*//************************************************/voidUART_init(uint32_tbaudrate){uint32_tDL_value,Clear=Clear;//(用这种方式定义变量解决编译器的Warning)LPC_SYSCON->SYSAHBCLKCTRL|=(1<<16);//使能IOCON时钟LPC_IOCON->PIO1_6&=~0x07;LPC_IOCON->PIO1_6|=0x01;//把P1.6脚设置为RXDLPC_IOCON->PIO1_7&=~0x07;LPC_IOCON->PIO1_7|=0x01;//把P1.7脚设置为TXDLPC_SYSCON->SYSAHBCLKCTRL&=~(1<<16);//禁能IOCON时钟LPC_SYSCON->UARTCLKDIV=0x1;//时钟分频值为1LPC_SYSCON->SYSAHBCLKCTRL|=(1<<12);//允许UART时钟LPC_UART->LCR=0x83;//8位传输,1个停止位,无几偶校验,允许访问除数锁存器DL_value=SystemCoreClock/16/baudrate;//计算该波特率要求的除数锁存寄存器值LPC_UART->DLM=DL_value/256;//写除数锁存器高位值LPC_UART->DLL=DL_value%256;//写除数锁存器低位值LPC_UART->LCR=0x03;//DLAB置0LPC_UART->FCR=0x07;//允许FIFO,清空RxFIFO和TxFIFOClear=LPC_UART->LSR;//读UART状态寄存器将清空残留状态}
某同学:UART的例程程序有一句语句Clear=LPC_UART->LSR;Clear是被定义了,这也用到了,但是就把LSR的值读出来也不判断,这个不明白
瑞生:这个原因,后面的注释写的很清楚呀
瑞生:Clear=Clear:用这种语句形式解决编译产生的Waring:neverused!
瑞生:你把=Clear去掉以后,再按编译按钮,就知道了
某同学:这我看了明白
某同学:Clear=LPC_UART->LSR;这条语句不是读的LSR状态信息吗?那就是说这一句可以不写
瑞生:这一句,必须写,我们用这一句的作用是:清除LSR寄存器
某同学:如果读了以后没有用,可以不写
瑞生:我们就是要“只读不用”
某同学:我知道LSR是只读的寄存器,通过Clear=LPC_UART->LSR;把LSR信息读出来了,赋给Clear,同时LSR里的值会改变是吗?
某同学:如果不变,也不判断实在不明读它有什么意义
瑞生:这个意义,我已经说过了
瑞生:这一句,必须写,我们用这一句的作用是:清除LSR寄存器
瑞生:能理解吗?
某同学:理解了,也就LSR的值改变了
瑞生:不是
瑞生:清除LSR寄存器的作用是,不要让之前的状态影响了下次的通信。
某同学:知道了,谢谢!
瑞生:好的,不客气!