WinAvr в вопросах и ответах
- Сообщения: 3
- Зарегистрирован: Пт июн 03, 2011 17:14:24
- Реклама
- Сообщения: 360
- Зарегистрирован: Чт авг 12, 2010 10:16:32
проблема
установил 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 дабы всё скомпилилось и работало на нём?
DDB4 означает 4-бит регистра DDRB - вас не смущает, что у выбранного вами контроллера физически отсутсвует 4-й бит этого порта? если не смущает, вы можете описать упомянутую константу при помощи #define
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 360
- Зарегистрирован: Чт авг 12, 2010 10:16:32
хм...... точно
но не смущает у меня там ничего не объявлено!
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
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
../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)
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
... а кому компилятор пишет tiny24.h: No such file or directory ? ... поэтому и "не объявлено".dinets писал(а):хм...... точно
но не смущает у меня там ничего не объявлено!
- Реклама
Всем добрый вечер!
Есть пару вопросов по 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 спасибо за ответ теперь понятно по поводу прерывания
А на счет отправки и приема какой то команды подскажите пожалуйста
А на счет отправки и приема какой то команды подскажите пожалуйста
так что за проблема-то? вы показали код функций из даташита - что еще нужно? пользуйтесь ими. не забудьте только, что кроме этой пары есть еще пара для инициализации мастера и приемника.alex1991 писал(а):А на счет отправки и приема какой то команды подскажите пожалуйста
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Вот весь код Мастера он должен отправлять слейву команду 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
} };
INTERRUPT(SIG_SPI) - устарело, надо использовать макрос ISR(xxxx_vect) - см. документацию WinAVR
этот код будет посылать 255 непрерывно и постоянно.
в остальном будет работать. правда, я не увидел настройки прерываний и их разрешения, но это не обязательно
Код: Выделить всё
while (1){
SPI_MasterTransmit(255);//отправка слейву 255
}в остальном будет работать. правда, я не увидел настройки прерываний и их разрешения, но это не обязательно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV у меня пока код без прерывания будет если что потом добавлю а пока попытаться хоть что то отправить
Тогда со слейв-ом буду разбираться если с мастером все нормально
Тогда со слейв-ом буду разбираться если с мастером все нормально
- Сообщения: 2
- Зарегистрирован: Сб июл 16, 2011 21:37:29
Скачал последний 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. Причём не важно какой код (мой или готовый, с любого сайта).
Подскажите, пожалуйста что я делаю не так?
Вероятно, make.exe просто не видит makefile. Может, не в том каталоге запускается.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Сообщения: 2
- Зарегистрирован: Сб июл 16, 2011 21:37:29
Всмысле? А в какой каталог нужно кидать проект?avreal писал(а):Может, не в том каталоге запускается.
У меня есть опрос по 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Сама програмка (
Код: Выделить всё
#include <avr/io.h>
int main(void)
{
while(1);
return 0;
}Я не Сашок!!!
попробуйте использовать такой формат запуска 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= напишите ваш МК, как для проекта задано
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 134
- Зарегистрирован: Вс авг 01, 2010 16:05:25
А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?ARV писал(а):формально char это не uint8_t вот и все.
char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а):А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?ARV писал(а):формально char это не uint8_t вот и все.
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.
делайте выводы сами
битва с дураками проиграна, победители торжествуют. слава победителям!
- Сообщения: 134
- Зарегистрирован: Вс авг 01, 2010 16:05:25
Спасибо, интересно было узнать.Мастер Ломастер писал(а):char и int - это аппаратно-зависимые типы, рамерность которых меняется от платформы к платформе. например, в компьютерных сисиемах int 32-битный, а в микроконтроллерах - 16 битный. а в системах DEC (могу ошибаться) char тоже 16-битный.TICLIR писал(а): А в чём разница между ними, по мне как то проще писать int, char и т.д, да компилятор подсвечивает?
поэтому исходник одной и той же программы будет работать с int-ами и всем прочим (все остальные типы являются производными от размерности int) абсолютно по-разному на разных платформах. чтобы исключить такую путаницу специально в стандарте C99 были введены типы строгой размерности uint8_t - 8-битный без знака, int8_t - 8-битный со знаком (аналог char в большинстве случаев), int16_t - 16-битное со знаком и т.д. Компиляторы, поддерживающие этот стандарт (WinAVR - как раз такой) генерируют правильный код для правильной размерности на любой платформе.
делайте выводы сами


