單片機(jī)的浮點(diǎn)與定點(diǎn)
》市面上大部分的單片機(jī)都是定點(diǎn)單片機(jī)帚戳,只有一些對(duì)數(shù)據(jù)處理要求比較高的單片機(jī)才會(huì)集成浮點(diǎn)處理單元。
- 浮點(diǎn)單片機(jī):便于浮點(diǎn)編程儡首,省去了人為定標(biāo)的麻煩片任,而且同樣的位數(shù),浮點(diǎn)可以表示更大范圍內(nèi)的數(shù)蔬胯。但浮點(diǎn)單片機(jī)硬件復(fù)雜对供、功耗更大,價(jià)格也會(huì)相應(yīng)高些;
- 定點(diǎn)單片機(jī):定點(diǎn)運(yùn)算處理效率高产场、大小更小鹅髓、功耗更低、內(nèi)存占用小京景,但需要人為地給各個(gè)數(shù)據(jù)定標(biāo)。
工程算法開發(fā)流程
image
選擇合適的定標(biāo)值,以確保運(yùn)算結(jié)果在符合應(yīng)用要求的范圍之內(nèi)爆安,這是定點(diǎn)化過程中最重要也是最難的一個(gè)問題烦却。
選取合適的定標(biāo)值(加載操作數(shù))
- 定標(biāo)的大小,影響著整數(shù)部分和小數(shù)部分的位數(shù)鄙皇,定標(biāo)的過程其實(shí)是在操作數(shù)動(dòng)態(tài)范圍和精度之間做權(quán)衡的過程:Q小芜赌,則表示范圍大;Q大伴逸,則精度高缠沈。
- 設(shè)一個(gè)變量可能出現(xiàn)的最大絕對(duì)值為 | max|,n 為正整數(shù)违柏,滿足 2^(n-1) < |max| < 2^n博烂,則定標(biāo) Q 按如下規(guī)則選取最合適:
Q = 有效數(shù)據(jù)位 – n
對(duì)于 32 位的有符號(hào)數(shù),數(shù)據(jù)有效位 = 31漱竖。如 | max| = 2.75禽篱,選 Q = 31 – 2 =29 是最合適的。
結(jié)果重新定標(biāo)(返回結(jié)果)
個(gè)定點(diǎn)數(shù)運(yùn)算完成之后馍惹,所得結(jié)果的定標(biāo)躺率、動(dòng)態(tài)范圍、精度要求等都可能發(fā)生了變化万矾,因此可能需要進(jìn)行重新定標(biāo)悼吱。
比如 Q15*Q15 -> Q30,但我們依然希望得到一個(gè) Q15 的數(shù)怎么辦良狈?其實(shí)只需做一個(gè)簡單的右移 15 位操作就好后添,其它情況同理。
定點(diǎn)與浮點(diǎn)芯片相互支持
- 浮點(diǎn)芯片均能支持定點(diǎn)運(yùn)算薪丁,只是在一般定點(diǎn)芯片的基礎(chǔ)上添加了額外的浮點(diǎn)處理硬件單元和指令遇西,使得芯片得以支持快速的浮點(diǎn)運(yùn)算;
- 定點(diǎn)芯片也能支持浮點(diǎn)運(yùn)算严嗜。很多編譯器都為定點(diǎn)芯片提供了相應(yīng)的浮點(diǎn)處理庫粱檀,通過軟件的方式同樣來支持 float 型變量的操作。但這樣做會(huì)使計(jì)算變得很低效漫玄,在實(shí)時(shí)性要求高的情況下茄蚯,定點(diǎn)化依然是必不可少的一環(huán)。