Перейти к содержанию
    

Помогите откомпилировать пример в avr-gcc (GCC) 3.4.6.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в своем файле ..\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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, попробую. Подскажите плз. с чем связано предупреждение, компилятора.

warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите плз. с чем связано предупреждение, компилятора.

warning: passing arg 1 of `strcpy_P' discards qualifiers from pointer target type.

Похоже, не понравился модификатор типа volatile первого аргумента (выборка из str_array, который volatile). Неполное совпадение типов.

Или игнорировать, или, если хочется довести до полного отсутствия предупреждений, поставить явное приведение типа первого аргумента к (char *).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, что немного напрягает. Подскажите пожалуйста как обыграть данную ситуацию? т.е. сделать всё правильно

Заранее спасибо за ответ!

Изменено пользователем lech196

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

gcc весьма придирчив к небрежному написанию, иногда пожалуй чересчур.

 

Выхода два

1. либо снизить warning level, что не очень хорошо.

2. либо быть педантичным и четко прописывать типы или приводить их к требуемым.

void USART_sendtext(const char *buff)

void USART_sendtext((char*)&buff) // (тут не уверен)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще лучшее решение - чётко прописывать типы в аргументах функций.

В даном случае лучше было бы объявить

void USART_sendtext(const char *buff), т.к. функция не меняет данные, адресуемые указателем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...