找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2479|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

請教各位單片機(jī)開中斷能用除法嗎?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:343102 發(fā)表于 2022-1-7 08:26 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
看單片機(jī)說明,中斷會干擾浮點運(yùn)算。問題來了,除法是浮點運(yùn)算嗎?開中斷時能用嗎?若不能用,顯示各位數(shù)字時怎么辦?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1000469 發(fā)表于 2022-1-7 09:37 | 只看該作者
看變量類型,整型變量除法的就是整型
回復(fù)

使用道具 舉報

板凳
ID:661945 發(fā)表于 2022-1-7 10:13 | 只看該作者
除法是不是浮點運(yùn)算跟你定義的變量類型有關(guān)系的,如果是定義浮點數(shù)才是浮點運(yùn)算~~~
回復(fù)

使用道具 舉報

地板
ID:343102 發(fā)表于 2022-1-7 10:39 | 只看該作者
城夫子 發(fā)表于 2022-1-7 09:37
看變量類型,整型變量除法的就是整型

謝謝回復(fù)。
不過,有關(guān)說明指出,不支持浮點運(yùn)算的單片機(jī)可以用軟件模擬運(yùn)算,但是如果運(yùn)算中被中斷打斷,是無法恢復(fù)的,這樣連結(jié)果都無法得到,就不用說結(jié)果取整了。
回復(fù)

使用道具 舉報

5#
ID:343102 發(fā)表于 2022-1-7 10:41 | 只看該作者
wuwei520 發(fā)表于 2022-1-7 10:13
除法是不是浮點運(yùn)算跟你定義的變量類型有關(guān)系的,如果是定義浮點數(shù)才是浮點運(yùn)算~~~

你說的是運(yùn)算結(jié)果還是運(yùn)算過程?
回復(fù)

使用道具 舉報

6#
ID:624769 發(fā)表于 2022-1-7 11:12 來自觸屏版 | 只看該作者
你要先明白什么叫浮點運(yùn)算,如果你單片機(jī)沒有硬件浮點運(yùn)算器,是無法進(jìn)行浮點遠(yuǎn)算的。所謂的模擬浮點運(yùn)算,也不是浮點運(yùn)算,而是用整形運(yùn)算,來幫你算出用浮點運(yùn)算才能得到的結(jié)果。
回復(fù)

使用道具 舉報

7#
ID:57657 發(fā)表于 2022-1-7 11:54 | 只看該作者
模擬一次浮點運(yùn)算需要幾百上千條指令,中斷觸發(fā)后會將一些運(yùn)算有關(guān)的寄存器push進(jìn)去,返回后再全部pop出來繼續(xù)運(yùn)算。
回復(fù)

使用道具 舉報

8#
ID:879348 發(fā)表于 2022-1-7 11:59 | 只看該作者
你沒搞明白是怎么回事,影響是中斷在變量運(yùn)算半途進(jìn)入中斷又改變了你運(yùn)算的變量,要軟件處理,比如運(yùn)算結(jié)束前禁止中斷或者運(yùn)算的變量不要用中斷的變量,而是重新賦值新變量去運(yùn)算
回復(fù)

使用道具 舉報

9#
ID:401564 發(fā)表于 2022-1-7 12:51 | 只看該作者
看單片機(jī)說明,中斷會干擾浮點運(yùn)算。問題來了,你是在哪里看到這個說明的?
在中斷中用大量浮點運(yùn)算會干擾中斷才是的,所以,不要在中斷中使用大量浮點運(yùn)算
你說反了
回復(fù)

使用道具 舉報

10#
ID:343102 發(fā)表于 2022-1-7 14:03 | 只看該作者
wufa1986 發(fā)表于 2022-1-7 11:59
你沒搞明白是怎么回事,影響是中斷在變量運(yùn)算半途進(jìn)入中斷又改變了你運(yùn)算的變量,要軟件處理,比如運(yùn)算結(jié)束 ...

看來只有這位朋友知道我說的是什么。
不過,有些時候是不允許停止中斷的,例如使用外中斷計數(shù)。
最好能知道軟件除法的代碼,待我上網(wǎng)搜搜看。
回復(fù)

使用道具 舉報

11#
ID:1000530 發(fā)表于 2022-1-7 14:07 | 只看該作者
能用除法,一般沒什么問題,肯定是哪里耦合,而不是除法耦合,除法的運(yùn)算時間比較長也是存在的事實
回復(fù)

使用道具 舉報

12#
ID:962286 發(fā)表于 2022-1-7 14:20 | 只看該作者
目前應(yīng)該沒有單片機(jī)的中斷會干擾浮點運(yùn)算,因為進(jìn)中斷和出中斷都有對應(yīng)的現(xiàn)場保護(hù)和現(xiàn)場恢復(fù)。相反,如果浮點運(yùn)算是在中斷服務(wù)函數(shù)里邊運(yùn)算的話,浮點運(yùn)算是會影響中斷的時序。
而像樓主說的顯示,比如數(shù)碼管,LCD,OLED等等等顯示一些數(shù)據(jù),絕大部分環(huán)境都可以不用浮點數(shù),以免給CPU增加不必要的負(fù)擔(dān)!比如數(shù)碼管顯示37.8,可以用378來代替,自己軟件上記住數(shù)據(jù)被放大10倍就可以了。
回復(fù)

使用道具 舉報

