Am 16.11.2011 18:35, schrieb Sergio Campamá:
> Ok, I got it working now...
> 
> With the interrupt disable/enable in putchar, as in the following code, the
> app never crashes
> 
> __dint();
>     while(! (UC0IFG & UCA0TXIFG));
>     UCA0TXBUF = character;
>     UC0IFG &= ~UCA0TXIFG;

this flag is cleared automatically by the hardware (just delete that line).

and the order you doing it here could have bad consequences too. in case
the CPU is run very slowly and the UART is very fast, the byte could be
completely sent before you clear the flag so for the next round it would
lock forever as the TXIFG won't get set again.

the same problem could occur if the hardware uses a buffer and is ready
again immediately after the write to the TX buffer. The MSP430 UART
module actualy has a buffer (internal shift register and the value
mapped to the TXD/RXD memory locations).  so this could explain if you
had problems with this code while interrupts are enabled...


>     __eint();
> 
> I think with this, printf CAN be called from interrupts...

this version could have unfortunate effects.. the EINT at the end
enables interrupts - even within an interrupt handler. so nested
interrupts are allowed...

functions that lock interrupts and should be safe for use in interrupts
and foreground best use the critical function attribute:

__attribute__((critical)) int putchar(int c) {...}

that way, the compiler will generate code to disable the interrupts and
restore that state afterwards.

anyway, even if putchar works from interrupts, if foreground and
interrupts output data at the "same time" you'll get a weird mix of
characters on the receiver's side of the wire...

chris

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure 
contains a definitive record of customers, application performance, 
security threats, fraudulent activity, and more. Splunk takes this 
data and makes sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-novd2d
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to