ShuraM 0 14 ноября, 2006 Опубликовано 14 ноября, 2006 · Жалоба a16e2.zipПри попытке окомпилировать пример avr-gcc (GCC) 3.4.6 выдаёт кучу варнингов и ошибки, подкажите плз. как это исправить. Версия WinAvr 20060421 -------- begin -------- avr-gcc (GCC) 3.4.6 Copyright © 2006 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. Compiling: main.c In file included from main.c:16: symbol_tbl.h:5: warning: missing braces around initializer symbol_tbl.h:5: warning: (near initialization for `symbol[0]') main.c: In function `__vector_9': main.c:132: warning: implicit declaration of function `sbi' main.c: In function `spi_init': main.c:184: warning: implicit declaration of function `cbi' main.c: In function `adc_init': main.c:201: error: `ADHSM' undeclared (first use in this function) main.c:201: error: (Each undeclared identifier is reported only once main.c:201: error: for each function it appears in.) main.c: In function `main': main.c:214: warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type main.c:215: warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type main.c:216: warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type main.c:217: warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type main.c:218: warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type main.c:233: warning: assignment discards qualifiers from pointer target type main.c:242: warning: implicit declaration of function `PRG_RDB' make: *** [main.o] Error 1 Build failed with 3 errors and 11 warnings... В проиложении файл проекта. Пример взят отсюда: http://www.vga-avr.narod.ru/main_rus.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Laksus 0 15 ноября, 2006 Опубликовано 15 ноября, 2006 · Жалоба Посмотрите в своем файле ..\WinAVR\avr\include\avr\iom16.h определение битов регистра SFIOR. Если iom16.h очень древний (WinAVR20040404), то увидите: /* SFIOR */ #define ADTS2 7 #define ADTS1 6 #define ADTS0 5 #define ADHSM 4 #define ACME 3 #define PUD 2 #define PSR2 1 #define PSR10 0 А если поновее: /* The ADHSM bit has been removed from all documentation, as being not needed at all since the comparator has proven to be fast enough even without feeding it more power. */ #define SFIOR _SFR_IO8(0x30) #define PSR10 0 #define PSR2 1 #define PUD 2 #define ACME 3 #define ADTS0 5 #define ADTS1 6 #define ADTS2 7 То есть, насколько я понимаю, надо просто закомментировать строку: // SFIOR = 1<<ADHSM;// High speed conversion mode _______________ Александр 2006 11 15 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ShuraM 0 16 ноября, 2006 Опубликовано 16 ноября, 2006 · Жалоба Спасибо, попробую. Подскажите плз. с чем связано предупреждение, компилятора. warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 16 ноября, 2006 Опубликовано 16 ноября, 2006 · Жалоба Подскажите плз. с чем связано предупреждение, компилятора. warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type. Похоже, не понравился модификатор типа volatile первого аргумента (выборка из str_array, который volatile). Неполное совпадение типов. Или игнорировать, или, если хочется довести до полного отсутствия предупреждений, поставить явное приведение типа первого аргумента к (char *). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lech196 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 (изменено) · Жалоба AVR Studio 4.12 build 460 WinAVR 20070122 ATmega32 В разделе объявления глобальных переменных объявлено: const char com_readsms[] = "AT+CMGR="; Существует следующая функция отправляющая строку по USART: void USART_sendtext(char *buff) { for(;*buff;) { while(!(UCSRA & (1<<UDRE))); UDR = *buff++; } } Вызываю её: USART_sendtext(com_readsms); При этом компилятор выдаёт warning: ../i2c_master_gsm.c:487: warning: passing argument 1 of 'USART_sendtext' discards qualifiers from pointer target type В принципе данная конструкция работает, однако таких варнингов набралось уже около 200, что немного напрягает. Подскажите пожалуйста как обыграть данную ситуацию? т.е. сделать всё правильно Заранее спасибо за ответ! Изменено 26 апреля, 2007 пользователем lech196 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба gcc весьма придирчив к небрежному написанию, иногда пожалуй чересчур. Выхода два 1. либо снизить warning level, что не очень хорошо. 2. либо быть педантичным и четко прописывать типы или приводить их к требуемым. void USART_sendtext(const char *buff) void USART_sendtext((char*)&buff) // (тут не уверен) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forever failure 0 26 апреля, 2007 Опубликовано 26 апреля, 2007 · Жалоба Вообще лучшее решение - чётко прописывать типы в аргументах функций. В даном случае лучше было бы объявить void USART_sendtext(const char *buff), т.к. функция не меняет данные, адресуемые указателем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться