|
發(fā)布時(shí)間: 2009-7-15 16:50
正文摘要:#define WIDTH 1024 #define HIGH 768 void clr_scr(void) { unsigned long ... |
必須都加long才行。 |
右式第一個(gè)參數(shù)為long型就可以了。 |
keil c 用 long類型得十分注意才行啊。 |
void cursor(unsigned int x,y) //設(shè)置顯存地址 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 } |
瞎猜的,不知道KEIL有沒有這樣的設(shè)置 |
有沒有設(shè)置成最嚴(yán)格的警告方式? |
keil c51真的很垃圾,int32 不讓用,純粹是想斷單片機(jī)的后路。 |
這幾個(gè)警告沒用,都是我注釋掉的函數(shù)。 |
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). |
這是一個(gè)很好討論, 請問一下wangkj,編譯器難道沒有警告嗎? 要是沒有警告的話, 應(yīng)該就算編譯器的BUG了吧? |
應(yīng)該還是 那類問題吧~? 8位機(jī)確實(shí)比較費(fèi)勁~ |
>>> hex(0x201*1024+0x201)='0x80601' 把0x80丟了! |
有出錯(cuò)了,還是int 32的問題,高16bit丟了! void cursor(unsigned int x,y) //設(shè)置顯存地址 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 } |
建議ls讀一下《Unix編程藝術(shù)》 你就知道那些東西不過爾爾~ 做硬件的跟純做軟件的專業(yè)水準(zhǔn)是比不了的 哈哈~ |
這幾天看了21上單片機(jī)版面的置頂貼,講程序優(yōu)化的,感覺前人總結(jié)的 高內(nèi)聚,低耦合,模塊功能要單純 真是經(jīng)典 呵呵,跑題了 |