www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]最近在調(diào)試單片機(jī)程序,總是遇到一些開(kāi)始認(rèn)為不可思議的事情,后來(lái)解決了問(wèn)題后發(fā)現(xiàn),都是因?yàn)樽约簳?shū)寫(xiě)程序不嚴(yán)謹(jǐn),其主要原因是沒(méi)有注意c語(yǔ)言的數(shù)據(jù)類(lèi)型的數(shù)據(jù)范圍。對(duì)有符號(hào)、無(wú)符號(hào)數(shù)據(jù)的使用存在誤區(qū),對(duì)類(lèi)型轉(zhuǎn)換

最近在調(diào)試單片機(jī)程序,總是遇到一些開(kāi)始認(rèn)為不可思議的事情,后來(lái)解決了問(wèn)題后發(fā)現(xiàn),都是因?yàn)樽约簳?shū)寫(xiě)程序不嚴(yán)謹(jǐn),其主要原因是沒(méi)有注意c語(yǔ)言的數(shù)據(jù)類(lèi)型的數(shù)據(jù)范圍。

對(duì)有符號(hào)、無(wú)符號(hào)數(shù)據(jù)的使用存在誤區(qū),對(duì)類(lèi)型轉(zhuǎn)換理解不到位。下面就舉例一一說(shuō)明:

1:一個(gè)簡(jiǎn)單的for循環(huán),但因?yàn)閿?shù)據(jù)溢出導(dǎo)致進(jìn)入死循環(huán),無(wú)法實(shí)現(xiàn)相應(yīng)功能。

unsigned char i;

for(i=0;i<256;i++)

語(yǔ)句;

咋看起來(lái)這語(yǔ)句沒(méi)有什么問(wèn)題。但仔細(xì)考慮發(fā)現(xiàn),i在此循環(huán)中會(huì)溢出,i的值 0---255---0----255----0-----------。

2:在循環(huán)里還需要注意的是有符號(hào)數(shù)和無(wú)符號(hào)數(shù)進(jìn)行比較時(shí):


unsigned char i;

i=230;

if(i>-5)

當(dāng)無(wú)符號(hào)和有符號(hào)數(shù)進(jìn)行比較時(shí),會(huì)把無(wú)符號(hào)數(shù)轉(zhuǎn)換為有符號(hào)數(shù),i=230轉(zhuǎn)換成有符號(hào)數(shù)是-26 因此if條件不成立。

3:使用printf或sprintf時(shí),注意要打印的數(shù)值的數(shù)據(jù)類(lèi)型,否則打印出來(lái)的不是你需要的。

4:注意在各個(gè)函數(shù)參數(shù)或者其他賦值時(shí)的數(shù)據(jù)類(lèi)型的默認(rèn)轉(zhuǎn)換。考慮清楚的類(lèi)型不匹配時(shí),和默認(rèn)類(lèi)型轉(zhuǎn)換不符時(shí),可以使用強(qiáng)制類(lèi)型轉(zhuǎn)換。

5:昨天調(diào)試一個(gè)單片機(jī)漢字顯示程序時(shí),遇到數(shù)據(jù)簡(jiǎn)單運(yùn)算結(jié)果不對(duì)的情況。

uchar ch0,ch1;

uint32offset;

offset=(uint32) (HZ_BASE_ADDR+((((ch0 - 1) * 94) + (ch1 - 1))*32)); 這個(gè)語(yǔ)句算出的結(jié)果不對(duì),開(kāi)始不理解,后來(lái)發(fā)現(xiàn)還是數(shù)據(jù)類(lèi)型的問(wèn)題。原因是ch0是無(wú)符號(hào)字符類(lèi)型的,因此((ch0 - 1) * 94) 的結(jié)果溢出。導(dǎo)致出錯(cuò)。修正方案:offset=(uint32) (HZ_BASE_ADDR+((((ch0 - 1) * 94L) + (ch1 - 1))*32L)); 添加強(qiáng)制轉(zhuǎn)換,把立即數(shù)強(qiáng)制為long int型數(shù)據(jù),根據(jù)c語(yǔ)言默認(rèn)數(shù)據(jù)類(lèi)型提升方案,其他參與運(yùn)算的數(shù)值也轉(zhuǎn)換為long int型。問(wèn)題解決。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在數(shù)字電路設(shè)計(jì)和驗(yàn)證領(lǐng)域,Verilog作為一種廣泛使用的硬件描述語(yǔ)言(HDL),其數(shù)據(jù)類(lèi)型系統(tǒng)豐富多樣,為設(shè)計(jì)者提供了強(qiáng)大的表達(dá)能力和靈活性。掌握Verilog的數(shù)據(jù)類(lèi)型,對(duì)于編寫(xiě)高效、可維護(hù)的硬件描述代碼至關(guān)重要。本...

關(guān)鍵字: Verilog 數(shù)據(jù)類(lèi)型 數(shù)字電路