13#
ID:845170 發(fā)表于 2022-1-7 15:27 | 只看該作者
除法是不是浮點運(yùn)算跟你定義的變量類型有關(guān)系的,需要是定義浮點數(shù)才是浮點運(yùn)算
回復(fù)

使用道具 舉報

14#
ID:57657 發(fā)表于 2022-1-7 15:43 | 只看該作者
如果堆棧出現(xiàn)了問題,別說干擾浮點計算,PC指針都能彈飛。
回復(fù)

使用道具 舉報

15#
ID:343102 發(fā)表于 2022-1-7 20:58 | 只看該作者
MCU_FANS 發(fā)表于 2022-1-7 14:20
目前應(yīng)該沒有單片機(jī)的中斷會干擾浮點運(yùn)算,因為進(jìn)中斷和出中斷都有對應(yīng)的現(xiàn)場保護(hù)和現(xiàn)場恢復(fù)。相反,如果浮 ...

有的教程明確指出,單片機(jī)浮點運(yùn)算以及不可再入函數(shù)可能會被中斷打斷終止,產(chǎn)生不可預(yù)料結(jié)果,一般不提倡使用浮點運(yùn)算。特別指出使用sin()前必須關(guān)閉中斷。
至于中斷程序,不要說非常耗時的浮點運(yùn)算,就是整數(shù)運(yùn)算也必須盡量減少。倒不是影響中斷,而是無法得到正確結(jié)果。
回復(fù)

使用道具 舉報

16#
ID:343102 發(fā)表于 2022-1-7 21:06 | 只看該作者
謝謝各位積極發(fā)言。
經(jīng)過查找發(fā)現(xiàn),兩整數(shù)模擬除法運(yùn)算并不產(chǎn)生小數(shù),而是產(chǎn)生整數(shù)的商和余數(shù),不是浮點運(yùn)算。但是模擬除法運(yùn)算非常耗時,提倡盡量少用。
回復(fù)

使用道具 舉報

17#
ID:624769 發(fā)表于 2022-1-7 21:15 | 只看該作者
風(fēng)158 發(fā)表于 2022-1-7 20:58
有的教程明確指出,單片機(jī)浮點運(yùn)算以及不可再入函數(shù)可能會被中斷打斷終止,產(chǎn)生不可預(yù)料結(jié)果,一般不提倡 ...

你 C 語言編程,還真編不出 不可再入函數(shù)來……

也許是我C語言太渣吧,反正,我C語言寫的代碼,編譯后察看M51文件,所有函數(shù)都是以?開頭的可再入函數(shù),要想編一個不可再入函數(shù),不得不通過匯編去寫。
你如果有辦法在 C 語言環(huán)境下編出不可再入函數(shù),麻煩指點一二,真的想學(xué)。
回復(fù)

使用道具 舉報

18#
ID:883242 發(fā)表于 2022-1-7 22:49 | 只看該作者
風(fēng)158 發(fā)表于 2022-1-7 20:58
有的教程明確指出,單片機(jī)浮點運(yùn)算以及不可再入函數(shù)可能會被中斷打斷終止,產(chǎn)生不可預(yù)料結(jié)果,一般不提倡 ...

你看到的教程的說法全都是錯誤的。
回復(fù)

使用道具 舉報

19#
ID:883242 發(fā)表于 2022-1-7 22:52 | 只看該作者
188610329 發(fā)表于 2022-1-7 21:15
你 C 語言編程,還真編不出 不可再入函數(shù)來……

也許是我C語言太渣吧,反正,我C語言寫的代碼,編譯后 ...

在標(biāo)準(zhǔn)c語言里面,函數(shù)局部變量是在堆棧上臨時分配的,這種函數(shù)可遞歸,可再入。但是對于8位單片機(jī)來說,這種做法消耗太大,尤其是RAM空前緊張的8051體系,所以編譯器用了非正規(guī)的快速簡潔的實現(xiàn)方法,分析函數(shù)間調(diào)用層級,給局部變量分配一個固定的地址,比如25H吧,這種函數(shù)就是不遞歸的,一旦發(fā)生了重入,被打斷的函數(shù)的局部變量被重進(jìn)函數(shù)給徹底破壞了。
回復(fù)

使用道具 舉報

20#
ID:343102 發(fā)表于 2022-1-8 00:50 | 只看該作者
好吧,我看到的教程可能是錯誤的,但是我編的程序會遵守這個教程的。另外把我看到的教程貼出來,有興趣的朋友繼續(xù)研究吧。

無標(biāo)題.png (127.09 KB, 下載次數(shù): 56)

無標(biāo)題.png
回復(fù)

使用道具 舉報

21#
ID:883242 發(fā)表于 2022-1-8 01:11 | 只看該作者
風(fēng)158 發(fā)表于 2022-1-8 00:50
好吧,我看到的教程可能是錯誤的,但是我編的程序會遵守這個教程的。另外把我看到的教程貼出來,有興趣的朋 ...

你在15樓發(fā)言中只有不可再入部分是對的,但是C51會給出錯誤信息,無法通過編譯,所以即使這個知識點是對的也是毫無價值的。

其他知識點完全錯誤。
回復(fù)

使用道具 舉報

22#
ID:526543 發(fā)表于 2022-1-8 15:01 | 只看該作者
看你自己定義的數(shù)據(jù)類型  而且中斷不干擾吧
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表