Summary of changes in the 1.4 release line
The following list shortly summarizes the changes in
version 1.4.0 compared to version 1.2.6 of AVR Libc, which
was the latest release from the 1.2 release line by the time
1.4.0 was released.
Note that the purpose of the first four changes is to
eventually get rid of the term signal alltogether in
favor of the more common term interrupt (interrupt vector,
interrupt service routine).
  - The INTERRUPT() macro has been deprecated, and it will be
    removed in a future version.  Use __attribute__((interrupt))
    explicitly if this functionality is really needed.
- A new ISR() macro has been added, and is now the preferred
    form to introduce an interrupt service routine.  It is
    equivalent to the old SIGNAL() macro, which might become
    deprecated in a future version.
- The last remaining parts from <avr/signal.h> have been moved
      to <avr/interrupt.h>, so the former header file is no longer
      needed, and has been deprecated.
- A new set of interrupt vector names has been added, where the
      base name itself is closely derived from Atmel's datasheets and
      XML files, with _vect appended.  E.g. the former
      SIG_INTERRUPT0 now became INT0_vect.  The old
      names are still available, but their use for new projects is
      discouraged.
- A new header file, <compat/deprecated.h> has been established.
    Its purpose is to collect deprecated items from older versions of
    the library, starting out with the enable_external_int(),
    timer_enable_int(), and INTERRUPT() macros/functions, as well as
    the old obsoleted inp/outp/sbi/cbi macros.
- The standard IO facilities API has been enhanced:
      
	-  The backend functions put and get that are passed to fdevopen()
	    during the setup of a stream now take the stream itself as an
	    additional argument.
	    By defining the macro __STDIO_FDEVOPEN_COMPAT_12 before
	    including <stdio.h>, an fdevopen() function prototype will be
	    declared that is backwards-compatible with avr-libc version
	    1.2 and before.
- It is possible to tie user data to a stream using
	    fdev_set_udata(), and to retrieve them using fdev_get_udata().
	    Together with the additional argument to the backend functions,
	    these functions can now e.g. keep track of internal user state,
	    or distinguish two different devices using the same backend
	    function.
- The get backend function can now return _FDEV_EOF to indicate an
	    end-of-file condition, in addition to _FDEV_ERR for an error
	    condition.  This will affect the internal state that can be
	    queried using the standard feof() and ferror() functions.
- A new macro fdev_setup_stream() is provided to setup a
	    user-supplied stream without the need to call fdevopen(), and thus
	    without requiring malloc().  A similar macro FDEV_SETUP_STREAM()
	    exists that can be used to initialized a FILE object.  The
	    floating-point implementations of vfscanf() and vfprintf() now
	    allocate their conversion buffer on the stack, so they do not need
	    malloc() anymore either.
 
- An API has been added to track the library version number.  See the
    documentation of the new header file <avr/version.h>.
- Update the build system to recent versions of autoconf/automake;
      the old doconf and domake scripts are gone now
      (i.e., standard configure and make just work),
      reconf has been renamed to bootstrap.
- Update the documentation system to doxygen >= 1.4.1.
- Major overhaul of the documentation, new layout of the HTML pages,
    several clarifications and additions
- Add support for the following new devices (depending on the ability
    of the compiler/binutils to handle them):
      
	- AT90CAN32/64
- AT90PWM2(B)/3(B)
- ATmega329/3290/649/6490
- ATtiny25/45/85
- ATmega164/324/644
- ATmega640/1280/1281
 
- The library is now compiled with -Os for avr3 and avr5 MCUs (i.e.
    for those with > 8 KB of ROM); used to be -O3 before.
Please refer to the documentation
for details.
Last modified: Sun Nov 20 14:22:52 MET 2005