WinAvr в вопросах и ответах
Re: WinAvr в вопросах и ответах
ОК, вопрос исчерпан. Спасибо кстати за ссылку.
- Реклама
Re: WinAvr в вопросах и ответах
проблема
установил WinAVR AVR Studio
выбираю контролёр тини24
и мне пишет ошибки что переменная не объявлена
../usiuart.c:16: error: 'DDB4' undeclared (first use in this function)
меняю тип контроллера на тини 45 всё работает
посоветуйте где ему эти определения подложить и где их взять?
или каким контролёром можно подменить тини 24 дабы всё скомпилилось и работало на нём?
установил WinAVR AVR Studio
выбираю контролёр тини24
и мне пишет ошибки что переменная не объявлена
../usiuart.c:16: error: 'DDB4' undeclared (first use in this function)
меняю тип контроллера на тини 45 всё работает
посоветуйте где ему эти определения подложить и где их взять?
или каким контролёром можно подменить тини 24 дабы всё скомпилилось и работало на нём?
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
DDB4 означает 4-бит регистра DDRB - вас не смущает, что у выбранного вами контроллера физически отсутсвует 4-й бит этого порта? если не смущает, вы можете описать упомянутую константу при помощи #define
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
хм...... точно
но не смущает у меня там ничего не объявлено!
Build started 16.6.2011 at 20:51:52
avr-gcc -mmcu=attiny24 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT mainnew.o -MF dep/mainnew.o.d -c ../mainnew.c
../mainnew.c:33:20: error: tiny24.h: No such file or directory
../mainnew.c: In function 'set_ports':
../mainnew.c:40: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:40: error: (Each undeclared identifier is reported only once
../mainnew.c:40: error: for each function it appears in.)
../mainnew.c:40: error: 'DDB3' undeclared (first use in this function)
../mainnew.c:41: error: 'PORTB' undeclared (first use in this function)
../mainnew.c: At top level:
../mainnew.c:43: warning: return type of 'main' is not 'int'
../mainnew.c: In function 'main':
../mainnew.c:48: warning: ignoring #pragma optsize
../mainnew.c:49: error: 'CLKPR' undeclared (first use in this function)
../mainnew.c:59: error: 'PORTA' undeclared (first use in this function)
../mainnew.c:60: error: 'DDRA' undeclared (first use in this function)
../mainnew.c:65: error: 'PORTB' undeclared (first use in this function)
../mainnew.c:66: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:74: error: 'TCCR0A' undeclared (first use in this function)
../mainnew.c:75: error: 'TCCR0B' undeclared (first use in this function)
../mainnew.c:76: error: 'TCNT0' undeclared (first use in this function)
../mainnew.c:77: error: 'OCR0A' undeclared (first use in this function)
../mainnew.c:78: error: 'OCR0B' undeclared (first use in this function)
../mainnew.c:92: error: 'TCCR1A' undeclared (first use in this function)
../mainnew.c:93: error: 'TCCR1B' undeclared (first use in this function)
../mainnew.c:94: error: 'TCNT1H' undeclared (first use in this function)
../mainnew.c:95: error: 'TCNT1L' undeclared (first use in this function)
../mainnew.c:96: error: 'ICR1H' undeclared (first use in this function)
../mainnew.c:97: error: 'ICR1L' undeclared (first use in this function)
../mainnew.c:98: error: 'OCR1AH' undeclared (first use in this function)
../mainnew.c:99: error: 'OCR1AL' undeclared (first use in this function)
../mainnew.c:100: error: 'OCR1BH' undeclared (first use in this function)
../mainnew.c:101: error: 'OCR1BL' undeclared (first use in this function)
../mainnew.c:107: error: 'MCUCR' undeclared (first use in this function)
../mainnew.c:108: error: 'GIMSK' undeclared (first use in this function)
../mainnew.c:111: error: 'TIMSK0' undeclared (first use in this function)
../mainnew.c:113: error: 'TIMSK1' undeclared (first use in this function)
../mainnew.c:119: error: 'USICR' undeclared (first use in this function)
../mainnew.c:124: error: 'ACSR' undeclared (first use in this function)
../mainnew.c:125: error: 'ADCSRB' undeclared (first use in this function)
но не смущает у меня там ничего не объявлено!
Build started 16.6.2011 at 20:51:52
avr-gcc -mmcu=attiny24 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT mainnew.o -MF dep/mainnew.o.d -c ../mainnew.c
../mainnew.c:33:20: error: tiny24.h: No such file or directory
../mainnew.c: In function 'set_ports':
../mainnew.c:40: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:40: error: (Each undeclared identifier is reported only once
../mainnew.c:40: error: for each function it appears in.)
../mainnew.c:40: error: 'DDB3' undeclared (first use in this function)
../mainnew.c:41: error: 'PORTB' undeclared (first use in this function)
../mainnew.c: At top level:
../mainnew.c:43: warning: return type of 'main' is not 'int'
../mainnew.c: In function 'main':
../mainnew.c:48: warning: ignoring #pragma optsize
../mainnew.c:49: error: 'CLKPR' undeclared (first use in this function)
../mainnew.c:59: error: 'PORTA' undeclared (first use in this function)
../mainnew.c:60: error: 'DDRA' undeclared (first use in this function)
../mainnew.c:65: error: 'PORTB' undeclared (first use in this function)
../mainnew.c:66: error: 'DDRB' undeclared (first use in this function)
../mainnew.c:74: error: 'TCCR0A' undeclared (first use in this function)
../mainnew.c:75: error: 'TCCR0B' undeclared (first use in this function)
../mainnew.c:76: error: 'TCNT0' undeclared (first use in this function)
../mainnew.c:77: error: 'OCR0A' undeclared (first use in this function)
../mainnew.c:78: error: 'OCR0B' undeclared (first use in this function)
../mainnew.c:92: error: 'TCCR1A' undeclared (first use in this function)
../mainnew.c:93: error: 'TCCR1B' undeclared (first use in this function)
../mainnew.c:94: error: 'TCNT1H' undeclared (first use in this function)
../mainnew.c:95: error: 'TCNT1L' undeclared (first use in this function)
../mainnew.c:96: error: 'ICR1H' undeclared (first use in this function)
../mainnew.c:97: error: 'ICR1L' undeclared (first use in this function)
../mainnew.c:98: error: 'OCR1AH' undeclared (first use in this function)
../mainnew.c:99: error: 'OCR1AL' undeclared (first use in this function)
../mainnew.c:100: error: 'OCR1BH' undeclared (first use in this function)
../mainnew.c:101: error: 'OCR1BL' undeclared (first use in this function)
../mainnew.c:107: error: 'MCUCR' undeclared (first use in this function)
../mainnew.c:108: error: 'GIMSK' undeclared (first use in this function)
../mainnew.c:111: error: 'TIMSK0' undeclared (first use in this function)
../mainnew.c:113: error: 'TIMSK1' undeclared (first use in this function)
../mainnew.c:119: error: 'USICR' undeclared (first use in this function)
../mainnew.c:124: error: 'ACSR' undeclared (first use in this function)
../mainnew.c:125: error: 'ADCSRB' undeclared (first use in this function)
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: WinAvr в вопросах и ответах
... а кому компилятор пишет tiny24.h: No such file or directory ? ... поэтому и "не объявлено".dinets писал(а):хм...... точно
но не смущает у меня там ничего не объявлено!
- Реклама
-
alex1991
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Ср апр 14, 2010 20:42:24
- Откуда: Молдова г,Кишинев
Re: WinAvr в вопросах и ответах
Всем добрый вечер!
Есть пару вопросов по WinAvr
Сейчас разбираюсь со SPI и пытаюсь ради эксперимента связать две меги Atmega16-master и Atmega8-слейв и мне хотелось понять как мне отослать какие то данные в слейв тоесть какой формат кода должен быть и как в слейве проверить пришел нужные данные или нет чтоб их обработать
Вот код из даташита я так понял SPDR-регистр отвечавший за прием и отправку данных ?
А cData - сами данные
Ну вот есть у меня команда к слейву 0х10 подскажите как отправить и принять пожалуйста
Код слейва на прием
И вообше можно код мастера организовывать без прерывания или не стоит ?
Вы уж простите чайника за тупые вопросы ну если можете подскажите
Есть пару вопросов по WinAvr
Сейчас разбираюсь со SPI и пытаюсь ради эксперимента связать две меги Atmega16-master и Atmega8-слейв и мне хотелось понять как мне отослать какие то данные в слейв тоесть какой формат кода должен быть и как в слейве проверить пришел нужные данные или нет чтоб их обработать
Вот код из даташита я так понял SPDR-регистр отвечавший за прием и отправку данных ?
А cData - сами данные
Ну вот есть у меня команда к слейву 0х10 подскажите как отправить и принять пожалуйста
Код: Выделить всё
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}Код слейва на прием
Код: Выделить всё
char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)))
;
/* Return data register */
return SPDR;
}И вообше можно код мастера организовывать без прерывания или не стоит ?
Вы уж простите чайника за тупые вопросы ну если можете подскажите
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
код мастера без прерываний вполне возможен, если мастер не сильно загружен работой. а вот приемник лучше делать по прерываниям, иначе из вашей функции при остуствии приходящих данных выхода не будет...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
alex1991
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Ср апр 14, 2010 20:42:24
- Откуда: Молдова г,Кишинев
Re: WinAvr в вопросах и ответах
ARV спасибо за ответ теперь понятно по поводу прерывания
А на счет отправки и приема какой то команды подскажите пожалуйста
А на счет отправки и приема какой то команды подскажите пожалуйста
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
alex1991 писал(а):А на счет отправки и приема какой то команды подскажите пожалуйста
так что за проблема-то? вы показали код функций из даташита - что еще нужно? пользуйтесь ими. не забудьте только, что кроме этой пары есть еще пара для инициализации мастера и приемника.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
alex1991
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Ср апр 14, 2010 20:42:24
- Откуда: Молдова г,Кишинев
Re: WinAvr в вопросах и ответах
Вот весь код Мастера он должен отправлять слейву команду 255 Проверьте пожалуйста если не сложно
И вообше будет код работать ?
Код: Выделить всё
#define F_CPU 8000000
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define PORT_SS 4
#define PORT_MOSI 5
#define PORT_MISO 6
#define PORT_SCK 7
#define PORT_SPI PORTB
//#define DDR_SPI DDRB
//Функции
//******************************************************************************************
/*
INTERRUPT(SIG_SPI)
{
unsigned char data;
data = SPDR ;
//printf ("\n\r%d", data ) ;
}
*/
//Инициализация SPI_MasterInit
void SPI_MasterInit(void)
{
/* MOSI и SCK выход, остальные входы */
PORT_SPI = (1<<PORT_MOSI)|(1<<PORT_SCK);
/* Включить SPI,работает как Master, скорость SCK 125,000 kHz */
SPCR = (1<<SPE)|(1<<MSTR);
}
//Иниализация SPI_MasterTransmit
void SPI_MasterTransmit(char cData)
{
PORTB&=~_BV(PORT_SS);//сбрасываем SS в нуль
SPDR = cData;//начинаем передачу
/* Дожидаемся полной передачи */
while(!(SPSR & (1<<SPIF)));
PORTB|=_BV(PORT_SS);//поднимаем ногу SS в единицу
}
//Оснавная программа
//******************************************************************************************
int main(void) // Input/Output Ports initialization
{
DDRB = 0b11110000;
PORTB = 0b00000000;
SPI_MasterInit();// Инициализация SPI_MasterInit
while (1)
{
SPI_MasterTransmit(255);//отправка слейву 255
} };
И вообше будет код работать ?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: WinAvr в вопросах и ответах
INTERRUPT(SIG_SPI) - устарело, надо использовать макрос ISR(xxxx_vect) - см. документацию WinAVR
этот код будет посылать 255 непрерывно и постоянно.
в остальном будет работать. правда, я не увидел настройки прерываний и их разрешения, но это не обязательно
Код: Выделить всё
while (1){
SPI_MasterTransmit(255);//отправка слейву 255
}в остальном будет работать. правда, я не увидел настройки прерываний и их разрешения, но это не обязательно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
alex1991
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Ср апр 14, 2010 20:42:24
- Откуда: Молдова г,Кишинев
Re: WinAvr в вопросах и ответах
ARV у меня пока код без прерывания будет если что потом добавлю а пока попытаться хоть что то отправить
Тогда со слейв-ом буду разбираться если с мастером все нормально
Тогда со слейв-ом буду разбираться если с мастером все нормально
Re: WinAvr в вопросах и ответах
Скачал последний WinAvr, настроил его так же как и в статье на этом http://myrobot.ru/stepbystep/mc_makefile.php сайте. А для большей надёжности вообще скачал makefile из той же статьи.
И всё равно вылазет вот эта ошибка: make.exe: *** No rule to make target `all'. Stop. Причём не важно какой код (мой или готовый, с любого сайта).
Подскажите, пожалуйста что я делаю не так?
И всё равно вылазет вот эта ошибка: make.exe: *** No rule to make target `all'. Stop. Причём не важно какой код (мой или готовый, с любого сайта).
Подскажите, пожалуйста что я делаю не так?
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: WinAvr в вопросах и ответах
Вероятно, make.exe просто не видит makefile. Может, не в том каталоге запускается.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: WinAvr в вопросах и ответах
avreal писал(а):Может, не в том каталоге запускается.
Всмысле? А в какой каталог нужно кидать проект?
- sachok
- Опытный кот
- Сообщения: 849
- Зарегистрирован: Сб янв 05, 2008 11:05:15
- Откуда: Україна м.Луцьк
- Контактная информация:
Re: WinAvr в вопросах и ответах
У меня есть опрос по AVR-GCC. После компиляции проверяется величина кода, на выходе я получаю такую информацию:
Как понять сколько занято памяти МК? Я так понял что 70 байт, это верно?
Сама програмка (
) :
Код: Выделить всё
Output size is 6.04 KB
Running project post-build steps
avr-size bin/Debug/1.elf
text data bss dec hex filename
70 0 0 70 46 bin/Debug/1.elfКак понять сколько занято памяти МК? Я так понял что 70 байт, это верно?
Сама програмка (
Код: Выделить всё
#include <avr/io.h>
int main(void)
{
while(1);
return 0;
}Я не Сашок!!!
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
попробуйте использовать такой формат запуска avr-size (отредактируйте makefile):
avr-size --format=avr --mcu=attiny2313 bin/Debug/1.elf
разумеется, в --mcu= напишите ваш МК, как для проекта задано
avr-size --format=avr --mcu=attiny2313 bin/Debug/1.elf
разумеется, в --mcu= напишите ваш МК, как для проекта задано
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
ARV писал(а):формально char это не uint8_t вот и все.
А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а):ARV писал(а):формально char это не uint8_t вот и все.
А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.
делайте выводы сами
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
Мастер Ломастер писал(а):char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а):ARV писал(а):формально char это не uint8_t вот и все.
А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.
делайте выводы сами
Спасибо, интересно было узнать.


