c語言關(guān)于Clear=Clear的疑問
/************************************************//*函數(shù)功能:初始化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腳設(shè)置為RXDLPC_IOCON->PIO1_7&=~0x07;LPC_IOCON->PIO1_7|=0x01;//把P1.7腳設(shè)置為TXDLPC_SYSCON->SYSAHBCLKCTRL&=~(1<<16);//禁能IOCON時鐘LPC_SYSCON->UARTCLKDIV=0x1;//時鐘分頻值為1LPC_SYSCON->SYSAHBCLKCTRL|=(1<<12);//允許UART時鐘LPC_UART->LCR=0x83;//8位傳輸,1個停止位,無幾偶校驗,允許訪問除數(shù)鎖存器DL_value=SystemCoreClock/16/baudrate;//計算該波特率要求的除數(shù)鎖存寄存器值LPC_UART->DLM=DL_value/256;//寫除數(shù)鎖存器高位值LPC_UART->DLL=DL_value%256;//寫除數(shù)鎖存器低位值LPC_UART->LCR=0x03;//DLAB置0LPC_UART->FCR=0x07;//允許FIFO,清空RxFIFO和TxFIFOClear=LPC_UART->LSR;//讀UART狀態(tài)寄存器將清空殘留狀態(tài)}
某同學(xué):UART的例程程序有一句語句Clear=LPC_UART->LSR;Clear是被定義了,這也用到了,但是就把LSR的值讀出來也不判斷,這個不明白
瑞生:這個原因,后面的注釋寫的很清楚呀
瑞生:Clear=Clear:用這種語句形式解決編譯產(chǎn)生的Waring:neverused!
瑞生:你把=Clear去掉以后,再按編譯按鈕,就知道了
某同學(xué):這我看了明白
某同學(xué):Clear=LPC_UART->LSR;這條語句不是讀的LSR狀態(tài)信息嗎?那就是說這一句可以不寫
瑞生:這一句,必須寫,我們用這一句的作用是:清除LSR寄存器
某同學(xué):如果讀了以后沒有用,可以不寫
瑞生:我們就是要“只讀不用”
某同學(xué):我知道LSR是只讀的寄存器,通過Clear=LPC_UART->LSR;把LSR信息讀出來了,賦給Clear,同時LSR里的值會改變是嗎?
某同學(xué):如果不變,也不判斷實在不明讀它有什么意義
瑞生:這個意義,我已經(jīng)說過了
瑞生:這一句,必須寫,我們用這一句的作用是:清除LSR寄存器
瑞生:能理解嗎?
某同學(xué):理解了,也就LSR的值改變了
瑞生:不是
瑞生:清除LSR寄存器的作用是,不要讓之前的狀態(tài)影響了下次的通信。
某同學(xué):知道了,謝謝!
瑞生:好的,不客氣!