Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
                                                                                     printf_P(PSTR("%s: Function \"%s\", Line %d: "     \
                                                                                                   "Assertion \"%s\" failed.\r\n"),     \
                                                                                                   __FILE__, __func__, __LINE__, #Condition); } }MACROE
 
                                #if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
                                        /** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
                                                                                     printf_P(PSTR("%s: Function \"%s\", Line %d: "     \
                                                                                                   "Assertion \"%s\" failed.\r\n"),     \
                                                                                                   __FILE__, __func__, __LINE__, #Condition); } }MACROE
 
                                #if !defined(pgm_read_ptr) || defined(__DOXYGEN__)
                                        /** Reads a pointer out of PROGMEM space on the AVR8 architecture. This is currently a wrapper for the
                                         *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
                                         *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
                                         *  manner.
                                         *  to a pointer variable or used in pointer arithmetic without further casting in C. In a future
                                         *  avr-libc distribution this will be part of the standard API and will be implemented in a more formal
                                         *  manner.
                                #define JTAG_DEBUG_POINT()              __asm__ __volatile__ ("nop" ::)
                                #define JTAG_DEBUG_BREAK()              __asm__ __volatile__ ("breakpoint" ::)
                                #define JTAG_ASSERT(Condition)          MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
                                #define JTAG_DEBUG_POINT()              __asm__ __volatile__ ("nop" ::)
                                #define JTAG_DEBUG_BREAK()              __asm__ __volatile__ ("breakpoint" ::)
                                #define JTAG_ASSERT(Condition)          MACROS{ if (!(Condition)) { JTAG_DEBUG_BREAK(); } }MACROE
                                                                                     printf("%s: Function \"%s\", Line %d: "     \
                                                                                            "Assertion \"%s\" failed.\r\n"),     \
                                                                                            __FILE__, __func__, __LINE__, #Condition); } }MACROE
                                                                                     printf("%s: Function \"%s\", Line %d: "     \
                                                                                            "Assertion \"%s\" failed.\r\n"),     \
                                                                                            __FILE__, __func__, __LINE__, #Condition); } }MACROE