|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
AVR GCC warning 求教 |
| 作者:blackhill 欄目:單片機 |
本人做一GCC MEGA8 測試程序如下: #include <stdio.h> #include <avr/io.h> #include <avr/EEPROM.html">EEPROM.h> void (*bootload)(void)=0x1C00; void main( void ) { EEPROM.html">EEPROM_read_byte(0x04); } 編譯后有如下內(nèi)容 -------- begin -------- avr-gcc (GCC) 3.4.3 COPYRIGHT (C) 2004 Free SOFTWARE Foundation, Inc. This is free SOFTWARE; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Size before: demo.elf : section size addr .text 126 0 .data 2 8388704 .bss 0 8388706 .noinit 0 8388706 .EEPROM.html">EEPROM 0 8454144 .debug_aranges 20 0 .debug_pubnames 40 0 .debug_info 159 0 .debug_abbrev 111 0 .debug_line 222 0 .debug_str 106 0 Total 786 AVR MEMORY Usage: ----------------- DEVICE: atMEGA8 Program: 128 bytes (1.6% Full) (.text + .data + .bootloader) Data: 2 bytes (0.2% Full) (.data + .bss + .noinit) Compiling: demo.c avr-gcc -c -mmcu=atMEGA8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=demo.lst -std=gnu99 -MD -MP -MF .dep/demo.o.d demo.c -o demo.o demo.c:10: warning: initialization makes pointer from integer without a cast demo.c:14: warning: return type of 'main' is not `int' demo.c: In function `main': demo.c:15: warning: passing arg 1 of `EEPROM.html">EEPROM_read_byte' makes pointer from integer without a cast Linking: demo.elf avr-gcc -mmcu=atMEGA8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=demo.o -std=gnu99 -MD -MP -MF .dep/demo.elf.d demo.o --OUTPUT demo.elf -Wl,-Map=demo.map,--cref -lm Creating load file for FLASH: demo.hex avr-objcopy -O ihex -R .EEPROM.html">EEPROM demo.elf demo.hex Creating load file for EEPROM: demo.eep avr-objcopy -j .EEPROM.html">EEPROM --set-section-flags=.EEPROM.html">EEPROM="alloc,load" \ --change-section-lma .EEPROM.html">EEPROM=0 -O ihex demo.elf demo.eep Creating Extended Listing: demo.lss avr-objdump -h -S demo.elf > demo.lss Creating Symbol Table: demo.sym avr-nm -n demo.elf > demo.sym Size after: demo.elf : section size addr .text 126 0 .data 2 8388704 .bss 0 8388706 .noinit 0 8388706 .EEPROM.html">EEPROM 0 8454144 .debug_aranges 20 0 .debug_pubnames 40 0 .debug_info 136 0 .debug_abbrev 96 0 .debug_line 222 0 .debug_str 97 0 Total 739 AVR MEMORY Usage: ----------------- DEVICE: atMEGA8 Program: 128 bytes (1.6% Full) (.text + .data + .bootloader) Data: 2 bytes (0.2% Full) (.data + .bss + .noinit) -------- end -------- 其中有以下警告內(nèi)容,應(yīng)該如何消除,請高手指教 demo.c:10: warning: initialization makes pointer from integer without a cast demo.c:14: warning: return type of 'main' is not `int' demo.c: In function `main': demo.c:15: warning: passing arg 1 of `EEPROM.html">EEPROM_read_byte' makes pointer from integer without a cast |
| 2樓: | >>參與討論 |
| 作者: hudaidai 于 2005/12/7 9:53:00 發(fā)布:
可以改成這樣 #include <stdio.h> #include <avr/io.h> #include <avr/eeprom.h> void (*bootload)(void)=(void*)0x1C00; int main(void) { eeprom_read_byte((uint8_t*)0x04); } 其中將0x1c00轉(zhuǎn)換成函數(shù)指針用了一個偷懶的辦法,正規(guī)方法應(yīng)該是typedef一個函數(shù)指針類型。 typedef void (*PFUNC)(void); void (*bootload)(void)=(PFUNC)0x1C00; 不過好像麻煩了點。。。 另:消除掉所有警告確實是很重要的良好編程習(xí)慣。 * - 本貼最后修改時間:2005-12-7 9:54:40 修改者:hudaidai |
|
| 3樓: | >>參與討論 |
| 作者: blackhill 于 2005/12/7 10:17:00 發(fā)布:
多謝多謝! |
|
| 4樓: | >>參與討論 |
| 作者: blackhill 于 2005/12/7 10:19:00 發(fā)布:
照您的指導(dǎo),果然搞定,我想了好幾天了,多謝 |
|
| 5樓: | >>參與討論 |
| 作者: qjy_dali 于 2005/12/8 16:08:00 發(fā)布:
其實就是要看懂E文 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |