\r
Compiler Code Data Notes\r
--------- ---- ---- -----\r
-IAR 5.10A C 622 48 Size optimization high (+ 64 bytes stack)\r
-AVR-GCC 4.2.2 C 716 48 -Os\r
+IAR 5.10A C 626 48 Size optimization high (+ 64 bytes stack)\r
+AVR-GCC 4.2.2 C 720 48 -Os\r
IAR 5.10A C++ 762 49 Size optimization high (+ 64 bytes stack)\r
-Codevision 2.02.6 792 48 Maximum size optimization\r
+Codevision 2.02.6 796 48 Maximum size optimization\r
AVR-GCC 4.2.2 C++ 806 50 -Os\r
-ImageCraft 7.16 Pro C 808 48 Full optimizations (-O24)\r
+ImageCraft 7.16 Pro C 806 48 Full optimizations (-O24)\r
AVR-GCC 4.2.2 C++ Obj 1574 72 -Os\r
IAR 5.10A C++ Obj 1112 65 Size optimization high (+ 63 bytes stack)\r
\r
#define ledPwmPattern GPIOR0\r
#if defined(REGISTER_BIT)\r
#define BIT_led_on REGISTER_BIT(GPIOR1,0)\r
-#define BACKLIGHT_STATUS() BIT_led_on\r
+#define IS_BACKLIGHT_ON() BIT_led_on\r
#define BACKLIGHT_OFF() BIT_led_on = 0\r
#define BACKLIGHT_ON() BIT_led_on = 1\r
#else\r
-#define BACKLIGHT_STATUS() (GPIOR1 & 0x01)\r
-#define BACKLIGHT_OFF() GPIOR1 &=~ ~0x01\r
+#define IS_BACKLIGHT_ON() (GPIOR1 & 0x01)\r
+#define BACKLIGHT_OFF() GPIOR1 &= ~0x01\r
#define BACKLIGHT_ON() GPIOR1 |= 0x01\r
#endif\r
\r
unsigned char ledPwmPos;\r
\r
if (brightness == 0) { // turn backlight off for 0 brightness\r
- if (BACKLIGHT_STATUS()) {\r
+ if (IS_BACKLIGHT_ON()) {\r
LedTimerStop();\r
ledPwmPattern = 0;\r
ledPwmCycling = 0;\r
ledPwmCycling = ledPwmPattern;\r
if (ledPwmPos >= LED_BRIGHTNESS_LEVELS-1) { // maximum brightness\r
// don't need PWM for continuously on\r
- if (BACKLIGHT_STATUS()) {\r
+ if (IS_BACKLIGHT_ON()) {\r
LedTimerStop();\r
LED_PORT |= (1<<LED_PIN);\r
}\r
} else {\r
- if (BACKLIGHT_STATUS()) {\r
+ if (IS_BACKLIGHT_ON()) {\r
LedTimerStart();\r
}\r
}\r
MCUSR = 0; // clear all reset flags\r
\r
wdt_reset();\r
+#if defined(__CODEVISIONAVR__)\r
+#pragma optsize-\r
+#endif\r
WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
WDTCSR = (1<<WDE)|(1<<WDP3)|(1<<WDP0); // 1024K cycles, 8.0sec\r
+#if defined(__CODEVISIONAVR__) && defined(_OPTIMIZE_SIZE_)\r
+#pragma optsize+\r
+#endif\r
MCUCR &= ~((1<<SM1)|(1<<SM0)); // use idle sleep mode\r
\r
LedPwmInit ();\r
cli();\r
wdt_reset();\r
MCUSR &= ~(1<<WDRF); // clear any watchdog interrupt flags\r
+\r
+#if defined(__CODEVISIONAVR__)\r
+#pragma optsize-\r
+#endif\r
WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
WDTCSR &= ~(1<<WDE); // watchdog timer off\r
+#if defined(__CODEVISIONAVR__) && defined(_OPTIMIZE_SIZE_)\r
+#pragma optsize+\r
+#endif\r
+\r
sei();\r
\r
sleep_enable();\r
\r
cli();\r
wdt_reset();\r
+\r
+#if defined(__CODEVISIONAVR__)\r
+#pragma optsize-\r
+#endif\r
WDTCSR |= (1<<WDCE)|(1<<WDE); // start timed sequence (keep old prescaler)\r
WDTCSR &= ~(1<<WDCE);\r
+#if defined(__CODEVISIONAVR__) && defined(_OPTIMIZE_SIZE_)\r
+#pragma optsize+\r
+#endif\r
+\r
sei();\r
}\r
}\r
void LcdWriteCmd (unsigned char Cmd) {\r
LcdBusyWait();\r
LCD_DATA_PORT = Cmd; // BusyWait leaves RS low in "Register mode"\r
- NOP();\r
+ NOP();\r
LCD_CONTROL_PORT |= (1<<LCD_E);\r
ENABLE_WAIT();\r
LCD_CONTROL_PORT &= ~(1<<LCD_E);\r
- NOP();\r
+ NOP();\r
LCD_CONTROL_PORT |= (1<<LCD_RS); // Set display to "Character mode"\r
}\r
\r
LcdBusyWait();\r
LCD_CONTROL_PORT |= (1<<LCD_RS); // Set display to "Character Mode"\r
LCD_DATA_PORT = c;\r
- NOP();\r
+ NOP();\r
LCD_CONTROL_PORT |= (1<<LCD_E);\r
ENABLE_WAIT();\r
LCD_CONTROL_PORT &= ~(1<<LCD_E);\r
LCD_DATA_DIR = 0x00; // Set LCD data port to inputs\r
LCD_CONTROL_PORT &= ~(1<<LCD_RS); // Set display to "Register mode"\r
LCD_CONTROL_PORT |= (1<<LCD_RW); // Put the display in the read mode\r
- NOP();\r
+ NOP();\r
do {\r
- wdt_reset();\r
+ wdt_reset();\r
LCD_CONTROL_PORT |= (1<<LCD_E);\r
ENABLE_WAIT();\r
LCDStatus = LCD_DATA_PIN_REG;\r
ISR(USART_RX_vect)\r
#endif\r
{\r
- unsigned char rx = UDR;\r
+ unsigned char rx, tmphead;\r
+\r
+ if (UCSRA & (1<<FE)) {\r
+ // framing error. Currrently, this is silently ignored\r
+ // real applications may wish to output information to LCD to indicate\r
+ // erroroneous byte received\r
+ return;\r
+ }\r
+#if HANDLE_DATA_OVER_RUN_ERROR\r
+ if (UCSRA & (1<<DOR)) {\r
+ // some applications may benefit from addind error notification for serial port data overruns\r
+ }\r
+#endif\r
+ \r
+ rx = UDR;\r
// Calculate next buffer position.\r
- unsigned char tmphead = sUartRxHead;\r
+ tmphead = sUartRxHead;\r
if (tmphead == UART_RX_BUFFER_SIZE-1)\r
tmphead = 0;\r
else\r
#if USE_CTS\r
// turn off interrupts so that if UART char ready to be stored, then storage\r
// will occur after CTS pin is set active. This allows UART ISR to set\r
- // CTS inactive if byte fills buffer after we remove current byte\r
+ // CTS inactive if byte fills buffer after we remove current byte\r
cli();\r
#endif\r
\r