www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

KEIL LPC2100_UARTIrq example - Napaka

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
tonko
Član
Član



Pridružen-a: Sob 25 Jun 2005 13:45
Prispevkov: 541
Aktiv.: 2.28
Kraj: Črnomelj

PrispevekObjavljeno: Sre Jan 30, 2008 9:56 pm    Naslov sporočila: icon_angry KEIL LPC2100_UARTIrq example - Napaka Odgovori s citatom

Pri uporabi Keilovega LPC2100_UARTIrq primera sem naletel na sledečo napako.

V primeru da se rx buffer zapolni in v interrupt funkciji ne more več shraniti sprejetega znaka se program zacikla v "sio_irq" funkciji, ker nikoli več ne prebere U1RBR registra in posledično tudi ne briše interrupta v U1IIR registru.

Original koda
Koda:

       case 0x04: /* Receive Data Available */
       case 0x0C: /* Character Time-Out */
         p = &rbuf;

         if (((p->in - p->out) & ~(RBUF_SIZE-1)) == 0)  //ALI RX BUFFER ŠE NI POLN
          {
            p->buf [p->in & (RBUF_SIZE-1)] = U1RBR;  //ČE JE RX BUFFER POLN U1RBR REGISTRA NIKOLI NE PREBERE ZATO V U1IIR REGISTRU OSTANE INTERRUPT SOURCE
            p->in++;
          }
         break;


Popravljena koda:
Koda:

       case 0x04: /* Receive Data Available */
       case 0x0C: /* Character Time-Out */
         p = &rbuf;

         if (((p->in - p->out) & ~(RBUF_SIZE-1)) == 0)  //ALI RX BUFFER ŠE NI POLN
          {
            p->buf [p->in & (RBUF_SIZE-1)] = U1RBR; 
            p->in++;
          }
         else
          {                         
           dummy = U1RBR;  //U1RBR MORAMO PREBRATI TUDI ČE GA NE MOREMO SHRANITI V BUFFER
          }
         break;


Ta problem se pojavi samo v primeru če podatki prihajajo hitreje kot jih beremo s funkcijo "com_getchar()".

Mogoče bo še komu prihranilo kakšno urco časa.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group