Witam proboje skompilować kod PDU z pewnego ebooka według mnie brakuje tutaj makrodefinicji #include ... tylko jakiej prosze o pomoc
Jeżeli coś innego jest powodem błedów w Win-Avr prosze o pomoc z góry dziękuje.
Błędy WinAvr:
code char CPIN[] = "AT+CPIN=1643"; //wprowadzenie numeru PIN
code char CHOOSEMEM[] = "AT+CPMS="; //wybór domy lnej ś lokalizacji pamięci
code char ECHOOFF[] = "ATE0"; //wyłączenie echa komendy AT
code char SETNOTICE[] = "AT+CNMI=1,1,0,2"; //ustawienie sposobu powiadamiania
code char NOTICE[] = "+CMTI:"; //powiadomienie o nowym SMS
code char SMSDEL[] = "AT+CMGD="; //usunięcie SMS z pamięci
code char SMSREAD[] = "AT+CMGR="; //odczyt SMS z pamięci
code char SMSSEND[] = "AT+CMGS="; //wysłanie SMS
code char LOSCA = 0x07; //Długość numeru SCA+1
code char TOSCA = 0x91; //Typ numeracji SCA
code char SCA[] = "8406010013F0"; //Centrum Usług (tu dla sieci Plus GSM)
code char FO = 0x11; //Pierwszy oktet dla wysyłanego SMS
code char MR = 0x00; //Numer odniesienia dla komunikatu
code char LODA = 0x0B; //Liczba cyfr numeru telefonu ODBIORCA
code char TODA = 0x91; //Numeracja międzynarodowa dla CU i ODBIORCA
code char DA[] = "8406630364F1"; //Odbiorca wiadomości SMS
code char PID = 0x00; //Identyfikator protokołu (tekst)
code char DCS = 0x00; //Schemat kodowania
code char SCTS = 0x8F; //Okres ważności 12 godzin
idata char UDbuf[320]; //Bufor dla komunikatu SMS
//Definicje nagłówków funkcji programu
char in(idata char *bufor);
char out(idata char *bufor);
char status(idata char *bufor);
char on(idata char *bufor);
char off(idata char *bufor);
char help(idata char *bufor);
typedef struct //Definicja typu dla tablicy - wykazu poleceń
{
char code *komenda;
char (code *funkcja)(idata char*);
}komendy;
code komendy wykaz[] = //Wykaz komend i powiązanych z nimi funkcji
{
"IN", in,
"OUT", out,
"STATUS", status,
"ON", on,
"OFF", off,
"HELP", help,
"?", help,
"", NULL //Koniec wykazu
};
//wyszukiwanie komend oraz wywo anie odpowiadaj ł ących im funkcji
char command(char data *bufor)
{
char i, j; //256 komend o maks. długości 256 znaków
for (i = 0;;)
for (j = 0;; )
{
if(wykaz[i].komenda[j] != 0) //jeśli komenda różna od znaku "pustego"
{ //do porównania zamiana liter na duże
if(((wykaz[i].komenda[j]^bufor[j]) & 0x5F) == 0)
{
j++;
continue; //następny znak
}
i++;
break; //następna komenda
}
if( j == 0 )
{ //brak komendy w wykazie
printf("%s\n","BLAD: Nie rozpoznano komendy!");
return(0);
} else
return (wykaz[i].funkcja(bufor+j)); //wykonanie funkcji spod wskazanego adresu
}
//zamiana dwubajtowej liczby – łańcucha znaków na typ unsigned int
WORD str2num(generic char *addr)
{
data char temp[2];
WORD num;
temp[0] = *addr;
temp[1] = *(addr+1);
sscanf(temp, "%X", &num);
return (num);
}
//odbiór wiadomości SMS
void receivesms(generic char *tekst)
{
WORD i;
char ch_1, ch_2, n, pos;
data char temp[20];
generic char *ptr;
ptr = tekst; //bufor do zapami tywania ę tekstu - rezultatu
gets(tekst); //oczekiwanie na powiadomienie zgodne z NOTICE
if (strncmp(tekst, &NOTICE, 6) == 0)
{
sscanf((tekst+12), "%i", &i); //wyodrębnienie indeksu w pamięci
printf("%s%c%c\n",CHOOSEMEM,*(tekst+8),*(tekst+9)); //wybór pamięci z SMS
gets(temp); //pobranie informacji o statusie CPMS
gets(temp); //pobranie OK
printf("%s%i\n", SMSREAD, i);
gets(tekst); //pobranie SMS
gets(temp); //pobranie OK
printf("%s%i\n", SMSDEL, i); //usunięcie SMS z pamięci telefonu
gets(temp); //pobranie OK
i = str2num(tekst); //przesunięcie wskaźnika poza numer centrum usług
tekst += 2 * i + 4; //i pierwszy oktet
i = str2num(tekst); //przesunięcie wskaźnika poza pola: typ n-ru
tekst += 22 + i + i % 2; //nadawcy, nr nadawcy, identyfikator protokołu,
//schemat kodowania, znacznik czasu
i = str2num(tekst); //wyznaczenie długości łańcucha
tekst += 2; //wskazanie do pierwszej pozycji tekstu SMS
while (pos < i) //dopóki nie przekroczono rozmiaru łańcucha
{
ch_1 = str2num(tekst); //zamiana łańcucha na kod znaku
n = pos % 8; //obliczenie liczby przesunięć dla 1-go znaku
ch_1 <<= n; //przesunięcie 1-go znaku w lewo n razy
ch_1 += ch_2; //maskowanie najstarszego bitu oraz uwzględnienie
ch_1 &= 0x7F; // bitów przeniesienia (przy kodowaniu)
*ptr = ch_1; //zapis wyliczonego kodu znaku do bufora
ptr++; //następna pozycja w buforze
n = 7 - n; //wyliczenie ilości przesunięć następnego znaku
ch_2 = str2num(tekst) >> n; //dla odzyskania bitów „utraconych” przy
//kodowaniu
if (n == 0) //cyklicznie - 8 znak brany jest w całości
{
ch_2 = 0;
tekst -= 2;
}
pos++; //następna pozycja w dekodowanym ciągu
tekst += 2;
}
*ptr = 0; //zapis znaku końca łańcucha
}
}
//wysłanie wiadomości SMS
void sendsms(generic char *tekst)
{
char len, i, n, ch_1, ch_2;
n = len = strlen(tekst); //obliczenie długości łańcucha znaków
i = n / 8; //licząc od "pierwszego oktetu"
n = i * 7 + i % 8 + 13;
printf("%s%d\n", SMSSEND, n);
while(_getkey() != '>'); //oczekiwanie na znak "zachęty"
printf("%02X%02X%s%02X%02X%02X%02X%s%02X%02X%02X%02X", \\
LOSCA, TOSCA, SCA, FO, MR, LODA, TODA, DA, PID, DCS, SCTS, len);
i = 0;
while (i < len)
{
ch_1 = *(tekst + i); //pobranie pierwszego znaku tekstu
ch_2 = *(tekst + i + 1); //pobranie następującego za nim znaku
n = i % 8; //obliczenie ilości przesunięć
ch_1 >>= n; //przesunięcie pierwszego znaku w prawo
n = 7-n; //wyliczenie liczby przesunięć dla 2-go znaku
ch_2 <<= n; //przesunięcie drugiego znaku w lewo
ch_1 += ch_2; //wyliczenie kodu nowo powstałego znaku
printf("%02X", ch_1); //wysłania znaku szesnastkowego
i++; //następna pozycja w łańcuchu
if (n == 1) i++; //dla każdego 8-go znaku przesunięcie o 1,
//znak jest "gubiony"
}
putchar(0x1A); //wysłanie znaku końca EOT+CR+LF
putchar(0x0D);
}Jeżeli coś innego jest powodem błedów w Win-Avr prosze o pomoc z góry dziękuje.
Błędy WinAvr:
Cytat:PDU.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:3: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:6: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:7: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:9: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:10: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:13: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:20: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
PDU.c:22: error: expected ')' before 'char'
PDU.c:23: error: expected ')' before 'char'
PDU.c:24: error: expected ')' before 'char'
PDU.c:25: error: expected ')' before 'char'
PDU.c:26: error: expected ')' before 'char'
PDU.c:27: error: expected ')' before 'char'
PDU.c:30: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
PDU.c:33: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'komendy'
PDU.c:45: error: expected ';', ',' or ')' before '*' token
PDU.c:137: error: stray '\' in program
make.exe: *** [PDU.o] Error 1