亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標(biāo)題: 分享在Keil C51中遇到的一個小bug的解決過程 [打印本頁]

作者: hushe    時間: 2015-12-22 18:55
標(biāo)題: 分享在Keil C51中遇到的一個小bug的解決過程
用Keil C51編寫一個遍歷LED多段數(shù)碼管的所有管腳的程序,想使用sprintf函數(shù)把實(shí)際運(yùn)行時的數(shù)值顯示出來,結(jié)果遇到一個很奇怪的問題,就是顯示的數(shù)值并不是參數(shù)的實(shí)際數(shù)值。程序如下:

#include "stc15.h"
#include "stdio.h"

char myBuf[50];
void main(void)
{
    unsigned char i1,i2,i3;        //這個定義導(dǎo)致的sprintf出錯,并且移位操作也顯得異常。
    unsigned int tp;
   
    for (tp=0; tp<4096;tp++) {
        sprintf(myBuf, "nP=%#x:", tp);
        SendString(myBuf);     //通過串口把數(shù)值顯示出來。
       //P2.0-P2.4
        i1 = tp & 0x1F;
        P2 &= 0xE0;
        P2 |= i1;
        sprintf(myBuf, "P2=%#x:", i1);
        SendString(myBuf);

        //P4.5-P4.7
        P4 &= 0x1F;
        i2 = ((tp>>5) & 0x7)<<5;
        P4 |= i2;
        sprintf(myBuf, "P4=%#x: ", i2);
        SendString(myBuf);
      
        //P3.4-P3.7   
        P3 &= 0x0F;
        i3 = (tp>>8)<<4;
        P3 |= i3;
        sprintf(myBuf, "P3=%#x\r\n", i3);
        SendString(myBuf);
      
        delay(4000);
    }
}
以上的運(yùn)行結(jié)果,nP, P2,P3,P4都是0xFFFF類似的格式,而不是所期望的0xFF。如下所示:
Test Uart at 115200.
nP=0x0:P2=0x0:P4=0x0: P3=0x0
nP=0x1:P2=0x101:P4=0x1: P3=0x1
nP=0x2:P2=0x202:P4=0x2: P3=0x2
nP=0x3:P2=0x303:P4=0x3: P3=0x3
nP=0x4:P2=0x404:P4=0x4: P3=0x4
nP=0x5:P2=0x505:P4=0x5: P3=0x5
......
......
nP=0x1d7:P2=0x17d7:P4=0x6d7: P3=0x1d7
nP=0x1d8:P2=0x18d8:P4=0x6d8: P3=0x1d8
nP=0x1d9:P2=0x19d9:P4=0x6d9: P3=0x1d9
nP=0x1da:P2=0x1ada:P4=0x6da: P3=0x1da
nP=0x1db:P2=0x1bdb:P4=0x6db: P3=0x1db
這個問題折騰了將近1天的時間,最后發(fā)現(xiàn)把i1,i2,i3的定義由unsigned char修改為unsigned int,這個問題就消失了。究其原因,是因?yàn)閟printf函數(shù)中的x變量是整數(shù)型的,在C51中把unsigned char變量發(fā)送時,就出現(xiàn)了錯誤。

具體原因不清楚,算不算Keil C51編譯器的Bug呢?這里用的是Keil C51 9.54a。







歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1