專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

小談標(biāo)志位 如何釋放CPU

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月01日   【字體:


許久沒有發(fā)了,分享下最近的感悟。如有錯(cuò)誤的地方往指正,互相學(xué)習(xí),哈哈。廢話不多說,入正題,今天就Modbus說一下。
        對(duì)于modbus相信大家并不陌生,我不知道大家怎么寫的,我也希望大家有好 寫法提供參考,那是不勝感激的。在此感謝這段時(shí)間大家的幫助,如孫工,韓工,等等。本次講解就是在孫工的基礎(chǔ)上建立的,硬件是用的STM8S系列,
這里直說串口接收中斷與定時(shí)器中斷,




以前是這么寫的,用到了一個(gè)定時(shí)器,一個(gè)UART串口,咱先不說stm8   如果用在STC芯片上,那可是很昂貴的,本身就三個(gè)定時(shí)器,一個(gè)UART用,還需要一個(gè)定時(shí)器輔助,就剩下可憐的一個(gè)定時(shí)器了。這只是個(gè)通訊啊大哥,其他的工作科怎么做。反復(fù)的看,反復(fù)的改,是不是可以這樣啊,work();這個(gè)函數(shù)拿出來,再寫一個(gè)函數(shù),在這個(gè)函數(shù)里面包含著它,建立屬于它的標(biāo)志位,于是出來下邊這個(gè)版本,









我們分析下這樣的好處,首先用了標(biāo)志位后可以與其他函數(shù)共享定時(shí)器,節(jié)約了資源,接下里是省去了 開關(guān)定時(shí)器的繁瑣步驟。效率自然就上去了。接著往下看,在485通訊時(shí)是否遇到過返回?cái)?shù)組不全的問題,(接收的前段數(shù)據(jù)時(shí)正確的),我遇到過,在STM8 上邊,為什么呢,愿意在于DE端的控制上,還未發(fā)送完成就關(guān)閉的發(fā)送使能,程序如下未改正前。



發(fā)現(xiàn)問題后你可能會(huì)這么改。如下


哈哈,成功返回所有數(shù)據(jù),高枕無憂了。是嗎?我咋么覺得這個(gè)延時(shí)這么礙眼啊,配合簡(jiǎn)單的任務(wù)可能不會(huì)出問題,如果1S通訊10次的話你還能笑出來嗎?
那會(huì)你應(yīng)該考慮怎么改良一下那,繼續(xù)往下看 ,再用標(biāo)志位,




仔細(xì)看的會(huì)發(fā)現(xiàn)  DE端的控制跟work()寫在一塊了,給發(fā)送完成提供了充足的時(shí)間,又把CPU騰出來干別的事情,一舉兩得吧,哈哈,這樣通訊50/s次表示無壓力,再往下說,是不是遇到過調(diào)試通訊無返回的情況,是不是還不知道問題出來那一塊,好吧,我們不如加點(diǎn)指示的東西,學(xué)習(xí)下人家TCPIP,加一個(gè)通訊指示燈,怎么加呢,是不是會(huì)這樣。


這里就不寫用延時(shí)手段或者是再各定時(shí)器的寫法了,以上這個(gè)寫法通訊時(shí)會(huì)起到指示作用,也很節(jié)約CPU,但是他接收錯(cuò)誤數(shù)據(jù)時(shí)也會(huì)指示,作用不是很好,再看一下放在哪里好呢,恩  下邊這里,







 好了   就到這里,有什么不對(duì) 地方麻煩指正,這里先謝謝。 純屬個(gè)人見解獻(xiàn)丑了

關(guān)閉窗口

相關(guān)文章