Using the Logger With an 8-Bit Microcontroller
Enabling deployment of my logging framework in resource constrained environments (Requirement #7) needs not as much, because most of the code is portable and not system specific, meaning that only the lowest part, the back-end, has to be adapted to the envisioned environment. I show the applicability in a resource-constrained environment on an 8-Bit AVR at90can128 microcontroller from Atmel using AVR-Libc as the low-level library for register access. The struct UART0at90can128 presents a new back-end, that does the initialization of UART0 in the constructor, and providing the usual operator<<()interface of a sink:
template<uint32_t baudrate, uint32_t CPU_FREQ>
struct UART0at90can128 {
UART0at90can128 () {
uint16_t value=((CPU_FREQ/8/baudrate)-1)/2;
UBRR0H = (unsigned char) (value>>8);
UBRR0L = (unsigned char) value;
/* Enable UART transmitter */
UCSR0B = ( 1 << TXEN0 );
/* Set frame format: 8N1 */
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
}
UART0at90can128 & operator<<(const char c) {
/* Wait for empty transmit buffer */
while ( !(UCSR0A & (1<<UDRE0)) );
/* Start transmittion */
UDR0 = c;
return *this;
}
};
Defining this is all, enabling the usage of the logging framework in this environment.


