программа такая:
Код
#include <avr/io.h>
#include <avr/interrupt.h> //Для доступа к функции sei()
#include <avr/signal.h> //Для доступа к макросу INTERRUPT
//Определяем одиннадцать выводимых строк (последняя - на тот случай, если был принят не цифровой символ)
char str0[] = "Zero";
char strl[] = "One";
char str2[] = "Two";
char str3[] = "Three";
char str4[] = "Four";
char str5[] = "Five";
char str6[] = "Six";
char str7[] = "Seven";
char str8[] = "Eight";
char str9[] = "Nine";
char strDefault[] = "Not digit";
unsigned char queueC, sendC; //Индексы текущего и переданного символа
unsigned char queue[50]; //Очередь
ISR(USART0_TX_vect) //Подпрограмма обработки прерывания при завершении передачи очередного символа.
{ //Если был передан не последний символ, то передаем текущий и увеличиваем счетчик переданных данных на 1
if (queueC != sendC) UDR = queue[sendC++];
}
//Функция формирования очереди символов из строки
void SendStr(char *s)
{
queueC =0; //Текущий символ - первый
sendC = 1; //Первый символ считаем уже переданным
queue[queueC++] = 0x0D; //Добавляем в конец очереди символы
queue[queueC++] = 0x0A; // возврата каретки и переноса строки. Просматриваем строку и помещаем в очередь символы.
while (*s) queue[queueC++] = *s++;
UDR = queue[0]; //Передаем первый символ, чтобы начать процесс
}
int main (void){
char с;
UCR = 0x58;
UBRR = 0x33;
sei(); //Общее разрешение прерываний
while(1) //Бесконечный цикл
{
if (UCR & 0x80) //Если UART принял символ от ПК,...
{
с = UDR;
switch (с) //Анализируем символ и выводим соответствующую
{ //строку через UART
case '0': SendStr(str0); break;
case '1': SendStr(strl); break;
case '2': SendStr(str2); break;
case '3': SendStr(str3); break;
case '4': SendStr(str4); break;
case '5': SendStr(str5); break;
case '6': SendStr(str6); break;
case '7': SendStr(str7); break;
case '8': SendStr(str8); break;
case '9': SendStr (str9); break;
default: SendStr(strDefault);
}
}
}
}
лог ошибок такой:
Цитата
> "make.exe" all
-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright © 2008 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 C: test3.c
avr-gcc -c -mmcu=atmega16a -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test3.lst -std=gnu99 -MMD -MP -MF .dep/test3.o.d test3.c -o test3.o
In file included from test3.c:3:
c:/winavr/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
test3.c:20: warning: 'USART0_TX_vect' appears to be a misspelled signal handler
test3.c: In function 'main':
test3.c:37: error: stray '\361' in program
test3.c:37: warning: useless type name in empty declaration
test3.c:38: error: 'UCR' undeclared (first use in this function)
test3.c:38: error: (Each undeclared identifier is reported only once
test3.c:38: error: for each function it appears in.)
test3.c:39: error: 'UBRR' undeclared (first use in this function)
test3.c:45: error: stray '\361' in program
test3.c:45: error: expected expression before '=' token
test3.c:46: error: stray '\361' in program
test3.c:46: error: expected expression before ')' token
make.exe: *** [test3.o] Error 1
> Process Exit Code: 2
> Time Taken: 00:01
вот например
Цитата
test3.c:37: error: stray '\361' in program
Код
char с;
что тут не так?