c語(yǔ)言關(guān)于Clear=Clear的疑問(wèn)
/************************************************//*函數(shù)功能:初始化UART口*//************************************************/voidUART_init(uint32_tbaudrate){uint32_tDL_value,Clear=Clear;//(用這種方式定義變量解決編譯器的Warning)LPC_SYSCON->SYSAHBCLKCTRL|=(1<<16);//使能IOCON時(shí)鐘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時(shí)鐘LPC_SYSCON->UARTCLKDIV=0x1;//時(shí)鐘分頻值為1LPC_SYSCON->SYSAHBCLKCTRL|=(1<<12);//允許UART時(shí)鐘LPC_UART->LCR=0x83;//8位傳輸,1個(gè)停止位,無(wú)幾偶校驗(yàn),允許訪問(wèn)除數(shù)鎖存器DL_value=SystemCoreClock/16/baudrate;//計(jì)算該波特率要求的除數(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的例程程序有一句語(yǔ)句Clear=LPC_UART->LSR;Clear是被定義了,這也用到了,但是就把LSR的值讀出來(lái)也不判斷,這個(gè)不明白
瑞生:這個(gè)原因,后面的注釋寫的很清楚呀
瑞生:Clear=Clear:用這種語(yǔ)句形式解決編譯產(chǎn)生的Waring:neverused!
瑞生:你把=Clear去掉以后,再按編譯按鈕,就知道了
某同學(xué):這我看了明白
某同學(xué):Clear=LPC_UART->LSR;這條語(yǔ)句不是讀的LSR狀態(tài)信息嗎?那就是說(shuō)這一句可以不寫
瑞生:這一句,必須寫,我們用這一句的作用是:清除LSR寄存器
某同學(xué):如果讀了以后沒(méi)有用,可以不寫
瑞生:我們就是要“只讀不用”
某同學(xué):我知道LSR是只讀的寄存器,通過(guò)Clear=LPC_UART->LSR;把LSR信息讀出來(lái)了,賦給Clear,同時(shí)LSR里的值會(huì)改變是嗎?
某同學(xué):如果不變,也不判斷實(shí)在不明讀它有什么意義
瑞生:這個(gè)意義,我已經(jīng)說(shuō)過(guò)了
瑞生:這一句,必須寫,我們用這一句的作用是:清除LSR寄存器
瑞生:能理解嗎?
某同學(xué):理解了,也就LSR的值改變了
瑞生:不是
瑞生:清除LSR寄存器的作用是,不要讓之前的狀態(tài)影響了下次的通信。
某同學(xué):知道了,謝謝!
瑞生:好的,不客氣!