AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
15.03.2014, 17:38
|
|
Частый гость
Регистрация: 01.09.2010
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Ошибки при компиляции программы в СodeVision
здравствуйте, я только разбираюсь
вот программа по пересылке данных по UART из книги да АВР студио4
для аттини2313
#include ‹avr/io.h› //средства ввода/вывода периферии контроллера. Заголовочный файл подключает определения "ввода / вывода" для устройства, используемого в проекте (Project-›Configuration options-›Device)
#include ‹string.h›//для работы со строками, в данной программе для использования функции вычисления длинны строки strlen
//начало функция инициализации UART
void UART_INIT()
{
UCR|=(1‹‹3);//в третий бит (TXEN) записали единицу, этим мы разрешили работу передатчика
UBRR=0x17;//23(dec) скорость передачи 9600 бод при частоте мк 3.6864Мгц
}
//конец функция инициализации UART
//НАЧАЛО основная программа(функция)
int main(void)
{
UART_INIT(); /* инициализировать(т.е. задать как UART будит работать) приемопередатчик UART */
static char stroka[37]="привет, это твой микроконтроллер =)\r\n";//массив байт char stroka[] будит содержать предложение для отправки, обращаться к элементам массива(байтам), можно так stroka[3] в этом байте хранится символ 'в'. Массив будит состоять из 37 элементов от 0 до 36 включительно, 37 элемент символ конца строки "stroka[37]=0x00"
//переменная будит хранить количество байт содержащиеся в массиве байт
static int dlina_stroki=0;
dlina_stroki = strlen(stroka);//определяем количество байт массива stroka, при помощи функции strlen и присваиваем количество переменной dlina_stroki
int i=0;//переменная i будит содержать индекс байта массива, подлежавшего для отправки
//НАЧАЛО бесконечный цикл
while(1)
{
if(USR&(1‹‹5) && i‹dlina_stroki)//если регистр ввода вывода UDR пуст и текущий байт что мы сейчас отправляем не последний, тогда
{
UDR = stroka[i];//передать через UART один байт
i=i+1;//перейти к следующему байту
}
}
//КОНЕЦ бесконечный цикл
}
//КОНЕЦ основная программа(функция)
не получается ее скомпелировать в кодевижн
выдает такие ошибки
Error: D:\Temp\AVR\USART_A\USART_A.c(19): too many initializers
Error: D:\Temp\AVR\USART_A\USART_A.c(27): must declare first in block
подскажите пожалуйста что нужно сделать, а то застрял на этом
|
|
|
|
15.03.2014, 17:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
Сообщение от kkozz
|
вот программа по пересылке данных по UART из книги да АВР студио4 для аттини2313
....
не получается ее скомпелировать в кодевижн
|
ну и откомпилируйте в AVRStudio
|
|
|
|
15.03.2014, 17:44
|
|
Частый гость
Регистрация: 01.09.2010
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
пробоавл, тоже кучу ошибок выдает, но там я вообще ничего не понимаю.
похоже еще какой-то инклюд подключить надо.
|
|
|
|
15.03.2014, 17:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
Сообщение от kkozz
|
пробоавл, тоже кучу ошибок выдает
|
похоже, это исходник для AT90S2313, а не для аттини2313
|
|
|
|
15.03.2014, 18:08
|
|
Частый гость
Регистрация: 01.09.2010
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
Сообщение от Ara41
|
охоже, это исходник для AT90S2313, а не для аттини2313
|
точно, но разве он не может работать на ATtiny2313?
до этого делал пердачу одного символа через УАРТ, все работало.
значит дело в файле string.h
может какой-то другой нужно подключить?
|
|
|
|
15.03.2014, 18:14
|
|
Частый гость
Регистрация: 01.09.2010
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
в АВР студио исправил проц на AT90S2313 и все скомпилировалось )
теперь хочется осилить для CV.
и с другой стороны, я ведь использую ATtiny2313.
|
|
|
|
15.03.2014, 18:53
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2009
Сообщений: 609
Сказал спасибо: 37
Сказали Спасибо 140 раз(а) в 72 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
kkozz, в кодевижене определение переменных должно идти в начале функции.
Error: D:\Temp\AVR\USART_A\USART_A.c(27): must declare first in block
а у тебя UART_INIT(); стоит перед определением переменных
|
|
|
|
15.03.2014, 19:25
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,856
Сказал спасибо: 2,532
Сказали Спасибо 11,771 раз(а) в 5,896 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
kkozz, воспользуйтесь Wizard-ом, он создаст "рыбу" с инициализациями контроллера. И там будет указано "Здесь глобальные переменные" и "Здесь локальные переменные". Он очень не любит объявление переменных где попало.
Есть там некоторые вкусности, генерируемые автоматом. Поэкспериментируйте.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
15.03.2014, 19:25
|
|
Частый гость
Регистрация: 01.09.2010
Сообщений: 11
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
переделал
Код:
|
#include ‹io.h›
#include ‹string.h›//для работы со строками, в данной программе для использования функции вычисления длинны строки strlen
int i;//переменная i будит содержать индекс байта массива, подлежавшего для отправки
char stroka[37];
int dlina_stroki;
//начало функция инициализации UART
void UART_INIT()
{
UCR|=(1‹‹3);//в третий бит (TXEN) записали единицу, этим мы разрешили работу передатчика
UBRR=0x17;//17(dec) скорость передачи 9600 бод при частоте мк 4Мгц
}
//конец функция инициализации UART
//НАЧАЛО основная программа(функция)
void main(void)
{
UART_INIT(); /* инициализировать(т.е. задать как UART будит работать) приемопередатчик UART */
stroka = "привет, это твой микроконтроллер =)\r\n";
//переменная будит хранить количество байт содержащиеся в массиве байт
dlina_stroki = strlen(stroka);//определяем количество байт массива stroka, при помощи функции strlen и присваиваем количество переменной dlina_stroki
i=0;
//НАЧАЛО бесконечный цикл
while(1)
{
if(USR&(1‹‹5) && i‹dlina_stroki)//если регистр ввода вывода UDR пуст и текущий байт что мы сейчас отправляем не последний, тогда
{
UDR = stroka[i];//передать через UART один байт
i=i+1;//перейти к следующему байту
}
}
//КОНЕЦ бесконечный цикл
}
//КОНЕЦ основная программа(функция) |
теперь ошибка такая Error: D:\Temp\AVR\USART_A\USART_A.c(21): the expression must be a modifiable lvalue
|
|
|
|
15.03.2014, 19:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: ошибки при компиляции программы в СodeVision
методом тыка скомпилировать исходник для одного контроллера под другой у Вас получится не сразу =)
Сравните заголовочные файлы двух контроллеров, особенно обратив внимание на символьные имена, касающиеся UART.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:14.
|
|