 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
tonko Član


Pridružen-a: Sob 25 Jun 2005 13:45 Prispevkov: 541 Aktiv.: 2.28 Kraj: Črnomelj
|
Objavljeno: Sre Jan 30, 2008 9:56 pm Naslov sporočila: KEIL LPC2100_UARTIrq example - Napaka |
|
|
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 |
|
 |
|
|
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
|