Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите откомпилировать пример в avr-gcc (GCC) 3.4.6.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ShuraM
Нажмите для просмотра прикрепленного файлаПри попытке окомпилировать пример 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
Посмотрите в своем файле ..\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
Спасибо, попробую. Подскажите плз. с чем связано предупреждение, компилятора.
Цитата
warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type.
ReAl
Цитата(ShuraM @ Nov 16 2006, 20:18) *
Подскажите плз. с чем связано предупреждение, компилятора.
Цитата
warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type.


Похоже, не понравился модификатор типа volatile первого аргумента (выборка из str_array, который volatile). Неполное совпадение типов.
Или игнорировать, или, если хочется довести до полного отсутствия предупреждений, поставить явное приведение типа первого аргумента к (char *).
lech196
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, что немного напрягает. Подскажите пожалуйста как обыграть данную ситуацию? т.е. сделать всё правильно
Заранее спасибо за ответ!
beer_warrior
gcc весьма придирчив к небрежному написанию, иногда пожалуй чересчур.

Выхода два
1. либо снизить warning level, что не очень хорошо.
2. либо быть педантичным и четко прописывать типы или приводить их к требуемым.
void USART_sendtext(const char *buff)
void USART_sendtext((char*)&buff) // (тут не уверен)
forever failure
Вообще лучшее решение - чётко прописывать типы в аргументах функций.
В даном случае лучше было бы объявить
void USART_sendtext(const char *buff), т.к. функция не меняет данные, адресуемые указателем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.