国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網

標題: 循環直接跳過,貌似溢出了,但是我用的是32bit類型啊! [打印本頁]

作者: wangkj    時間: 2009-7-15 16:50
標題: 循環直接跳過,貌似溢出了,但是我用的是32bit類型啊!
#define     WIDTH       1024
#define     HIGH        768

void clr_scr(void)
{
   unsigned long int i;
   for (i=0;i<(unsigned long int)(WIDTH*HIGH*8*2);i++)
   {
         MOSI=0;
      SPCK=1;
      SPCK=0;
   }
}

循環直接跳過,貌似溢出了,但是我用的是32bit類型啊!
作者: wangkj    時間: 2009-7-15 16:51
難道每個數字后面都跟個L?但是,非32bit類型咋辦?
定義兩個?
作者: 宇宙飛船    時間: 2009-7-15 17:00
可用sizeof ( unsigned long int) 測試編譯器對unsigned long int支持的長度。
作者: wangkj    時間: 2009-7-15 17:02
這個倒是沒問題,應該是32bit的。
作者: wangkj    時間: 2009-7-15 17:02
(WIDTH*HIGH*8*2) 強制成32bit才是關鍵。
作者: 宇宙飛船    時間: 2009-7-15 17:05
老王別教壞小朋友了。
作者: wangkj    時間: 2009-7-15 17:06
版主跑哪里去了,香腸呢?這都是51高手啊。
作者: wangkj    時間: 2009-7-15 17:07
程序源碼

src.rar

50.06 KB, 下載積分: 積分 -1


作者: wangkj    時間: 2009-7-15 17:08
昨天是 for(i=0;i<97;i++) for(j<0;j<255;j++) for(k<0;k<255;k++) 這樣清屏的
這樣速度最快!
但是,最開始用的就是32bit int,是正常的。
這個俺想不起來咋辦了。

難道都需要增加  L  標志符?

模擬執行,鼠標右鍵,選擇顯示匯編代碼。
作者: Netjob    時間: 2009-7-15 17:26
哈哈,估計樓主用ADS吧?  ADS有這個稀里糊涂的毛病。
作者: wangkj    時間: 2009-7-15 17:26
addr的值是0!!!!

clr_scr.jpg (14.1 KB)

clr_scr.jpg

作者: wangkj    時間: 2009-7-15 17:30
不用宏,照樣!

clr_scr2.jpg (9.33 KB)

clr_scr2.jpg

作者: Netjob    時間: 2009-7-15 17:34
幫樓主在 ADS1.2 下 軟件仿真,沒問題。 圖:

WKJ-1.JPG (59.56 KB)

WKJ-1.JPG

作者: wangkj    時間: 2009-7-15 17:39
俺這個是keil c,51的軟件。
你用arm的系統,純32位的,當然沒問題了。

或許,換個別的版本的編譯器,也沒準正常,俺這個是keil c 8.18的。
作者: Netjob    時間: 2009-7-15 17:47
這個 擺明就是數據溢出了, 對 數據異常的 判斷 編譯器都作  FALSE 處理!?
作者: 本分書生    時間: 2009-7-15 17:59
來順(31726560) 17:43:38
我想應該是編譯是解釋的次序問題
來順(31726560) 17:54:50
已經找到錯誤了,是宏定義的問題
應該寫為#defined WITH 1024L
注意L必須加
來順(31726560) 17:55:30
應為keil是先算1024*768*8*2,然后才轉換為long,所以編譯出了問題



問題可以終結了
作者: 本分書生    時間: 2009-7-15 18:01
也就是說要keil要寫成1024L*768L*8*2
作者: phoenixmy    時間: 2009-7-15 18:06
學習了

很有價值,頂
作者: wangkj    時間: 2009-7-15 18:36
或許,寫成8L * 2 * 1024 * 768也沒準可以。
作者: wangkj    時間: 2009-7-15 19:04
另外,誰有簡單的圖形測試程序,51下的,給我一份。
類似turbo c的bgi demo就行。或者更簡單也好。
例如畫線,園,三角方塊等等的。
作者: phoenixmy    時間: 2009-7-15 19:45
可以多試試

加了L應該就沒有問題
作者: wangkj    時間: 2009-7-16 08:45
果然可以了,只需要最前面,加上 1L * 就可以!

clr_scr3.jpg (12.24 KB)

clr_scr3.jpg

作者: phoenixmy    時間: 2009-7-16 09:18
看來keil會把define中的內容默認為最匹配的數據類型,挺節約的,呵呵
作者: 一朝成名    時間: 2009-7-16 09:28
看來以后宏定義也要注明類型
太繁瑣了~
作者: phoenixmy    時間: 2009-7-16 09:33
其實這樣做并不是繁瑣,呵呵,看來keil還是很聰明的,為了幫助節省資源,會自動選擇數據類型,只是用的時候要小心
作者: phoenixmy    時間: 2009-7-16 09:33
這幾天看了21上單片機版面的置頂貼,講程序優化的,感覺前人總結的
高內聚,低耦合,模塊功能要單純
真是經典


呵呵,跑題了
作者: 一朝成名    時間: 2009-7-16 09:38
建議ls讀一下《Unix編程藝術》
你就知道那些東西不過爾爾~

做硬件的跟純做軟件的專業水準是比不了的  哈哈~
作者: wangkj    時間: 2009-7-16 09:47
有出錯了,還是int 32的問題,高16bit丟了!

void cursor(unsigned int x,y)  //設置顯存地址 8M 尋址空間。
{
   //int i;
   union
   {
      unsigned long int addr;
          unsigned int addr_HL[2];
   } addr_union;
   addr_union.addr=1L*y*WIDTH+x;
   EA0=1;//set cmd status
   //addr=272*y+x;
   spi_write16(addr_union.addr_HL[1]);  
   spi_write16(addr_union.addr_HL[0]);  

   EA0=0;//set data status        PutCmd(0);//reset display ram pointer to 0
}
作者: wangkj    時間: 2009-7-16 09:48
>>> hex(0x201*1024+0x201)='0x80601'

把0x80丟了!
作者: wangkj    時間: 2009-7-16 09:50
結果輸出的圖。

int32_1.jpg (14.93 KB)

int32_1.jpg

int32_1.jpg (14.93 KB)

int32_1.jpg

作者: Netjob    時間: 2009-7-16 10:00
應該還是 那類問題吧~?  8位機確實比較費勁~
作者: machunshui    時間: 2009-7-16 10:04
這是一個很好討論,

請問一下wangkj,編譯器難道沒有警告嗎?

要是沒有警告的話,

應該就算編譯器的BUG了吧?
作者: wangkj    時間: 2009-7-16 10:10
51 vga的圖片,vga部分的接口引出,可以不用板載的51

img026.jpg (15 KB)

img026.jpg

作者: wangkj    時間: 2009-7-16 10:11
Build target 'Target 1'
compiling serial.c...
compiling vga51.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?GET_CHAR?SERIAL
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?CO?SERIAL
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?NOP?VGA51
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?UDELAY?VGA51
Program Size: data=213.1 xdata=0 code=985
creating hex file from "vga51"...
"vga51" - 0 Error(s), 4 Warning(s).
作者: wangkj    時間: 2009-7-16 10:12
這幾個警告沒用,都是我注釋掉的函數。
作者: wangkj    時間: 2009-7-16 10:13
keil c51真的很垃圾,int32 不讓用,純粹是想斷單片機的后路。
作者: machunshui    時間: 2009-7-16 10:14
有沒有設置成最嚴格的警告方式?
作者: machunshui    時間: 2009-7-16 10:15
瞎猜的,不知道KEIL有沒有這樣的設置
作者: wangkj    時間: 2009-7-16 10:19
源碼在附件中。

src.rar

50.76 KB, 下載積分: 積分 -1


作者: wangkj    時間: 2009-7-16 10:25
void cursor(unsigned int x,y)  //設置顯存地址 8M 尋址空間。
{
   //int i;
   union
   {
      unsigned long int addr;
          unsigned int addr_HL[2];
   } addr_union;
   addr_union.addr=1L*(long)y*WIDTH+(long)x;
   EA0=1;//set cmd status
   //addr=272*y+x;
   spi_write16(addr_union.addr_HL[1]);  
   spi_write16(addr_union.addr_HL[0]);  

   EA0=0;//set data status        PutCmd(0);//reset display ram pointer to 0
}
作者: wangkj    時間: 2009-7-16 10:26
addr_union.addr=1L*(long)y*WIDTH+(long)x;

加上 long 強制轉換就能搞定!

int32_2.jpg (11.83 KB)

int32_2.jpg

作者: wangkj    時間: 2009-7-16 10:27
keil c 用 long類型得十分注意才行啊。
作者: 李冬發    時間: 2009-7-20 13:18
右式第一個參數為long型就可以了。
作者: wangkj    時間: 2009-7-20 15:32
必須都加long才行。




歡迎光臨 電子工程網 (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 四虎免费观看| 亚欧日韩| 在线观看91精品国产剧情免费| 亚洲视频一二区| 在线精品欧美日韩| 性俱乐部纵欲狂欢小说| 亚洲第一区精品观看| 曰批免费视频播放免费| 躁逼| 主人给的100个调教任务| 51国产午夜精品免费视频| a级毛片高清免费视频| 狠狠撸亚洲视频| 日韩视频中文在线一区| 午夜理论在线观看不卡大地影院| 我的奶头被客人吸的又肿又红| 亚洲国产在线精品国| 亚洲一级生活片| 日本免费成人网| 色综合久久夜色精品国产| 青青久在线| 日日噜噜噜夜夜爽爽狠狠视频| 色五丁香| 五月网婷婷| 在线天堂中文在线网| 婷婷色五月另类综合视频| 亚洲欧美另类综合| 伊人青青久| 99久久就热视频精品草| 国产AV精品白浆一区二| 麻花传媒MD0044视频| 日韩精品一区二区三区AV在线观看| 又黄又粗又爽免费观看| 亚洲美女视频免费| 欧美成人视| 日韩高清的天堂在线观看免费| 深夜成人福利| 亚洲国内| 四虎网址在线观看| 伊人久久影视| 拔萝卜在线高清观看视频|