單片機(jī)內(nèi)部有很多的特殊功能寄存器,每個(gè)寄存器在單片機(jī)內(nèi)部都分配有唯一的地址,一般我們會(huì)根據(jù)寄存器功能的不同給寄存器賦予各自的名稱(chēng),當(dāng)我們需要在程序中操作這些特殊功能寄存器時(shí),必須要在程序的最前面將這些名稱(chēng)加以聲明,聲明的...

關(guān)鍵字: C51 數(shù)據(jù)類(lèi)型 擴(kuò)充定義

數(shù)據(jù)元(Data Element),也稱(chēng)為數(shù)據(jù)元素,是用一組屬性描述其定義、標(biāo)識(shí)、表示和允許值的數(shù)據(jù)單元,在一定語(yǔ)境下,通常用于構(gòu)建一個(gè)語(yǔ)義正確、獨(dú)立且無(wú)歧義的特定概念語(yǔ)義的信息單元。數(shù)據(jù)元可以理解為數(shù)據(jù)的基本單元,將若...

關(guān)鍵字: C51 數(shù)據(jù)類(lèi)型

Perl是一種弱類(lèi)型語(yǔ)言,所以變量不需要指定類(lèi)型,Perl解釋器會(huì)根據(jù)上下文自動(dòng)選擇匹配類(lèi)型。Perl有三個(gè)基本的數(shù)據(jù)類(lèi)型:標(biāo)量、數(shù)組、哈希。以下是這三種數(shù)據(jù)類(lèi)型的說(shuō)明:序號(hào)類(lèi)型和描述1標(biāo)量標(biāo)量是Perl語(yǔ)言中最簡(jiǎn)單的一...

關(guān)鍵字: 數(shù)據(jù)類(lèi)型

寫(xiě)在前面單片機(jī)中有看門(mén)狗,長(zhǎng)時(shí)間不喂狗,程序就會(huì)復(fù)位。為什么長(zhǎng)時(shí)間不喂狗呢?是因?yàn)槌绦蚺茱w了,拋開(kāi)外部因素不談,今天和大家分享一下單片機(jī)程序跑飛的幾個(gè)原因。在編寫(xiě)單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序...

關(guān)鍵字: 單片機(jī)程序

▼點(diǎn)擊下方名片,關(guān)注公眾號(hào)▼在編寫(xiě)單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序總是跑飛,最后費(fèi)了好長(zhǎng)時(shí)間,花了很大功夫才找到問(wèn)題原因,由此總結(jié)了單片機(jī)程序跑飛的三種現(xiàn)象、原因及解決方法。01、數(shù)組越界/溢出...

關(guān)鍵字: 單片機(jī)程序

寫(xiě)在前面單片機(jī)中有看門(mén)狗,長(zhǎng)時(shí)間不喂狗,程序就會(huì)復(fù)位。為什么長(zhǎng)時(shí)間不喂狗呢?是因?yàn)槌绦蚺茱w了,拋開(kāi)外部因素不談,今天和大家分享一下單片機(jī)程序跑飛的幾個(gè)原因。在編寫(xiě)單片機(jī)程序的時(shí)候,由于中斷服務(wù)程序?qū)懙牟缓?,?dǎo)致單片機(jī)程序...

關(guān)鍵字: 單片機(jī)程序

對(duì)程序進(jìn)行優(yōu)化,通常是指優(yōu)化程序代碼或程序執(zhí)行速度。優(yōu)化代碼和優(yōu)化速度實(shí)際上是一個(gè)予盾的統(tǒng)一。一般是優(yōu)化了代碼的尺寸,就會(huì)帶來(lái)執(zhí)行時(shí)間的增加;如果優(yōu)化了程序的執(zhí)行速度,通常會(huì)帶來(lái)代碼增加的副作用。很難魚(yú)與熊掌兼得,只能在...

關(guān)鍵字: 單片機(jī)程序

隨著大數(shù)據(jù)基礎(chǔ)技術(shù)的逐漸完善,大數(shù)據(jù)發(fā)展進(jìn)入應(yīng)用階段,但是由于發(fā)展時(shí)間晚以及數(shù)字化基礎(chǔ)相對(duì)薄弱,我國(guó)大數(shù)據(jù)產(chǎn)業(yè)尚處于初級(jí)階段。面對(duì)如此龐大激增的數(shù)據(jù)量,常規(guī)軟件無(wú)法在一定時(shí)間內(nèi)實(shí)現(xiàn)數(shù)據(jù)的捕捉、管

關(guān)鍵字: 大數(shù)據(jù) 數(shù)據(jù)處理 數(shù)字化 數(shù)據(jù)類(lèi)型

北京時(shí)間5月6日消息,一項(xiàng)新的研究分析了今年228個(gè)國(guó)家或地區(qū)1GB移動(dòng)數(shù)據(jù)的費(fèi)用,印度憑借極度低廉的費(fèi)用再度穩(wěn)坐榜單第一,而中國(guó)(內(nèi)地)的排名從2019年的第165名飆升至第12名,1GB移動(dòng)數(shù)據(jù)的

關(guān)鍵字: GB 移動(dòng)數(shù)據(jù) 數(shù)據(jù)類(lèi)型
關(guān)閉