/*
* $Log$
+ * Revision 1.4 2004/06/27 15:20:26 aleph
+ * Change UNUSED() macro to accept two arguments: type and name;
+ * Add macro GNUC_PREREQ to detect GCC version during build;
+ * Some spacing cleanups and typo fix
+ *
+ * Revision 1.3 2004/06/06 18:00:39 bernie
+ * PP_CAT(): New macro.
+ *
* Revision 1.2 2004/06/03 11:27:09 bernie
* Add dual-license information.
*
#include "arch_config.h"
+
+#if defined __GNUC__ && defined __GNUC_MINOR__
+ #define GNUC_PREREQ(maj, min) \
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+ #define GNUC_PREREQ(maj, min) 0
+#endif
+
+
#if defined(__IAR_SYSTEMS_ICC) || defined(__IAR_SYSTEMS_ICC__)
#pragma language=extended
#define INTERRUPT(x) interrupt [x]
/* GCC attributes */
#define FORMAT(type,fmt,first) /* nothing */
#define NORETURN /* nothing */
- #define UNUSED(arg) arg
+ #define UNUSED(type,arg) type arg
/* Imported from <longjmp.h>. Unfortunately, we can't just include
* this header because it typedefs jmp_buf to be an array of chars.
/* GCC attributes */
#define FORMAT(type,fmt,first) /* nothing */
#define NORETURN /* nothing */
- #define UNUSED(arg) arg
+ #define UNUSED(type,arg) type arg
#define INLINE static inline
#ifdef __cplusplus
/* GCC attributes */
#define FORMAT(type,fmt,first) __attribute__((__format__(type, fmt, first)))
#define NORETURN __attribute__((__noreturn__))
- #define UNUSED(arg) __attribute__((__unused__)) arg
+ #define UNUSED(type,arg) __attribute__((__unused__)) type arg
//FIXME #define INLINE static inline
#define INLINE extern inline
#include <stddef.h>
#include <stdbool.h>
#define FLASH __attribute__((progmem))
- #define REGISTER /* nothing */
+ #define REGISTER /* nothing */
/* Missing printf-family functions in avr-libc/stdio.h */
#include <stdarg.h>
#include <avr/pgmspace.h>
- int vsprintf(char *buf, const char *fmt, va_list ap);
+ #if !GNUC_PREREQ(3,4)
+ int vsprintf(char *buf, const char *fmt, va_list ap);
+ #endif
int vsprintf_P(char *buf, const char * PROGMEM fmt, va_list ap);
- /* Support for hardvard architectures */
+ /* Support for harvard architectures */
#ifdef _PROGMEM
#define PGM_READ_CHAR(s) pgm_read_byte(s)
#define PGM_FUNC(x) x ## _P
/* GCC attributes */
#define FORMAT(type,fmt,first) /* nothing */
#define NORETURN /* nothing */
- #define UNUSED(arg) arg
+ #define UNUSED(type,arg) type arg
- /* Support for hardvard architectures */
+ /* Support for harvard architectures */
#define PGM_READ_CHAR(s) (*(s))
#define PGM_FUNC /* nothing */
#define PGM_ATTR /* nothing */
#define UINT32_LOG2(x) \
((x < 65536UL) ? UINT16_LOG2(x) : UINT16_LOG2((x) >> 16) + 16)
+/*! Concatenate two different preprocessor tokens (allowing macros to expand) */
+#define PP_CAT(x,y) PP_CAT__(x,y)
+#define PP_CAT__(x,y) x ## y
+
/* Type definitions - should go in <sys/types.h> */
#if !(defined(size_t) || defined(_SIZE_T_DEFINED))
#define size_t unsigned int