logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C]PDU nie działa brak makrodefinicji

pawelek1990 20 Wrz 2010 12:54 1635 2
REKLAMA
  • #1 8530669
    pawelek1990
    Poziom 10  
    Witam proboje skompilować kod PDU z pewnego ebooka według mnie brakuje tutaj makrodefinicji #include ... tylko jakiej prosze o pomoc

    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
  • REKLAMA
  • #2 8530807
    szelus
    Poziom 34  
    Primo, to nie jest kompletny program, a tylko fragment z funkcjami dotyczącymi PDU. Nagłówków oczywiście brakuje.
    Secundo, ten kod w ogóle nie wygląda na przygotowany dla AVR. Aby go skompilować będziesz musiał przystosować wywołania funkcji bibliotecznych do interfejsu AVR libc oraz doczytać o korzystaniu z pamięci programu do przechowywania danych na AVR.
  • #3 8530871
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA