Home
        avr-libc Reference Manual
         Contents
1.                                         Vector name Old vector   Description Applicable for device  name                  SIG_INPUT_  Timer Counter AT90S2333   AT90S4414  AT90S4433   CAPT_vect CAPTURE  Capture Event AT90S4434  479058515  AT90S8535   AT90PWM3  AT90PWM2  AT90PWMI   AT90CAN128  AT90CAN32  AT90CANGA   ATmegal03  ATmegal28  ATmegal6   ATmegal61   ATmegal62  ATmegal63   ATmegal65  ATmegal65P  ATmegal69   ATmegal69P  ATmega32   ATmega323   ATmega325  ATmega3250  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega64   ATmega645   ATmega6450   ATmega649    ATmega6490              8   ATmega8515  ATmega8535  ATmegal68   ATmega48  ATmega88  ATmega640   ATmegal280  ATmegal281  AT   mega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny2313  AT90USB162      9005  82       9005  1287  AT90USB1286   AT90USB647  AT90USB646  TIMERI   SIG   Timer Counter1 ATtiny26  CMPA_vect OUTPUT_  Compare Match  COMPAREIA   1A  TIMERI   SIG   Timer Counter1 ATtiny26  CMPB_vect OUTPUT_  Compare Match  COMPAREIB 1B  TIMERI    SIG   Timer Counter1 AT90S2313  COMPI vect OUTPUT   Compare Match  COMPAREIA  TIMERI    SIG   Timer Counter1 AT90S4414  AT90S4434      9058515   COMPA _vect OUTPUT_  Compare Match   AT90S8535  AT90PWM3      9          2   COMPAREIA   A AT90PWM1  AT90CANI28  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6                161  ATmegal62   ATmegal63  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega32   ATmega323  ATmega325  ATmega3250 
2.           111  linker options    Pass the listed options to the assembler  or linker  respectively     4 4    Generate debugging information that        be used by avr gdb         ffreestanding    Assume a  freestanding  environment as per the C standard  This turns off automatic  builtin functions  though they can still be reached by prepending     builtin to  the actual function name   It also makes the compiler not complain when main     is declared with a void return type which makes some sense in a microcontroller  environment where the application cannot meaningfully provide a return value to its  environment  in most cases  main    won t even return anyway   However  this also  turns off all optimizations normally done by the compiler which assume that functions  known by a certain name behave as described by the standard  E  g   applying the  function strlen   to a literal string will normally cause the compiler to immediately  replace that call by the actual length of the string  while with  f freestanding  it  will always call strlen   at run time        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 351           funsigned char    Make any unqualfied char type an unsigned char  Without this option  they default to  a signed char     e  funsigned bitfields  Make any unqualified bitfield type unsigned  By default  they are signed       fshort enums    Allocate to an enum type only as many bytes as it needs for the declared r
3.           8 14  siS Pile Referente  cc 24 s ss e w SU    qua  8 14 1 Detailed Description                 8 15        File Reference 222 o o  8 15 1 Detailed Description                   8 16 mterrupt h File Referenc       lt a o coe eae erene       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS              8 18    8 20    8 2              8 22    8 23    8 24    8 25    8 26    8 27    8 28    8 29    8 16 1 Detailed Description    sc 2 o e s ear kus s eee 225   nt  ypes h File Reference    lt  sa u as    po gx eR e 226  8 17 1 Detailed Description 222222225954 m RR 226  iah Pile ReterenGe  222222222242 GS S AUS           228  5 18 1 Detailed Description                        228  math Pile Referenee   o uus oe ew 2    22 5 228  8 19 1 Detaled Description c  se csee s 86554 ae 525  228  tnemeepy s Pile Reference 22 2        22           229  820 1 Detaled Description   cu xx 66248 e i   229  menichrs File Rebergnee  lt i  poa ss cee eR                  230  8 21 1 Detailed Description  2                      230  miemchr_PS File Reference  o seac cc o ooo RR aa 230  8 22 1 Detailed Description 22 2 54855 ROG g xS RR 230  t  enicip s File Referente 02222222552  SUNSU QUN S ws 230  5 23 1 Detailed Deseripti    lt   lt s   ss a RR 230                 P S File Reference s  ooo s coro wa m x Rs 230  8 24 1 Detaled Description 2 22 22                 230  memcpby S File Reference  o soe coc acsem eena ena 230  825 1 Detaled Description  gt    cesed re
4.          5  8   avr_inttypes  26  PRIxFASTS   avr inttypes  27  PRIXLEAST16   avr_inttypes  27  PRIxLEAST16   avr_inttypes  27  PRIXLEAST32       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    378       avr_inttypes  27  PRIxLEAST32   avr_inttypes  27  PRIXLEAST8   avr_inttypes  27  PRIxLEASTS   avr inttypes  27  PRIXPTR   avr inttypes  27  PRIxPTR   avr inttypes  27  prog  char   avr pgmspace  128  prog  intl6 t   avr pgmspace  128  prog  int32 t   avr pgmspace  128  prog  int64 t   avr pgmspace  128  prog  int8 t   avr pgmspace  129  prog  uchar   avr pgmspace  129  prog  uint16 t   avr pgmspace  129  prog  uint32 t   avr pgmspace  129  prog  uint64 t   avr pgmspace  129  prog  uint8 t   avr pgmspace  129  prog void   avr pgmspace  129  PROGMEM   avr pgmspace  128  PSTR   avr pgmspace  128  PTRDIFF MAX   avr stdint  45  PTRDIFF MIN   avr stdint  46  putc   avr stdio  58  putchar   avr stdio  58  puts    avr stdio  62  puts P  avr stdio  62    qsort  avr stdlib  76  quot  div  t  211  ldiv  t  212    rand   avr stdlib  76  RAND MAX   avr  stdlib  72  rand r   avr  stdlib  77  random   avr stdlib  77  RANDOM MAX   avr stdlib  72  random r   avr stdlib  77  realloc   avr stdlib  77  rem   div  t  211   ldiv  t  212  reti   avr interrupts  122    sbi   deprecated items  170  scanf   avr  stdio  62  scanf P   avr  stdio  62  SCNd16   avr_inttypes  27  SCNd32   avr_inttypes  27  SCNdFAST 16   avr_inttypes  28  SCNdFAST32   avr_inttypes  28  SCNdLEAST16 
5.         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 15  lt avr io h gt   AVR device specific IO definitions 124       Introduces an interrupt handler function that runs with global interrupts initially dis   abled     This is the same as the ISR macro without optional attributes     Deprecated  Do not use SIGNAL  O in new code  Use ISR   instead     6 15  lt avr io h gt   AVR device specific IO definitions     include  lt avr io h gt     This header file includes the apropriate IO definitions for the device that has been  specified by the    mmcu  compiler command line switch  This is done by divert   ing to the appropriate file  lt avr ioXXXX h gt  which should never be included di   rectly  Some register names common to all AVR devices are defined directly within   lt avr common h gt   which is included in  lt avr io h gt   but most of the details  come from the respective include file     Note that this file always includes the following files    include  lt avr sfr_defs h gt    include  lt avr portpins h gt      include  lt avr common h gt    include  lt avr version h gt     See  lt avr sfr_defs h gt   Special function registers for more details about that header file     Included are definitions of the IO register set and their respective bit values as specified  in the Atmel documentation  Note that inconsistencies in naming conventions  so even  identical functions sometimes get different names on different devices     Also included are the speci
6.        8   ATmega8535   ATmegal68   ATmega48   ATmega88  ATmega640  ATmegal280  AT   megal281  ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P  AT   mega644  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       TIMER3_   CAPT_vect    SIG_INPUT_   CAPTURE3    Timer Counter3  Capture Event    AT90CAN128  AT90CAN32  AT90CANGA   ATmegal28  ATmegal62  ATmega64         mega640  ATmegal280  ATmegal281  AT   mega2560  ATmega2561  AT90USB1287   AT90USB 1286  AT90USB647   AT90USB646       TIMER3_   COMPA_vect          SIG_   OUTPUT_   COMPARE3A       Timer Counter3  Compare Match  A       AT90CAN128  AT90CAN32  AT90CANGA   ATmegal28  ATmegal62  ATmega64         mega640  ATmegal280  ATmegal281  AT   mega2560  ATmega2561  AT90USB1287   AT90USB 1286  AT90USB647   AT90USB646          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    116                                                                         Vector name Old vector   Description Applicable for device  name  TIMER3_  SIG_  Timer Counter3 AT90CAN128  AT90CAN32  AT90CANGA   COMPB_vect OUTPUT_  Compare Match   ATmegal28  ATmegal62  ATmega64         COMPARE3B B mega640  ATmegal280  ATmegal281  AT   mega2560  ATmega2561  AT90USB1287   AT90USB 1286  AT90USB647   AT90USB646  TIMER3_  SIG_  Timer Counter3 AT90CAN128  AT90CAN32  AT90CANGA   COMPC_vect OUTPUT_  Compare Match   ATmegal28  ATmega64  ATmega640  AT   COMPARE3C C mega1280  ATmegal281  ATmega2560 
7.        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 11 errno h File Reference 224       Functions       static uint8_t _ attribute       always_inline   eeprom_read_byte const uint8 t   addr     Variables    static void const void    pointer_eeprom  static void const void size_t size   static void uint8_t value   static void uint16_t value   static void void   pointer_eeprom  static void void size_t size    8 11 errno h File Reference  8 11 1 Detailed Description    Defines         define   ERRNO    1       define EDOM 33     define ERANGE 34    Variables      int errno    8 12  fdevopen c File Reference  8 12 1 Detailed Description    Functions      FILE x fdevopen  int  put  char  FILE      int  get  FILE            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 13 ffs S File Reference 225       8 13 ffs S File Reference    8 13 1 Detailed Description    8 14 ffsl S File Reference    8 14 1 Detailed Description   8 15 ffsll S File Reference   8 15 1 Detailed Description   8 16 interrupt h File Reference  8 16 1 Detailed Description    et    Defines    Global manipulation of the interrupt flag    The global interrupt flag is maintained in the I bit of the status register  SREG          define sei        define cli      Macros for writing interrupt handler functions     define ISR vector  attributes     define SIGNAL  vector     define EMPTY_INTERRUPT vector    define ISR_ALIAS vector  target_vector    define reti      define BADISR_v
8.        The next step is to configure and build the tools  This is done by supplying arguments  to the configure script that enable the AVR specific options          configure   prefix  PREFIX   target avr   disable nls    If you don t specify the  prefix option  the tools will get installed in the   usr ilocal hierarchy  i e  the binaries will get installed in  usr local bin   the info pages get installed in  usr local info  etc   Since these tools are chang   ing frequently  It is preferrable to put them in a location that is easily removed     When configure is run  it generates a lot of messages while it determines what  is available on your operating system  When it finishes  it will have created several  Makefiles that are custom tailored to your platform  At this point  you can build the  project       make    Note     BSD users should note that the project s Makefile uses GNU make syntax   This means FreeBSD users may need to build the tools by using gmake     If the tools compiled cleanly  you re ready to install them  If you specified a destination  that isn t owned by your account  you ll need root access to install them  To install       make install    You should now have the programs from binutils installed into SPREFIX bin  Don t  forget to set your PATH environment variable before going to build avr gcc        Note   The official version of binutils might lack support for recent AVR  devices  A patch that adds more AVR types can be found at  http   www freebsd 
9.       161  ATmegal62   ATmegal63  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega32   ATmega323  ATmega325  ATmega3250   ATmega329  ATmega329P  ATmega3290   ATmega3290P  ATmega406  ATmega64   ATmega645  ATmega6450  ATmega649   ATmega6490   ATmega8  ATmega8515   ATmega8535   ATmegal68   ATmega48   ATmega88   ATmega640   ATmegal280   ATmegal281  ATmega2560  ATmega2561   ATmega324P  ATmegal64P  ATmega644P   ATmega644  ATtinyll  ATtinyl2  AT   tiny13  ATtiny15  ATtiny22  ATtiny2313   ATtiny26  ATtiny28  ATtiny45  ATtiny25     ATtiny85  ATtiny261  ATtiny46l  AT   tiny861  AT9OUSB162      9005  82       9005  1287  AT90USB 1286            9005  647      9005  646          Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts    108          Vector name    Old vector  name    Description    Applicable for device       INTI vect    SIG    INTERRUPTI    External Interrupt  Request 1    AT90S2313  419052333  AT90S4414       9054433  419054434  419058515       9058535  AT9OPWM3      9         2   AT90PWM1  AT90CANI28  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6                161  ATmegal62   ATmegal63  ATmega32  ATmega323   ATmega406  ATmega64  ATmega8  AT   mega8515  ATmega8535  ATmegal68   ATmega48  ATmega88  ATmega640         megal280  ATmegal281  ATmega2560   ATmega2561  ATmega324P  ATmegal64P   ATmega644P  ATmega644   ATtiny2313   ATtiny28  ATtiny261  ATtiny46l  AT   tiny861      ATOOUSBI62      9005  82       
10.       20       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS ii       6 6    6 7    6 8    6 9    6 1              651 Detailed Description  e oc ses operes erimas 20  052 Deme                             2k o o o a RE 23  65 3 Typedef Documentation  222222545542  v RES 32    mal    Matbenialie8 ooa s eso oj A          32  66 1 Detailed Description                        32  6 6 2 Define Documentation                       33  6 6 3 Function Documentation     4 04 2s RR RR 34   lt setjmp h gt   Non local goto                        38         Demiediesenptoh 222222225 55                       38  6 72 Function Documentation    s oss Ree 39   lt stdint h gt   Standard Integer Types                    40  681 Detaled Description  lt   s   2  ba RR bea RE 40  6 5 2          Documentation o ou Ro EGRE 44  6 5 3     Typedet Documentation 222222222 225226 eee es 49   lt stdio h gt   Standard IO                                      52  691 Detailed Description                        52  6 9 2 Define Documentation                  2 2    57  69 3 Function Documentation                      59    stdbhblho Oeneralu  h  es s e eoe cR 3 eos 71  6 10 1 Detaded Description  lt   gt  s e secre sace 22 25 2559 71  6 10 2 Define Documentation                       72  6 10 3 Typedef Documentation                      73  6 10 4 Function Documentation                      73  6 10 5 Variable Documentation                      81   lt  sting      SUES sls crx RE E  
11.       E      82  6 11 1 Detaled Descripti  nm 222  2222 2            gt  82  611 2  DehneDocumentatoH s    og es ype C RR EET 83  6 11 3 Function Documentation                      83   lt avr boot h gt   Bootloader Support Utilities                93  6 12 1 Detailed Description                        93  6 12 2 Defne Documentation 222522222222 4 2    95       Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS iii       6 13    6 14    6 15    6 16    6 17  6 18  6 19    6 20    6 2              6 22    6 23     lt avr eeprom h gt   EEPROM handling                   99  PISI Detailed Description  gt   sss s s sos xg          99  6 13 2  Dehne Documentation   uc        5222252 v RS 100  6 13 3 Function                                            101    cavrantermpt h    Interrupts    lt  o esos ooo s 102  6 14 1 Detailed Description                        102  6 14 2 Defne Documentation  gt c o o  s es 8s RR RR Rs 121   lt avr io h gt   AVR device specific IO definitions              124   lt avr pgmspace h gt   Program Space Utilities               125  6 16 1 Detailed Description  lt        cs   s o ee dee SRR 125  6 16 2 Define Documentation                       127  6 16 3 Typedef Documentation 2                    129  6 16 4 Function Documentation                      131   lt avr power h gt   Power Reduction Management              137  Additional notes from   avr sfr       5    gt                  140   lt avr sfr_defs h gt   Special function 
12.       __addr3     _SFR_IO_ADDR  RAMPZ          r30      2       r31         d    uint32_t _ addr32  uint32_t _ result     asm    i        out       movw   elpm   elpm   elpm   elpm    tyr   ms    I    r30      _ result            8 33 23  define _ ELPM_enhanced__ addr     Value      L extension    2     1   r30   1    A0  Z     B0  Z    SCO  2     D0  Z        uint32_t   addr                    n t                     AITYNEM  mne     L result    __addr32        SFR IO ADDR RAMPZ          r31           uint32_t __addr32    uihgB t  lt       asm        out     movw   elpm     EN  atq    I                   result            result    Zp SCTE mne      30   1            0  Z     n t      result    t addr32        SFR IO ADDR RAMPZ          r31     PPS OA Boat Be          uint32_t   addr            EE ee ee ALE BE E    ELPM_dword_enhanced__ addr     Pu dd            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33 pgmspace h File Reference 236       8 33 2 4  define _ ELPM_word_classic__ addr        Value     __extension__      uint32_t __addr32    uint32_t   addr      uintl6 t _ result  N    asm   N    N    out  2   C1    n t      mov r31  SBI    n t      mov r30                         elpm               mov    0  ro  TANNET      in   0   2              adiw r30  1  WAYNE M      adc r0  __zero_reg__    n t      out  2  ro    n t      elpm               mov  B0  ro    n t          r    result       Em   e e addr Z        I    SFR IO ADDR  RAMPZ    N   mpg   
13.       int fprintf P  FILE    stream  const char     fmt        int fputs  const char    str  FILE    stream    int fputs_P  const char    str  FILE    stream    int puts  const char    str    int puts P  const char    str    size t fwrite  const void    ptr  size_t _ size  size t nmemb  FILE       stream    int fgetc  FILE     stream    int ungetc  int __c  FILE   stream                          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 40    stdlib h File Reference 246       8 40    char    fgets  char    str  int size  FILE    stream    char    gets  char    str    size_t fread  void          size_t __size  size_t __nmemb  FILE   stream   void clearerr  FILE   stream    int feof  FILE   stream    int ferror  FILE   stream    int vfscanf  FILE   stream  const char    fmt  va list        int vfscanf P  FILE    stream  const char    fmt  va list        int fscanf  FILE   stream  const char    fmt        int fscanf P  FILE   stream  const char     fmt        int scanf  const char     fmt        int scanf_P  const char     fmt        int vscanf  const char    fmt  va_list     ap    int sscanf  const char    buf  const char     fmt        int sscanf_P  const char    buf  const char     fmt        int fflush  FILE xstream     stdlib h File Reference    8 40 1 Detailed Description    Data Structures    struct div t  struct ldiv t    Non standard  i e  non ISO C  functions      define RANDOM  MAX Ox7FFFFFFF   char    itoa  int val  char  __s  int __ radix   
14.      Contains the upper byte of the calculated prescaler value  UBRR  VALUE      6 28 2 4  define UBRRL VALUE  Output macro from  lt util setbaud h  gt   Contains the lower byte of the calculated prescaler value  UBRR  VALUE      6 28 2 5  define USE 2X 0  Output bacro from  lt util setbaud h  gt     Contains the value 1 if the desired baud rate tolerance could only be achieved by setting  the U2X bit in the UART configuration  Contains 0 otherwise     6 29  lt util twi h gt   TWI bit mask definitions    6 29 1 Detailed Description     include  lt util twi h gt     This header file contains bit mask definitions for use with the AVR TWI interface     TWSR values    Mnemonics     TW_MT xxx   master transmitter       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 29  lt util twi h gt   TWI bit mask definitions 165       TW MR xxx   master receiver  TW  ST xxx   slave transmitter    TW SR xxx   slave receiver    fdefine TW START 0x08    define TW        START 0x10    define TW MT SLA ACK 0x18    define TW MT SLA NACK 0x20   fdefine TW MT DATA ACK 0x28    define TW MT DATA NACK 0x30    define TW MT ARB LOST 0x38    define TW             LOST 0x38   fdefine TW      SLA ACK 0x40    define TW MR SLA NACK 0x48    define TW      DATA ACK 0x50    define TW MR DATA NACK 0x58    define TW ST 5   ACK       8    define TW ST ARB LOST SLA        OxBO  fdefine TW ST DATA  ACK 0xB8    define TW ST DATA          0xCO    define TW ST LAST DATA 0xC8    define TW SR SLA ACK 0x6
15.      See the chapter about malloc   usage for implementation details     6 10 4 18 void qsort  void    __base  size_t     nmemb  size_t     size    compar    fn t compar        The qsort   function is a modified partition exchange sort  or quicksort     The qsort   function sorts an array of nmemb objects  the initial member of which is  pointed to by base  The size of each object is specified by size  The contents of the  array base are sorted in ascending order according to a comparison function pointed to  by compar  which requires two arguments pointing to the objects being compared     The comparison function must return an integer less than  equal to  or greater than zero  if the first argument is considered to be respectively less than  equal to  or greater than  the second        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 78       6 10 4 19 int rand  void     The rand   function computes a sequence of pseudo random integers in the range of 0  to RAND_MAX  as defined by the header file  lt stdlib h gt       The srand   function sets its argument seed as the seed for a new sequence of pseudo   random numbers to be returned by rand    These sequences are repeatable by calling  srand   with the same seed value     If no seed value is provided  the functions are automatically seeded with a value of 1     In compliance with the C standard  these functions operate on int arguments  Since  the underlying algorithm
16.     Description    Applicable for device       TIMER2_   COMPA_vect    SIG_   OUTPUT_   COMPARE2A    Timer Counter2  Compare Match  A    ATmegal68  ATmega48  ATmega88  AT   mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P  AT   mega644  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       TIMER2_   COMPB_vect    SIG_   OUTPUT_   COMPARE2B    Timer Counter2  Compare Match  A    ATmegal68  ATmega48  ATmega88         mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P         mega644  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       TIMER2_   COMP_vect    SIG_   OUTPUT_   COMPARE2    Timer Counter2  Compare Match    AT90S4434      9058535  AT90CANI28   AT90CAN32  AT90CAN64  ATmegal03   ATmegal28  ATmegal6  ATmegal61         megal62  ATmegal63  ATmegal65  AT   megal65P  ATmegal69  ATmegal69P  AT   mega32  ATmega323  ATmega325  AT   mega3250  ATmega329  ATmega329P  AT   mega3290  ATmega3290P  ATmega64  AT   mega645  ATmega6450  ATmega649  AT   mega6490  ATmega8  ATmega8535       TIMER2_   OVF_vect    SIG_   OVERFLOW2    Timer Counter2  Overflow    AT90S4434      9058535  AT90CANI28   AT90CAN32  AT90CAN64  ATmegal03   ATmegal28  ATmegal6  ATmegal6l   ATmegal62   ATmegal63  ATmegal65   ATmegal65P  ATmegal69  ATmegal69P   ATmega32  ATmega323  ATmega325  AT   mega3250   ATmega329   ATmega329P   ATmega3290  ATmega3290P  AT   mega64  ATmega645  ATmega6450   ATmega649    ATmega6490       
17.     Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 349             mcall prologues    Use subroutines for function prologue epilogue  For complex functions that use many  registers  that needs to be saved restored on function entry exit   this saves some space  at the cost of a slightly increased execution time           e    minit stack nnnn    Set the initial stack pointer to nnnn  By default  the stack pointer is initialized to the  symbol __stack  which is set to RAMEND by the run time initialization code            mtiny stack  Change only the low 8 bits of the stack pointer    e  mno tablejump  Do not generate tablejump instructions  By default  jump tables can be used to op   timize switch statements  When turned off  sequences of compare statements are  used instead  Jump tables are usually faster to execute on average  but in particular for  switch statements where most of the jumps would go to the default label  they might  waste a bit of flash memory        mshort calls  Use rjmp rcall  limited range  on  gt 8K devices       avr2 and avr4 architec   tures  less than 8 KB or flash memory   this is always the case  On avr3 and avr5  architectures  calls and jumps to targets outside the current function will by default use    jmp call instructions that can cover the entire address range  but that require more  flash ROM and execution time          nrtl    Dump the internal compilation result called  RTL  into comments in the 
18.     Reverse a string    The strrev   function reverses the order of the string   Returns     The strrev   function returns a pointer to the beginning of the reversed string        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 92       6 11 3 32 char    strsep  char    sp  const char   delim   Parse a string into tokens     The strsep   function locates  in the string referenced by   sp  the first occurrence of  any character in the string delim       the terminating     0    character  and replaces it  with a 707  The location of the next character after the delimiter character  or NULL   if the end of the string was reached  is stored in   sp  An  empty  field  i e  one  caused by two adjacent delimiter characters  can be detected by comparing the location  referenced by the pointer returned in        to 707     Returns     The strsep   function returns a pointer to the original value of         If   sp is  initially NULL  strsep   returns NULL     6 11 3 33 size t strspn  const char x s  const char   accept     The strspn   function calculates the length of the initial segment of s which consists  entirely of characters in accept     Returns     The strspn   function returns the number of characters in the initial segment of  s which consist only of characters from accept  The terminating zero is not  considered as a part of string     6 11 3 34 char x strstr  const char    57  const char    s2   Locate a substring     The s
19.     attiny2313 __AVR_ATtiny2313__  avr2 avr25  1    attiny24 __AVR_ATtiny24__  avr2 avr25  1    attiny25 __AVR_ATtiny25__  avr2 avr25  1    attiny261 __AVR_ATtiny261__  avr2 avr25  1    attiny43u __AVR_ATtiny43U__  avr2 avr25  1    attiny44 __AVR_ATtiny44__  avr2 avr25  1    attiny45 __AVR_ATtiny45__  avr2 avr25  1    attiny461 __AVR_ATtiny461__  avr2 avr25  1    attiny48 __AVR_ATtiny48__  avr2 avr25  1    attiny84 __AVR_ATtiny84__  avr2 avr25  1              85 __AVR_ATtiny85__  avr2 avr25  1    attiny861 __AVR_ATtiny861__  avr3 atmega103   AVR ATmegal03    avr3 atmega603 __AVR_ATmega603__  avr3 at43usb320 __AVR_AT43USB320__  avr3 at43usb355 __AVR_AT43USB355__  avr3 at76c711 __AVR_AT76C711__  avr4 atmega48   AVR ATmega48    avr4 atmega48p __AVR_ATmega48P__  avr4 atmega8 __AVR_ATmega8__  avr4 atmega8515 __AVR_ATmega8515__  avr4 atmega8535     AVR ATmega8535  avr4 atmega88   AVR ATmega88    avr4 atmega88p   AVR ATmega88P               Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools    347                                                                                                                                                    Architecture MCU name Macro   avr4 atmega8hva __AVR_ATmega8HVA__  avr4 at90pwm 1 _ AVR  ATOOPWMI    avr4 at90pwm2 _ AVR_AT90PWM2__  avr4 at90pwm2b   AVR_AT90PWM2B_  avr4 at90pwm3   AVR AT90PWM3    avr4 at90pwm3b   AVR AT90PWMGB    avr5 at90pwm216     AVR  ATO0PWM216    avr5 at90pwm316     AVR  ATO0PWM316   
20.     hexadecimal scanf format for uint_least32_t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 6  lt math h gt   Mathematics 32       6 5 2 95  define SCNxPTR SCNx16    hexadecimal scanf format for uintptr_t    6 5 3 Typedef Documentation    6 5 3 1 typedef int32_t int_farptr_t  signed integer type that can hold a pointer  gt  64 KB    6 5 3 2 typedef uint32 t uint farptr t    unsigned integer type that can hold a pointer  gt  64 KB    6 6  lt math h gt   Mathematics    6 6 1 Detailed Description     include  lt math h gt     This header file declares basic mathematics constants and functions     Note     In order to access the functions delcared herein  it is usually also required to addi   tionally link against the library 110      See also the related FAQ entry     Defines       define    PI 3 141592653589793238462643       define M SORT2 1 4142135623730950488016887       define NAN  builtin nan          define INFINITY _ builtin inf      Functions    double cos  double x  ATTR  CONST   double fabs  double     ATTR CONST   double fmod  double _ x  double              CONST  double modf  double __ value  double              double sin  double _ x  ATTR  CONST   double sqrt  double     ATTR  CONST   double tan  double x   ATTR CONST   double floor  double x  ATTR  CONST                            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 6     lt math h gt   Mathematics 33          double         double x           CONST  do
21.     int  main  void        ioinit          loop forever  the interrupts are doing the rest x     for         Note  7       sleep_mode         return  0      6 34 3 Compiling and Linking    This first thing that needs to be done is compile the source  When compiling  the  compiler needs to know the processor type so the    mmcu option is specified  The     Os option will tell the compiler to optimize the code for efficient space usage  at the  possible expense of code execution speed   The  g is used to embed debug info  The  debug info is useful for disassemblies and doesn t end up in the  hex files  so I usually  specify it  Finally  the     tells the compiler to compile and stop     don t link  This  demo is small enough that we could compile and link in one step  However  real world  projects will have several modules and will typically need to break up the building of  the project into several compiles and one link     5 avr gcc  g  Os  mmcu atmega8  c demo c    The compilation will create a demo o file  Next we link it into a binary called  demo elf       avr gcc  g  mmcu atmega8  o demo elf demo o    It is important to specify the MCU type when linking  The compiler uses the  mmcu  option to choose start up files and run time libraries that get linked together  If this       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 182       option isn t specified  the compiler defaults to the 8515 processor environment  which  is most cert
22.     more sophisticated project 197       6 35 3 1 Part 1  Macro definitions    number of preprocessor macros are defined  to improve readability and or portability of the application     The first macros describe the IO pins our LEDs and pushbuttons are connected to  This  provides some kind of mini HAL  hardware abstraction layer  so should some of the  connections be changed  they don t need to be changed inside the code but only on  top  Note that the location of the PWM output itself is mandated by the hardware  so it  cannot be easily changed  As the ATmega48 88 168 controllers belong to a more recent  generation of AVRs  a number of register and bit names have been changed there  so  they are mapped back to their ATmega8 16 equivalents to keep the actual program code  portable     The name F_CPU is the conventional name to describe the CPU clock frequency of  the controller  This demo project just uses the internal calibrated 1 MHz RC oscillator  that is enabled by default  Note that when using the  lt util delay h gt  functions   F_CPU needs to be defined before including that file     The remaining macros have their own comments in the source code  The macro  TMR1_SCALE shows how to use the preprocessor and the compiler   s constant expres   sion computation to calculate the value of timer 1   post scaler in a way so it only  depends on F_CPU and the desired software clock frequency  While the formula looks  a bit complicated  using a macro offers the advantage that t
23.     octal scanf format for uint32_t    6 5 2 77  define SCNoFAST16         octal scanf format for uint_fast16_t    6 5 2 78  define SCNoFAST32  lo     octal scanf format for uint_fast32_t    6 5 2 79  define SCNoLEAST16         octal scanf format for uint_least16_t    6 5 2 80  define SCNoLEAST32  10     octal scanf format for uint_least32_t    6 5 2 81  define SCNoPTR SCNol16    octal scanf format for uintptr t    6 5 2 82  define SCNu16         decimal scanf format for uint16 t    6 5 2 83  define SCNu32  lu     decimal scanf format for uint32 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 31       6 5 2 84  define SCNuFASTI6         decimal scanf format for uint fastl6 t    6 5 2 85  define SCNuFAST32  lu     decimal scanf format for uint fast32 t    6 5 2 86  define SCNULEAST16         decimal scanf format for        least16 t    6 5 2 87  define SCNuLEAST32  lu     decimal scanf format for uint least32 t    6 5 2 88  define SCNuPTR SCNu16    decimal scanf format for uintptr t    6 5 2 89  define SCNx16  x     hexadecimal scanf format for uint16 t    6 5 2 90  define SCNx32  Ix     hexadecimal scanf format for uint32  t    6 5 2 91  define SCNxFAST16  x     hexadecimal scanf format for uint fastl6 t    6 5 2 92  define SCNxFAST32  Ix     hexadecimal scanf format for uint  fast32 t    6 5 2 93  define SCNxLEAST16  x     hexadecimal scanf format for uint_least16_t    6 5 2 94  define SCNxLEAST32  Ix 
24.    6   Oxc6  lt __vector_8 0x6a gt     switch  direction   x Note  4             case UP   if    pwm                 TOP   direction   DOWN     0  81   0 Tdi r24  0x01   1    2  80 93 60 00 sts 0x0060  r24  if    pwm    0   direction   UP   break     OCR   pwm      Note  5        c6  3b bd out 0x2b  r19   43  c8  2a ba out 0  2    r18   42         85 91        r24   dor 22 91        r19         2f 91        r18   dO  Of 90 pop        d2  Of be out  03 05    63  d4  0   90 pop        46  1   90        rl   das 18 95 reti    000000da  lt ioinit gt      void  ioinit  void   x Note  6            Timer 1 is 10 bit PWM  8 bit PWM on some ATtinys       TCCRIA             1        INIT   da  83   8 141 r24  0x83   131  dc  8f bd out 0x2f  r24   47    Start timer 1         NB  TCCR1A and              could actually be the same register     take care to not clobber it     x   TCCRIB    TIMER1_CLOCKSOURCE         8e b5 in r24  0x2e   46  e0  81 60 ori r24  0  01  1  e2  8e bd out 0x2e  r24   46     if defined  TIMER1_SETUP_HOOk   TIMER1_SETUP_HOOK        endif        Set PWM value to 0        OCR   0   e4  lb bc out 0x2b  r1   43  e6  la bc out Ox2a  r1   42       Enable        as output       DDROC   BV  0  1    e8  82   0 ldi r24  0x02   2       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 34    simple project 186  ea  87 bb out 0x17  r24   23     Enable timer 1 overflow interrupt       TIMSK   BV  TOIE1    ec  84 eO ldi r24  0x04   4  ee  89 bf out 0x39  r24 
25.    CHANGE  tiny861  SIG_PCINT  PSC0_  SIG_PSC0_  PSCO Capture   AT90PWM3  AT90PWM2  AT90PWMI           vect CAPTURE Event  PSC0_EC_  SIG_PSC0_  PSC0 End Cycle AT90PWM3  AT90PWM2  AT90PWM 1  vect END_CYCLE  PSCI   SIG PSCI   PSCI Capture   AT90PWM3  AT90PWM2  AT90PWMI           vect CAPTURE Event  PSCI EC   SIG PSCI   PSC1 End Cycle AT90PWM3  AT90PWM2  AT90PWMI  vect END CYCLE  PSC2   SIG PSC2   PSC2 Capture   AT90PWM3  AT90PWM2  AT90PWMI  CAPT vect CAPTURE Event  PSC2 EC   SIG PSC2   PSC2 End Cycle AT90PWM3  AT90PWM2  AT90PWM 1  vect END_CYCLE  SPI STC vect   SIG SPI Serial Transfer   AT90S2333   AT90S4414  479054433   Complete AT90S4434  479058515  AT90S8535   AT90PWM3  AT90PWM2  AT90PWMI   AT90CAN128  AT90CAN32  AT90CAN64   ATmegal03              128              16   ATmegal61   ATmegal62  ATmegal63   ATmegal65  ATmegal65P  ATmegal69   ATmegal69P  ATmega32   ATmega323   ATmega325  ATmega3250  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega64   ATmega645   ATmega6450   ATmega649    ATmega6490              8   ATmega8515  ATmega8535  AT   megal68  ATmega48  ATmega88  AT   mega640   ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P   ATmega644  AT90USB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646  SPM_RDY_  SIG  SPM   Store Program ATmegal6  ATmegal62  ATmega32  AT   vect READY Memory Ready mega323  ATmega8  ATmega8515  AT        mega8535          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxy
26.    COMP_vect OUTPUT_  Compare Match ATmega103  ATmegal28  ATmegal6  AT   COMPAREO megal61  ATmegal62  ATmegal65         megal65P  ATmegal69  ATmegal69P  AT   mega32  ATmega323  ATmega325  AT   mega3250  ATmega329  ATmega329P  AT   mega3290  ATmega3290P  ATmega64  AT   mega645  ATmega6450  ATmega649  AT   mega6490  ATmega8515  ATmega8535  TIMERO_  SIG_  Timer Counter0     9052313  AT90S2323  AT90S2343  AT   OVFO_vect OVERFLOWO Overflow tiny22  ATtiny26  TIMERO_  SIG_  Timer Counter0 AT90S1200  419052333  AT90S4414   OVF_vect OVERFLOWO   Overflow     9054433  AT90S4434      9058515   AT90S8535  AT90PWMS3  AT9IOPWM2   AT90PWMI  AT90CANI28  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6  AfTmegal61  ATmegal62   ATmegal63  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega32   ATmega323  ATmega325  ATmega3250   ATmega329  ATmega329P  ATmega3290   ATmega3290P  ATmega64  ATmega645   ATmega6450  ATmega649  ATmega6490   ATmega8  ATmega8515  ATmega8535   ATmegal68  ATmega48  ATmega88         mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny11  ATtiny12  ATtiny15  ATtiny2313   ATtiny28  ATtiny261  ATtiny461  AT   tiny861  AT9OUSB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646  TIMER 1 _  SIG_INPUT_  Timer Counter1 AT90S2313  CAPTI_vect CAPTURE1 Capture Event          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    113         
27.    CONST__      Idiv_t Idiv  long __num  long __denom  __asm__  __divmodsi4   __ATTR_   CONST__      void qsort  void  __base  size_t __nmemb  size t size    compar fnt     compar     long strtol  const char     nptr  char       endptr  int base   unsigned long strtoul  const char     nptr  char   __endptr  int base        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 41    strcasecmp S File Reference 248       long atol  const char xs  ATTR  PURE   int atoi  const char xs           PURE   void exit  int _ status  ATTR  NORETURN     void    malloc  size t size           MALLOC     void free  void    ptr    void    calloc  size    nele  size t size   ATTR MALLOC    void    realloc  void    ptr  size t  size           MALLOC    double strtod  const char     nptr  char       endptr    double          const char     nptr    int rand  void    void srand  unsigned int __ seed    int rand r  unsigned long  ctx                          Variables    size t malloc margin  char   _ malloc heap  start  char               heap end    8 41 strcasecmp S File Reference  8 411 Detailed Description   8 42 strcasecmp_P S File Reference  8 42 1 Detailed Description   8 43 strcasestr S File Reference  8 43 1 Detailed Description   8 44 strcat S File Reference   8 44 1 Detailed Description   Defines     define dest hi r25   define dest lo r24   define src  hi r23   define src  lo r22       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 45 strcat_P S File Re
28.    N       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33 pgmspace h File Reference    238        lpm    0  Z              lpm  D0  7    n t       r    result     z   __addr16  N   I   __addr16             _ result           8 33 2 9  define _                        _             Value    __extension__      uintl6 t _ addrl6    uint16_t   addr      uint8_t __result       asm   N    N   lpm  0  Z    n t  N    r    result  N   z  1 addrl6  N         _ result               8 33 2 10  define          word classic                  Value     __extension__      uintl6 t _ addrl6    uintl6 t   addr   N  uintl6 t _ result      asm           lpm   AnDnNEN N   mov  A0  ro                      r30  1           N   lpm                  mov  B0  ro         M   zr    result     z    addrl6  N    1     addr16  N    sy N          _ result              8 33 2 11 define        word enhanced               Value        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 34 power h File Reference 239        __extension__      uintl6 t   addr16    uint16_t   addr      uintl6 t   result  N    asm   N    N    lpm  A0  Z                lpm  B0  Z    n t         r    result     z    addrl16  N  x  lI      addrl6  N         _ result              8 34 power h File Reference  8 341 Detailed Description    Defines       define _AVR_POWER_    1       define clock_prescale_set x        define clock_prescale_get    clock_div_t  CLKPR  amp   uint8_   t   1 lt  lt CLKPS0   
29.    Returns the number of characters that would have been written to s if there were  enough space     6 9 3 26 int snprintf_P  char x  s size t  n constchar   fmt         Variant of snprintf    that uses a fmt string that resides in program memory     6 9 3 27 int sprintf  char x  s constchar   fmt         Variant of printf    that sends the formatted characters to string s     6 9 3 28 int sprintf_P  char x _ 5  const char x  fmt         Variant of sprintf    that uses a fmt string that resides in program memory        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 64       6 9 3 29 int sscanf  const char    __ buf  const char     fmt         The function sscanf performs formatted input  reading the input data from the buffer  pointed to by buf     See vfscanf   for details     6 9 3 30 int sscanf_P  const char    _ buf  const char    __ fmt          Variant of sscanf   using a fmt string in program memory     6 9 3 31 int ungetc  int _ c  FILE x stream     The ungetc   function pushes the character c  converted to an unsigned char  back onto  the input stream pointed to by st ream  The pushed back character will be returned  by a subsequent read on the stream     Currently  only a single character can be pushed back onto the stream     The ungetc   function returns the character pushed back after the conversion  or EOF if  the operation fails  If the value of the argument c character equals EOF  the operation  wi
30.    Steinar Haugen   Peter Jansen   Reinhard Jessich   Magnus Johansson   Artur Lipowski   Marek Michalkiewicz   Colin O Flynn    Bob Paddock    Reiner Patommel   Michael Rickman   Theodore A  Roth   Juergen Schilling   Philip Soeberg   Anatoly Sokolov   Nils Kristian Strom   Michael Stumpf   Stefan Swanepoel   Eric B  Weddington   Joerg Wunsch    Dmitry Xmelkov    The Regents of the University of California   All rights reserved        Redistribution and use in source and binary forms  with or without  modification  are permitted provided that the following conditions are met       Redistributions of source code must retain the above copyright  notice  this list of conditions and the following disclaimer       Redistributions in binary form must reproduce the above copyright  notice  this list of conditions and the following disclaimer in  the documentation and or other materials provided with the    distribution       Neither  contribu    he name of the copyright holders nor the names of  ors may be used to endorse or promote products derived    from this software without specific prior written permission                                            POSSIBILITY      SUCH DAMAGE     HIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  AS IS   ND ANY EXPRESS OR IMPLIED WARRANTIES  INCLUDING  BUT NOT LIMITED TO  THE  MPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  RE DISCLAIMED  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE  IA
31.    This type is not available when the compiler option  mint8 is in effect     6 16 3 5 prog int8 t  Type of an  int8 t  object located in flash ROM     6 16 3 6 prog uchar  Type of an  unsigned char  object located in flash ROM     6 16 3 7 prog uintl6 t  Type of an  uintl6 t  object located in flash ROM     6 16 3 8 prog uint32 t  Type of an  uint32 t  object located in flash ROM     6 16 3 9 prog uint64 t  Type of an  uint64 t  object located in flash ROM     Note     This type is not available when the compiler option  mint8 is in effect     6 16 3 10 prog uint8 t  Type of an  uint8 t  object located in flash ROM     6 16 3 11 prog void    Type of a  void  object located in flash ROM  Does not make much sense by itself  but         be used to declare a  void     object in flash ROM        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 131       6 16 4 Function Documentation    6 16 41                memchr P         VOID P s  int val  size_t len   Scan flash memory for a character     The memchr_P   function scans the first len bytes of the flash memory area pointed  to by s for the character va1  The first byte to match va1  interpreted as an unsigned  character  stops the operation     Returns     The memchr_P   function returns a pointer to the matching byte or NULL if the  character does not occur in the given memory area     6 16 4 2 int memcmp P  const void    s1                 52  size_t len   
32.    Version 10 27 0    From the GNUWin32 project   lt http   gnuwin32 sourceforge net packages html gt         Download and install        Install fig2dev       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 339           Version 3 2 Patchlevel 5 alpha7    From WinFig 1 71   lt http   www schmidt web berlin de winfig  gt         Unzip the download file and install in a location of your choice       Install MiKTex        Version 2 5     lt http   miktex org  gt         Download and install       Install Ghostscript        Version 8 54     lt http   www cs wisc edu  ghost  gt         Download and install        Set the TEMP and TMP environment variables to c  temp or to the short file   name version  This helps to avoid NTVDM errors during building     9 10 13 Building the Toolchain for Windows    All directories in the PATH enviornment variable should be specified using their short  filename  8 3  version  This will also help to avoid NTVDM errors during building   These short filenames can be specific to each machine     Build the tools below in MSYS       Binutils        Open source code pacakge and patch as necessary       Configure and build in a directory outside of the source code tree       Set PATH  in order         MikTex executables gt       usr local bin       usr bin      bin       mingw bin      c  cygwin bin        install directory  gt  bin      Configure       Generated on Mon Oct 29 20 02 34 2007
33.    inttmp    intsav    SQUARE    tmconst  1070000  fuzz  8    section    global  main    rcall  Abs   rjmp    global  TIMERO_OVF_vect    ldi   out   in   sbic   rjmp   sbi   rjmp  des cbi  2    out   reti  ioinit    sbi   ldi   out   ldi   out   ldi   out   sei   ret     global _ vector default    Note  1   16 Note  2   Li  19  0  PD6 Note  3   Note  4    0   200000 100 kHz     200000 edges s    clocks in ISR until TCNTO is set   text  main H ote  5  ioinit  1b   Note  6  TIMERO  OVF            ote  7  inttmp  256   tmconst   fuzz   SFR IO ADDR TCNTO   inttmp 4 ote  8  intsav    SFR IO ADDR SREG    Note  9       work    BV TOIEO     work  _BV CS00     SFR IO ADDR PORTD   SQUARE    SFR IO ADDR PORTD   SQUARE    SFR IO ADDR PORTD   SQUARE                   SFR IO ADDR SREG   intsav    SFR IO ADDR DDRD   SQUARE    SFR IO ADDR TIMSK   work      tmr0       1    SFR IO ADDR ICCRO   work    work  256   tmconst          SFR IO ADDR TCNTO   work      Note  10        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs 283         vector default   reti     end    Note  1     AS in C programs  this includes the central processor specific file containing the IO port  definitions for the device  Note that not all include files can be included into assembler  sources     Note  2     Assignment of registers to symbolic names used locally  Another option would be to  use a C preprocessor macro instead      define work 16    Note  3     Our bit 
34.    pointer  i e  a code pointer that can address more than 64 KB   as well as standard  names for all printf and scanf formatting options that are supported by the  lt stdio h gt    Standard IO facilities  As the library does not support the full range of conversion  specifiers from ISO 9899 1999  only those conversions that are actually implemented  will be listed here     The idea behind these conversion macros is that  for each of the types defined by   lt stdint h gt   a macro will be supplied that portably allows formatting an object of that  type in printf   or scanf   operations  Example      include  lt inttypes h gt     uint8_t smallval   int32_t longval     printf   The hexadecimal value of smallval is   PRIx8       the decimal value of longval is   PRId32    n    smallval  longval      Far pointers for memory access  gt 64K       typedef int32_t int_farptr_t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions    21       typedef uint32_t uint_farptr_t    macros for printf and scanf format specifiers    For C    these are only included if    STDC_LIMIT    MACROS is defined before in        cluding  lt inttypes h gt       define PRId8  d     define PRIdLEASTS  d    define PRIdFASTS  d    define           1     define PRILEASTS  i    define PRUFASTS8  1    define PRId16  d    define PRIGLEAST16  d    define PRIGFAST16  d    define PRIi16  i     define PRIILEAST16  i    define PRHFAST16  i    define PR
35.    rm                              8 5 2 7  define _ boot_page fill extended address  data        Value           __asm__ __volatile__     movw r0   4 n t    movw r30   A3 n t    sts  1   C3 n t     PA AV LI uud uA LA LUE    A AP uud uL uu FL mmu    wu EE       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 5 boot h File Reference    219        sts  0  S2 n t    spm n t    rlNnNt      alr            1  non    d   yn   y      y                       ro      8 5 2 8  define    Value           SFR_MEM_ADDR __SPM_REG          SFR_MEM_ADDR RAMPZ     uint8 t   BOOT PAGE FILL             uint32  t address         uint16_t  data    r30    r31       2 EL E e    boot_page_fill_normal address  data        __asm__ __volatile__     movw      0   3 n t      movw r30   2 n t    sts  0   1 n t    spm n t    rinit               1                                        20      8 5 2 9                Value           SFR_MEM_ADDR __SPM_REG              uint8_t  BOOT_PAGE_FILL     uint16 t address      uint16 t data     Y307  Ta Sq    boot page write alternate address          asm    volatile       movw r30   2 n t    sts  0   1 n t    spm n t     word OxffffNnNXt    nop n t      1    yn     yn                  SFR  MEM ADDR  SPM REG      uint8 t  BOOT PAGE WRITE     uint16 t address         30     r31     LEE DD OLD RED    ie       E DEVE       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 5 boot h File Reference    220       8 5 2 10  define boot page wr
36.    uint16_t i    uint8_t sreg        Disable interrupts     sreg   SREG   cli       eeprom busy wait        boot page erase  page    boot spm busy wait        Wait until the memory is erased     for  i20  i  SPM PAGESIZE  i  2         Set up little endian word     uintl6_t w    buf     w      buf     lt  lt  8     boot_page_fill  page   i  w         boot_page_write  page      Store buffer in flash page   boot spm busy wait       Wait until the memory is written        Reenable RWW section again  We need this if we want to jump back     to the application after bootloading     boot rww enable         Re enable interrupts  if they were ever enabled      SREG   sreg     Defines       define BOOTLOADER_SECTION __attribute__   section    bootloader           define boot_spm_interrupt_enable    _SPM_REG     uint8_t _BV SPMIE     e  define boot spm interrupt disable    SPM_REG  amp     uint8_t  _   BV SPMIE         define boot_is_spm_interrupt     SPM          amp   uint8_t _BV SPMIE         define boot_rww_busy    _SPM_REG  amp   uint8_t _ BV _COMMON_ASB            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr boot h gt   Bootloader Support Utilities 95        define boot_spm_busy    __SPM_REG  amp   uint8_t _BV SPMEN     define boot_spm_busy_wait   do   while boot_spm_busy       define GET_LOW_FUSE_BITS  0x0000     define GET_LOCK_BITS  0x0001     define GET_EXTENDED_FUSE_BITS  0  0002     define GET_HIGH_FUSE_BITS  0x0003     define boot_lock_fuse_
37.    value  and  1 refers to  I    SFR IO ADDR PORTD       This may still look a little odd now  but the syntax of an operand list will be explained  soon  Let us first examine the part of a compiler listing which may have been generated  from our example     lds r24 value              x         r24  12       NOAPP x    sts value  r24    The comments have been added by the compiler to inform the assembler that the in   cluded code was not generated by the compilation of C statements  but by inline as   sembler statements  The compiler selected register r24 for storage of the value read  from PORTD  The compiler could have selected any other register  though  It may not  explicitely load or store the value and it may even decide not to include your assembler  code at all  All these decisions are part of the compiler   s optimization strategy  For  example  if you never use the variable value in the remaining part of the C program   the compiler will most likely remove your code unless you switched off optimization   To avoid this  you can add the volatile attribute to the asm statement     asm volatile  in  0   1      r   value     I    SFR IO ADDR PORTD        The last part of the asm instruction  the clobber list  is mainly used to tell the compiler  about modifications done by the assembler code  This part may be omitted  all other  parts are required  but may be left empty  If your assembler routine won t use any  input or output operand  two colons must still follow the ass
38.   2 Seay a eee 9 269  Memory SO  NOM   usu eoo Re                  RAG S 271  9 3 1    The text SGOLIOM  lt  ic nce S o Ro  ee s 271  42        Sechin o uox ze 271  932 The DSSSeCHOR c p core nc sus yup s S BS E ER O s 272  934    The e  prom Section 0e RR o RR y RR 272              eCOM  udo um renum RS Eee BAGS s 272  9 3 6               SeCHONS ose sec immo goa Rom Ee eee 5 272  9 3 7 The        Sections  gt c  o crec 9 x 9 Rs 274  9 3 8 Using Sections in Assembler                         274  9398 Using Sectionin C Code 2  oro a eo 275  Data in Program Space  oaos ee y m ERES 275  DAT JuoSUGHON  222222222255      5  275  942 A NOE UN  CONEE 2252 2222           276  9 4 3 Storing and Retrieving Data in the Program Space        276  94 4 Storing and Retrieving Strings in the Program Space       278  9453            e 280  avr libc and assembler programs                      280       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS xiii       9 6    49    9 8    99            dubodu  BloW   es epove 280  95 7 Invoking the compiler o coo ass s s 95 xg xe e 281  5  Example progra  elec a a ee X X      BAS 8 281  9 5 4 Pseudo ops and operators                     285  Inline Assembler Cookbook                        286       GCC asm SEMERE 2222222 222 22 RS              287  962 Assembler Code 22 2 pear  289  9 6 3 Input and Output                                     289  O  EDDY codo Sus morum dero ba        S ee es 293  9 65 Assembler Mattos o a ss 
39.   479052333  419054414   vect RECV plete     9054433   AT90S4434      9058515   AT90S8535  ATmegal03  ATmegal63   ATmega8515  UART_TX_  SIG_UART_  UART  Tx Com    AT90S2313  419052333  419054414   vect TRANS plete AT90S4433      9054434  41719058515   AT90S8535  ATmegal03  ATmegal63   ATmega8515  UART_  SIG_UART_  UART Data Reg    AT90S2313  419052333  AT90S4414   UDRE_vect DATA ister Empty     9054433  AT90S4434      9058515   AT90S8535  ATmegal03  ATmegal63   ATmega8515  USARTO   SIG   USARTO  Rx   ATmegal62         vect USARTO   Complete  RECV  USARTO   SIG   USARTO  Rx   AT90CANI28  AT90CAN32  AT90CAN64        vect UARTO   Complete ATmegal28  ATmegal65  ATmegal65P   RECV ATmegal69  ATmegal69P  ATmega325   ATmega329   ATmega329P  ATmega64   ATmega645   ATmega649   ATmega640   ATmegal280  ATmegal281  ATmega2560   ATmega2561  ATmega324P  ATmegal64P   ATmega644P  ATmega644  USARTO   SIG   USARTO  Tx   ATmegal62         vect USARTO   Complete  TRANS                      Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    118                                                 Vector name Old vector   Description Applicable for device  name  USARTO   SIG   USARTO  Tx   AT90CANI28  AT90CAN32  AT90CAN64   TX vect UARTO   Complete ATmegal28  ATmegal65  ATmegal65P   TRANS ATmegal69  ATmegal69P  ATmega325   ATmega3250  ATmega329  ATmega329P   ATmega3290  ATmega3290P  ATmega64   ATmega645  ATmega6450  ATmega649   ATmega6490  ATm
40.   57  sei      f0  78 94 sei  F2 08 95 ret  000000  4  lt main gt       int  main  void      fA  cf  e5 ldi r28  Ox5F   95  f6  d4      Tdi  22  Ox04 s 4  f8  de bf out 0x3e  r29   62         cd bf out Ox3d  r28   61  roinit  J7  fc  ee df reall   36   Oxda  lt ioinit gt         loop forever           for         Note  7      Sleep mode     fe  85 b7 in r24  0x35  00  80 68 ori r24  0x80  02  85 bf out 0x35  r24  04  88 95 Sleep  06  85 b7 in r24  0x35  08  8f 77 andi r24  Ox7F        85 bf out 0x35  r24  Det I9 cf tmp 2 16  0000010    lt         interrupt     0e  78 cf rjmp   272  00000110   exit     finclude  macros inc    Section  text   global exit  exit   XJMP   exit  110  00      rjmp   0  00000112    exit     LIS RE      tip   2    6 34 5 Linker Map Files                   the interrupts are doing the rest x     53  128  53    53     1217   53     Oxfe  lt main 0xa gt       0x0  lt __heap_end gt       0x112  lt _exit gt       0x112    exit      avr objdump is very useful  but sometimes it s necessary to see information about       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project    187       the link that can only be generated by the linker  A map file contains this information   A map file is useful for monitoring the sizes of your code and data  It also shows where  modules are loaded and which modules were loaded from libraries  It is yet another  view of your application  To get a map file  I usually add  Wl  Map demo map to  
41.   66  vfscanf  66  vfscanf P  69  vprintf  69  vscanf  69  vsnprintf  69  vsnprintf P  69  vsprintf  69  vsprintf P  69    avr stdlib      compar fn t  72     malloc heap end  80     malloc heap start  80     malloc margin  81   abort  72   abs  72   atof  72   atoi  72   atol  73   bsearch  73   calloc  73   div  73   DTOSTR  ALWAYS SIGN  71  DTOSTR PLUS SIGN  71  DTOSTR_UPPERCASE  72  dtostre  74   dtostrf  74   exit  74   free  74   itoa  75   labs  75   ldiv  75           75   malloc  76   qsort  76   rand  76   RAND MAX  72   rand r  77   random  77       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX 370                                     RANDOM MAX  72 strtok r  91  random r  77 strupr  92  realloc  77 avr version  srand  78 AVR        DATE   147  srandom  78        LIBC DATE STRING     strtod  78 147  strtol  78   AVR        MAJOR  147  strtoul  79 AVR  LIBC MINOR    147  ultoa  79   AVR        REVISION _  147  utoa  80   AVR LIBC VERSION    avr string STRING    147  _FFS  82   AVR        VERSION  147  ffs  82 avr watchdog  ffsl  83 wdt disable  149  ffsll  83 wdt  enable  149  memcopy  83 wdt reset  149  memchr  83 WDTO_120MS  150  mememp  83 WDTO_15MS  150  memcpy  84 WDTO 15  150  memmem  84 WDTO_250MS  150  memmove  84 WDTO_2S  150  memrchr  85 WDTO_30MS  150  memset  85 WDTO_4S  150  strcasecmp  85 WDTO_500MS  151  strcasestr  85 WDTO_60MS  151  strcat  86 WDTO_8S  151  strchr  86 avrdude  usage  354  strchrnul  86 avrprog  usage  354  st
42.   ATmega329  ATmega329P  ATmega3290     ATmega3290P  ATmega64  ATmega645   ATmega6450  ATmega649  ATmega6490     ATmega8   ATmega8515   ATmega8535   ATmegal68  ATmega48  ATmega88  AT   mega640   ATmegal280  ATmegal281     ATmega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny2313  ATtiny261  ATtiny461  AT   tiny861      AT90USB162      9005  82       9005  1287      9005  1286   AT90USB647  AT90USB646          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen                                  6 14  lt avr interrupt h gt   Interrupts 114  Vector name Old vector   Description Applicable for device  name                  SIG_  Timer Counter1 AT90S4414      9054434      9058515   COMPB_vect OUTPUT_  Compare MatchB   419058535  AT90PWM3  AT90PWM2   COMPAREIB AT90PWM1  AT90CANI28  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6  ATmegal6l  ATmegal62   ATmegal63  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega32   ATmega323  ATmega325  ATmega3250   ATmega329  ATmega329P  ATmega3290   ATmega3290P  ATmega64  ATmega645   ATmega6450  ATmega649  ATmega6490   ATmega8   ATmega8515   ATmega8535   ATmegal68  ATmega48  ATmega88  AT   mega640   ATmegal280  ATmegal281   ATmega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny2313  ATtiny261  ATtiny461  AT   tiny861      ATOOUSBI62      9005  82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646  TIMERI    SIG   Timer Counter1 AT90CAN128  AT90CAN32  AT90CANGA   COMPC_vect O
43.   As this is  often not desired in the limited environment of a microcontroller  an alternative option  is provided to run completely without malloc       The macro fdev_setup_stream   is provided to prepare a user supplied FILE buffer for  operation with stdio     Example     include  lt stdio h gt        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 54       static int uart putchar char c  FILE   xstream      static FILE mystdout   FDEV SETUP STREAM uart putchar  NULL   _FDEV_SETUP_WRITE       static ant  uart_putchar char c  FILE xstream          if          n       uart_putchar     r     stream    loop_until_bit_is_set  UCSRA  UDRE    UDR   c   return 0          int   main  void       init_uart     stdout    amp mystdout   printf  Hello  world Nn       return 0     This example uses the initializer form FDEV_SETUP_STREAM   rather than the  function like fdev_setup_stream    so all data initialization happens during C start up     If streams initialized that way are no longer needed  they can be destroyed by first  calling the macro fdev_close    and then destroying the object itself  No call to fclose    should be issued for these streams  While calling fclose   itself is harmless  it will cause  an undefined reference to free   and thus cause the linker to link the malloc module into  the application     Notes    Note 1     It might have been possible to implement a device abstraction that is compatible  with
44.   Configure    export LDFLAGS   static      Sarchivedir configure N    prefix  installdir N    datadir  installdir N    disable tests      disable versioned doc N  2 gt  amp 1   tee simulavr configure log       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 345         Make    make  k all install 2 gt  amp 1   tee simulavr make log  make pdf install pdf 2 gt  amp 1   tee simulavr pdf make log    9 11 Using the GNU tools    This is a short summary of the AVR specific aspects of using the GNU tools  Normally   the generic documentation of these tools is fairly large and maintained in texinfo  files  Command line options are explained in detail in the manual page     9 11 1 Options for the C compiler avr gcc    9 1111 Machine specific options for the AVR The following machine specific  options are recognized by the C compiler frontend           mmcu architecture    Compile code for architecture  Currently known architectures are                                                                               Architecture   Macros   avrl   AVR ARCH   1 AVR ASM ONLY AVR 2 BYTE PC  2    avr2   AVR ARCH  2 AVR 2 BYTE PC  2    avr25  1    AVR ARCH   25 AVR HAVE MOVW  1  AVR HAVE LPMX  1  AVR 2 BYTE P  avr3   AVR ARCH   3 AVR MEGA AVR 2 BYTE PC __  2    avr4   AVR ARCH   4 AVR ENHANCED AVR HAVE MOVW  1  AVR HAVE LPMX  avr5   AVR ARCH   5 AVR MEGA AVR  ENHANCED AVR HAVE MOVW  1  AVR   avr6  2    AVR ARCH   6 AVR MEGA AVR  ENHANCED AVR HAVE MOVW_ 
45.   Diagnostics 16       Returns     alloca   returns a pointer to the beginning of the allocated space  If the allocation  causes stack overflow  program behaviour is undefined     Warning     Avoid use alloca   inside the list of arguments of a function call     6 2  lt assert h gt   Diagnostics  6 2 1 Detailed Description   include  lt assert h gt     This header file defines a debugging aid     As there is no standard error output stream available for many applications using this  library  the generation of a printable error message is not enabled by default  These  messages will only be generated if the application defines the macro    __ASSERT_USE_STDERR    before including the   assert  h gt  header file  By default  only abort   will be called  to halt the application     Defines       define assert expression     6 2 2 Define Documentation  6 2 2 1  define assert expression     Parameters     expression Expression to test for     The assert   macro tests the given expression and if it is false  the calling process is  terminated  A diagnostic message is written to stderr and the function abort   is called   effectively terminating the program     If expression is true  the assert   macro does nothing     The assert   macro may be removed at compile time by defining NDEBUG as a macro   e g   by using the compiler option  DNDEBUG         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    63  lt              gt   Character Operations 17       63  lt ctype h 
46.   Figure 3  Wiring of the STK500       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project 195       The following picture shows the alternate wiring where LED1 is connected but SW2 is  not        Figure 4  Wiring option  2 of the STK500    As an alternative  this demo can also be run on the popular ATmega8 controller  or its  successor ATmega88 as well as the ATmega48 and ATmegal68 variants of the latter   These controllers do not have a port named  A   so their ADC inputs are located on  port C instead  thus the potentiometer needs to be attached to port C  Likewise  the           output is not on port D pin 5 but on port B pin 1  PB1   Thus  the above  cabling scheme needs to be changed so that PB1 connects to      LEDO pin   PD6  remains unconnected   When using the STK500  use one of the jumper cables for this  connection  All other port D pins should be connected the same way as described for  the ATmegal6 above     When not using an STK500 starter kit  attach the LEDs through some resistor to Vcc   low active LEDs   and attach pushbuttons from the respective input pins to GND  The  internal pull up resistors are enabled for the pushbutton pins  so no external resistors  are needed     Finally  the demo has been ported to the ATtiny2313 as well  As this AVR does not  offer an ADC  everything related to handling the ADC is disabled in the code for that  MCU type  Also  port D of this controller type only features 6 pins  so
47.   Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       CONTENTS Y  6 34 2 The Source  Ode o ouo Rem m eh p ER 179  243 ComplingandLinkimg           ea a 181  6 344 Examining the Object File                     182  634  Linker Map Piles         aaa sus g 6        186  6 34 6 Generating Intel Hex Files                     189  6 34 7 Letting Make Build the Project                    190  6 34 8 Reference to the sourcecode    o o 25 0 8 ee ee o 192   6 35    more sophisticated project                        192  6351 Hatbwae sep  lt  lt  wea ce ee    SOEs Ha W ARS 193  5 25 2  Funcional        suos oe gor eee RR             196  6 35 3 A code walkthrough                        196  5224 IDESONICE  OdE  slo ee a p CARERE S 199   6 36 Using the standard IO                                     200  630 1 Hardwsreseluj 225222225556          cad S 200  6 30 2                        e ce apocr oe gs a Ua s w w RR 201  6 36 3    code walkthrough                        202  6 36 4  The sourcecode  2    ccs t rre 207   6 37 Example using the two wire interface  TWI                207  6 37 1 Introduetion mio TWI                   2   207  6 37 2 The TWlexample project  222222222222 22 255  208   ERU Ar ja see 208   7 avr ibc Data Structure Documentation 212   Tl dut Struct Reference     lt  lt  ce ce oot ee UE RR 212  TL Detaled Description  lt  sea e                v RES 212  712 Field Documentation  2    600  A ks RR RRRA 212   a2  ldiv tStuet Referenc     s spess oss os
48.   Therefore most  programs that compile on both types of host systems  usually must provide some sort  of abstraction layer to allow an application to be built cross platform     MinGW MSYS does provide somewhat of a POSIX environment that allows you to  build Unix and Linux applications as they woud normally do  with a configure  step and a make step  Cygwin also provides such an environment  This means that  building the AVR toolchain is very similar to how it is built in Linux  described above   The main differences are in what the PATH environment variable gets set to  pathname  differences  and the tools that are required to build the projects under Windows  We ll  take a look at the tools next     9 10 12 Tools Required for Building the Toolchain for Windows    These are the tools that are currently used to build WinAVR 20070525  or later   This  list may change  either the version of the tools  or the tools themselves  as improve   ments are made       MinGW MSYS   lt http   downloads sourceforge net mingw MinGW 5 1 3 exe use_   mirror superb east gt        Put MinGW 5 1 3 exe in it s own directory  for example  C        Run MinGW 5 1 3 exe      Select  Download and install         Select  Current  package     Select type of install  Full        Install MSYS 1 0 10 exe package    lt http   prdownloads sf net mingw MSYS 1 0 10 exe download gt         Default selections      Batch file will ask        Do you wish to continue with the post install   Press  y  and press  e
49.   architecture name  avr2 through avr5  with the suffix  x appended  They describe how  the various memory sections will be linked together        9 11 3 2 Passing linker options from the C compiler By default  all unknown  non option arguments on the avr gcc command line  i  e   all filename arguments that  don t have a suffix that is handled by avr gcc  are passed straight to the linker  Thus   all files ending in  o  object files  and  a  object libraries  are provided to the linker     System libraries are usually not passed by their explicit filename but rather using the     1 option which uses an abbreviated form of the archive filename  see above   avr   libc ships two system libraries  1ibc a  and libm a  While the standard library  libc a will always be searched for unresolved references when the linker is started  using the C compiler frontend  i  e   there s always at least one implied  1c option    the mathematics library 1ibm a needs to be explicitly requested using    1m  See also  the entry in the FAQ explaining this     Conventionally  Makefiles use the make macro LDLIBS to keep track of    1  and  possibly    L  options that should only be appended to the C compiler command line  when linking the final binary  In contrast  the macro LDFLAGS is used to store other  command line options to the C compiler that should be passed as options during the  linking stage  The difference is that options are placed early on the command line   while libraries are put at th
50.   avr_inttypes  28       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       INDEX 379  SCNdLEAST32 5      16  avr_inttypes  28 avr_inttypes  30  SCNdPTR SCNx32  avr_inttypes  28 avr_inttypes  30  SCNi16 SCNxFAST16  avr_inttypes  28 avr_inttypes  30  SCNi32 SCNxFAST32  avr_inttypes  28 avr_inttypes  30  SCNIFASTI6 SCNxLEASTI6  avr inttypes  28 avr inttypes  30  SCNiFAST32 SCNxLEAST32  avr_inttypes  28 avr_inttypes  30  SCNiLEAST16 SCNxPTR  avr_inttypes  28 avr_inttypes  30  SCNiLEAST32 sei  avr_inttypes  28 avr_interrupts  122  SCNiPTR set_sleep_mode  avr_inttypes  29 avr_sleep  146  SCNo16 setbaud h  239  avr inttypes  29 setjmp  SCNo32 longjmp  38  avr inttypes  29 setjmp  38  SCNoFAST16 setjmp h  239  avr_inttypes  29 SIG_ATOMIC_MAX  SCNoFAST32 avr_stdint  46  avr_inttypes  29 SIG_ATOMIC_MIN  SCNoLEAST16 avr_stdint  46  avr_inttypes  29 SIGNAL  SCNoLEAST32 avr_interrupts  122  avr_inttypes  29 signbit  SCNoPTR avr_math  36  avr_inttypes  29 sin  SCNu16 avr math  36  avr inttypes  20 sinh  SCNu32 avr math  36  avr inttypes  29 SIZE MAX  SCNuFAST16 avr_stdint  46  avr_inttypes  29 sleep h  239  SCNuFAST32 sleep_cpu  avr_inttypes  30 avr_sleep  146  SCNuLEAST16 sleep_disable  avr_inttypes  30 avr_sleep  146  SCNuLEAST32 sleep_enable  avr_inttypes  30 avr_sleep  146  SCNuPTR sleep_mode    avr_inttypes  30    avr_sleep  146       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    380       SLEEP_MODE_ADC  avr_sleep  145  SLEEP_MODE_EXT_STA
51.   best  opti   mization level  Only applications that need to get the last few percent of speed benefit  from using    03     Back to FAQ Index     9 9 18 How do I relocate code to a fixed address     First  the code should be put into a new named section  This is done with a section  attribute       attribute     section    bootloader        In this example   bootloader is the name of the new section  This attribute needs to be  placed after the prototype of any function to force the function into the new section     void boot  void    attribute     section    bootloader         To relocate the section to a fixed address the linker flag  section start is used   This option can be passed to the linker using the  W1 compiler option        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 322        Wl   section start  bootloader 0x1E000    The name after section start is the name of the section to be relocated  The number  after the section name is the beginning address of the named section     Back to FAQ Index     9 9 19 My UART is generating nonsense  My ATmegal28 keeps crashing  Port  F is completely broken     Well  certain odd problems arise out of the situation that the AVR devices as shipped  by Atmel often come with a default fuse bit configuration that doesn t match the user s  expectations  Here is a list of things to care for        All devices that have an internal RC oscillator ship with the fuse enabled that  causes 
52.   define SCNIFAST32  li    define SCNdPTR SCNd16   define SCNiPTR SCNi16   define SCNo16  o    define SCNoLEAST16  o    define SCNoFAST16  o    define SCNul6  u           Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 23        define SCNuLEASTI6  u    define SCNuFAST16  u    define SCNx16  x     define SCNxLEAST16  x    define SCNxFAST16  x    define SCNo32  lo    define SCNoLEAST32  lo    define SCNoFAST32  lo    define SCNu32  lu    define SCNuLEAST32  lu    define SCNuFAST32  lu    define SCNx32  Ix    define SCNXLEAST32  Ix    define SCNxFAST32  Ix    define SCNoPTR SCNo16   define SCNuPTR SCNu16   define SCNxPTR SCNx16       6 5 2 Define Documentation    6 5 2 1  define PRId16         decimal printf format for int16 t    6 5 2 2 fidefine PRId32  Id     decimal printf format for int32 t    6 5 2 3  define PRId8  d     decimal printf format for int8 t    6 5 2 4  define PRIdFASTI6         decimal printf format for int  fast16 t    6 5 2 5  define PRI4FAST32  Id     decimal printf format for int  fast32 t    6 5 2 6  define PRIdFASTS  d     decimal printf format for int  fast8 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 24       6 5 2 7  define PRIGLEAST16         decimal printf format for int_least16_t    6 5 2 8  define PRI4LEAST32  Id     decimal printf format for int_least32_t    6 5 2 9 fidefine PRIdLEASTS  d     decimal prin
53.   for  developing the standard libraries and startup code for AVR GCC        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 15    Todo List 361       Uros Platise for developing the AVR programmer tool  uisp     Joerg Wunsch   joerg FreeBSD ORG   for adding all the AVR development  tools to the FreeBSD   http   www  freebsd org   ports tree and for pro   viding the basics for the demo project     Brian Dean   bsd bsdhome  com   for developing avrdude  an alternative to          and for contributing documentation which describes how to use it  Avr   dude was previously called avrprog              Weddington   eweddington cso atmel com   for maintaining the  WinAVR package and thus making the continued improvements to the open  source AVR toolchain available to many users     Rich Neswold for writing the original avr tools document  which he graciously  allowed to be merged into this document  and his improvements to the demo  project     Theodore A  Roth for having been a long time maintainer of many of the tools   AVR Libc  the AVR port of GDB  AVaRICE  uisp  avrdude      All the people who currently maintain the tools  and or have submitted sugges   tions  patches and bug reports   See the AUTHORS files of the various tools      And lastly  all the users who use the software  If nobody used the software  we  would probably not be very motivated to continue to develop it  Keep those bug  reports coming         9 15 Todo List    Group avr_boot From email wi
54.   function calculates the length of the initial segment of s which consists  entirely of characters not in reject  This function is similar to strcspn   except that  reject is a pointer to a string in program space    Returns     The strcspn       function returns the number of characters in the initial segment of  s which are not in the string re ject  The terminating zero is not considered as     part of string     6 16 4 14 size t strlcat P  char x dst             size_t siz   Concatenate two strings     The strlcat_P   function is similar to strlcat    except that the src string must be located  in program space  flash      Appends src to string dst of size siz  unlike strncat    siz is the full size of dst  not space  left   At most siz 1 characters will be copied  Always NULL terminates  unless siz  lt    strlen dst       Returns     The strlcat_P   function returns strlen src    MIN siz  strlen initial dst    If retval   gt   siz  truncation occurred     6 16 4 15 size_t strlcpy P  char    dst         P size t siz    Copy a string from progmem to RAM    Copy src to string dst of size siz  At most siz 1 characters will be copied  Always  NULL terminates  unless siz    0     Returns     The strlcpy       function returns strlen src   If retval  gt   siz  truncation occurred     6 16 4 16 size_t strlen P  PGM P src     The strlen      function is similar to strlen    except that src is a pointer to a string in  program space     Returns     The strlen   function returns t
55.   lt util delay_basic h gt   Basic busy wait delay loops            160  6 26 1 Detailed Description                        160  6 26 2 Function Documentation  lt 2 ae s seos s eita esas 161   lt util parity h gt   Parity bit                                      161  6 27 1 Detailed Description                        161  6 27 2 Define Documentation  22                   162   lt util setbaud h  gt   Helper macros for baud rate calculations            162  6 28 1 Detailed Description    gt  oe socra m twm      162  6 28 2 Define Documentation 22                    164   lt util twi h gt   TWI bit mask definitions                  164  629 1 Detailed Description  lt   o c a sc es 202 erma     Su v    164  6 29 2 Define Documentation                       166   lt compat deprecated h gt   Deprecated items                169  6 30 1 Detailed Description   2 22222 ea s Emm BA es 169  5 30 2  Define Doc  mentaton    lt    c se segt s sua m nips 170  6 30 3 Function Documentation                      172   lt compat ina90 h gt   Compatibility with IAR EWB3 x          172  Demo 2 oe ee e ee                                  172  6 32 1 Detailed Description                        172  Combining C and assembly source files                  174  5 25 1 Hardware         vs s s as g eee ee SRE    174  6 33 2 A Code walkthrough    oos RR 175  6333 Thesomcecod   soc eee c s was kb DRE h W ERG 177  A simple PROJECT so or eR  ey v 3 177  5241 The Pie 24 40 eco qom due puis EU SUE ees 177     
56.   or OCR1A       DDROC the name of the DDR  data direction register  for the OC output    OCI the pin number of the OCI A  output within its port      TIMER1_TOP the TOP value of the timer used for the PWM  1023 for 10 bit  PWMs  255 for devices that can only handle an 8 bit PWM        TIMER1_PWM_INIT the initialization bits to be set into control register 1A in  order to setup 10 bit  or 8 bit  phase and frequency correct PWM mode              TIMER1_CLOCKSOURCE the clock bits to set in the respective control regis   ter to start the PWM timer  usually the timer runs at full CPU clock for 10 bit  PWMs  while it runs on a prescaled clock for 8 bit PWMs          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 179       Note  2      ISRO 16    macro that marks the function as an interrupt routine  In this case  the  function will get called when timer 1 overflows  Setting up interrupts is explained  in greater detail in  lt avr interrupt h gt   Interrupts     Note  3      The PWM is being used in 10 bit mode  so we need a 16 bit variable to remember  the current value     Note  4      This section determines the new value of the PWM     Note  5      Here s where the newly computed value is loaded into the PWM register  Since  we        in      interrupt routine  it is safe to use a 16 bit assignment to the register   Outside of an interrupt  the assignment should only be performed with interrupts  disabled if there s a chance that an inte
57.   patch        Generate the latest documentation and upload to savannah     Announce the release     The following hypothetical diagram should help clarify version and branch relation     ships        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 14 Acknowledgments 360       HEAD 1 0 Branch 1 2 Branch    cvs tag avr libc 1_0 branchpoint    set version to 1 1 0  lt date gt  M  cvs tag  b avr libc 1 0 branch    set version to 0 90 90  lt date gt     t    set version to 1 0    cvs tag avr libc 1_0 release             set version to 1 0 0  lt date gt                            set version to 1 0 1  cvs tag avr libc 1_0_1 release  1  cvs tag avr libc 1_2 branchpoint i    set version to 1 3 0  lt date gt  eys tag i aqa tibet 2 branch    set version to 1 1 90   date             set version to 1 2  cvs tag avr libc 1_2 release             t       cvs tag avr libc 2 0 branchpoint  set version to 2 1 0  lt date gt        M    Figure 9  Release tree    9 14 Acknowledgments    This document tries to tie together the labors of a large group of people  Without  these individuals    efforts  we wouldn t have    terrific  free set of tools to develop AVR  projects  We all owe thanks to       The GCC Team  which produced a very capable set of development tools for an  amazing number of platforms and processors     e Denis Chertykov   denisc overta ru   for making the AVR specific  changes to the GNU tools     e Denis Chertykov and Marek Michalkiewicz  marekm8linux org pl 
58.   saves the stack context environment in __jmpb for later use      longjmp    The  stack context will be invalidated if the function which called setjmp   returns        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 40       Parameters       jmpb Variable of type jmp_buf which holds the stack information such that  the environment can be restored     Returns     setjmp   returns O if returning directly  and non zero when returning from  longjmp   using the saved context     6 8  lt stdint h gt   Standard Integer Types  6 8 1 Detailed Description     include   stdint h      Use  u intN t if you need exactly N bits     Since these typedefs are mandated by the C99 standard  they are preferred over rolling  your own typedefs     Exact width integer types    Integer types having exactly the specified width    typedef signed char int8 t   typedef unsigned char uint8 t   typedef signed int int16 t   typedef unsigned int uint16 t   typedef signed long int int32 t   typedef unsigned long int uint32 t  typedef signed long long int int64 t  typedef unsigned long long int uint64 t    Integer types capable of holding object pointers  These allow you to declare variables of the same size as a pointer       typedef int16 t intptr t     typedef uintl6 t uintptr t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 41       Minimum width integer types    Integer type
59.   that you are familiar with writing AVR assembler programs  because this  is not an AVR assembler programming tutorial  It s not a C language tutorial either     Note that this document does not cover file written completely in assembler language   refer to avr libc and assembler programs for this     Copyright  C  2001 2002 by egnite Software GmbH    Permission is granted to copy and distribute verbatim copies of this manual provided  that the copyright notice and this permission notice are preserved on all copies  Permis   sion is granted to          and distribute modified versions of this manual provided that  the entire resulting derived work is distributed under the terms of a permission notice  identical to this one     This document describes version 3 3 of the compiler  There may be some parts  which  hadn t been completely understood by the author himself and not all samples had been  tested so far  Because the author is German and not familiar with the English language   there are definitely some typos and syntax errors in the text  As a programmer the  author knows  that a wrong documentation sometimes might be worse than none  Any   way  he decided to offer his little knowledge to the public  in the hope to get enough  response to improve this document  Feel free to contact the author via e mail  For the  latest release check http    www ethernut de      Herne  17th of May 2002 Harald Kipp harald kipp at egnite de    Note     As of 26th of July 2002  this docume
60.   u g o a RE RE 295  966 C Stub Functions 222222     2 2 22  2 2    296  9 6 7    Names Used in Assembler                         297       IIBER poe Pe ega                      298  How to Builda Labraty  lt  ea da wai Gees E gg E SUNSU S 298  SS         sn aa           Re a         298  97 22 How the Linker Works                       298  9 73 Howto Designa Library    sree 0  5 2 64 k s emess 299  ITA Crea  ng a Library un vu nd kk RR Bea e o S N 299  972                  see Seemed puta RR RES 300  Potting From IAR to AVR GCC  lt  e secre      omm BA es 301  Sl             eo u e a e a sup    Cu E      3 301  982          222222222222 225558284 ee BAS 301  9 8 3 Interrupt Service Routines  ISRS                  302  984  Inbinsi                 222222225522         303  985 Flash Watiables oa lom R   y RR ERR YS 303  9 50 Non Returning maith                         304  98 7 Locking Revistes eod oops        SR E 305  Frequently Asked Questions      lt  lt  ess cee Rr RR 305  994        e  305    9 9 2      program doesn t recognize a variable updated within an                 2222 22 22 22555 da             307       Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       CONTENTS         9 9 3 I get  undefined reference to     for functions like  sinQ      307  9 9 4 How to permanently bind a variable to a register          308  9 9 5 How to modify MCUCR or WDTCR                          308  9 9 6 What is all this        stuff about                 309  99
61.   x Note  4              80 91 60 00 lds r24  0x0060    70  88 23        r24  r24  72  79   A brne   30   0x92  lt __vector_8 0x36 gt      case UP   if    pwm                 TOP     74  20 91 61 00 145 r18  0  0061  78  30 91 62 00 dds   19  0x0062  70   2f BE subi r18  OxFF   255        3f 4f Spet 41 9   ORFE 5255  80  30 93 62 00 sts 0x0062  r19  84  20 93  61 00 sta OxDODl    16    88  83   0 141  24  0x03   3   8    2f 3f cpi r18  OxFF   255   86  38 07         19  r24   8e  d9 f4 brne   54   Oxc6  lt __vector_8 0x6a gt   90  17   0 rjmp   46   0    0  lt __vector_8 0x64 gt     ISR  TIMER1_OVF_vect   x Note  2          static uintl6_t pwm     Note  3       static uint8_t direction     switch  direction   x Note  4        92 81  30 cpi r24  0  01  1  94  29 fO breq   10         0    vector 8 0  44 gt   96  20 91 61 00 145 r18  0x0061  9    30 91 62 00 1ds r19  0x0062    9e  13 cO rjmp   38   Oxc6    vector 8 0       gt   if    pwm    TIMER   TOP   direction   DOWN   break   case DOWN   if    pwm    0     a0  20 91 61 00 145 r18  0  0061  a4  30 91 62 00 145 r19  0  0062    8  21 50 subi  18  0x01   1  aa  30 40 spot 19  0x00   0  ac  30 93 62 00 sts 0x0062  r19  b0  20 93 61 00 sts 0  0061  r18    b4  21 15 cp   I        b6  31 05 cpe rl9        b8  31   4 brne   12   Oxc6  lt  vector  8 0       gt     direction   UP        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project    185       ba  10 92 60 00 sts 0  0060  r1  be  03      rjmp
62.  1  AVR                        1  New in GCC 42   2  Unofficial patch for GCC 4 1  By default  code is generated for the avr2 architecture     Note that when only using  mmcu architecture but no  mmcu MCU type  including  the file  lt avr io h gt  cannot work since it cannot decide which device s definitions  to select     e  mncu MCU type  The following MCU types are currently understood by avr gcc  The table matches    them against the corresponding avr gcc architecture name  and shows the preprocessor  symbol declared by the    mmcu option        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools    346                                                                                                                                                    Architecture MCU name Macro   avrl at90s1200 __AVR_AT90S1200__           attiny11   AVR AT  nyll    avrl attiny12   AVR AT  nyl2    avri attiny15   AVR ATt  nyl5    avri attiny28   AVR AT  ny28    avr2 29052313   AVR  479052313    avr2 at90s2323   AVR AT9082323  avra at90s2333   AVR_AT90S2333_  avr2 at90s2343   AVR_AT90S2343__  avr2 attiny22 __AVR_ATtiny22__  avr2 attiny26 __AVR_ATtiny26__  avr2 at90s4414   AVR_AT90S4414__  avr2 at90s4433   AVR_AT90S4433__  avr2 at90s4434   AVR_AT90S4434__  avr2 at90s8515 __AVR_AT90S8515__  avr2 at90c8534   AVR_AT90C8534__  avr2 at90s8535   AVR_AT90S8535_  avr2 avr25  1    at86rf401 __AVR_AT86RF401__  avr2 avr25  1    attiny13 __AVR_ATtiny13__  avr2 avr25  1
63.  18 char    strcpy  char   dest  const char    src   Copy a string     The strcpy   function copies the string pointed to by src  including the terminating    0  character  to the array pointed to by dest  The strings may not overlap  and the  destination string dest must be large enough to receive the copy     Returns     The strcpy   function returns a pointer to the destination string dest     Note     If the destination string of a strcpy   is not large enough  that is  if the programmer  was stupid lazy  and failed to check the size before copying  then anything might  happen  Overflowing fixed length strings is a favourite cracker technique     6 11 3 19 size_t strcspn  const char x s  const char x reject     The strcspn   function calculates the length of the initial segment of s which consists  entirely of characters not in re ject     Returns     The strcspn   function returns the number of characters in the initial segment of s  which are not in the string reject  The terminating zero is not considered as a  part of string     6 11 3 20 size_t strlcat  char    dst  const char x src  size t siz   Concatenate two strings     Appendis src to string dst of size siz  unlike strncat    siz is the full size of dst  not space  left   At most siz 1 characters will be copied  Always NULL terminates  unless siz  lt    strlen dst          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 89       Returns     The strlcat   function r
64.  1cd_init    first calls the initialization entry point of the lower   level HD44780 driver  and then sets up the LCD in a way we   d like to  display cleared   non blinking cursor enabled  SRAM addresses are increasing so characters will be  written left to right      The public function lcd_putchar   takes arguments that make it suitable for be   ing passed as a put    function pointer to the stdio stream initialization functions and  macros  fdevopen     FDEV_SETUP_STREAM    etc    Thus  it takes two argu   ments  the character to display itself  and a reference to the underlying stream object   and it is expected to return 0 upon success                    This function remembers the last unprocessed newline character seen in the function   local static variable nl seen  If a newline character is encountered  it will simply set  this variable to a true value  and return to the caller  As soon as the first non newline  character is to be displayed with n1 seen still true  the LCD controller is told to clear  the display  put the cursor home  and restart at SRAM address 0  All other characters  are sent to the display        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 36 Using the standard IO facilities 206       The single static function internal variable nl_seen works for this purpose  If mul   tiple LCDs should be controlled using the same set of driver functions  that would not  work anymore  as a way is needed to distinguish between the various 
65.  2 Define Documentation    6 13 21  define EEPROM REG LOCATIONS __ 1C1D1E    In order to be able to work without a requiring a multilib approach for dealing with  controllers having the EEPROM registers at different positions in memory space  the  eeprom functions evaluate _                     LOCATIONS    It is assumed to be       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 13  lt avr eeprom h gt   EEPROM handling 101       defined by the device io header and contains 6 uppercase hex digits encoding the ad   dresses of EECR EEDR        EEAR  First two letters  EECR address  Second two  letters  EEDR address  Last two letters  EEAR address  The default ICIDIE corre   sponds to the register location that is valid for most controllers  The value of this define  symbol is used for appending it to the base name of the assembler functions     6 13 2 2  define _EEGET var  addr   var    eeprom read byte   uint8_t     addr      Read a byte from EEPROM  Compatibility define for        C     6 13 2 3  define _EEPUT addr  val  eeprom write byte   uint8_t    addr     uint8_t  val      Write a byte to EEPROM  Compatibility define for               6 13 2 4  define EEMEM __attribute__   section    eeprom         Attribute expression causing a variable to be allocated within the  eeprom section     6 13 2 5  define eeprom busy  wait   do    while   eeprom is ready       Loops until the eeprom is no longer busy     Returns     Nothing     6 13 2 6  define eeprom is re
66.  26  define TW ST DATA          0    0    data transmitted  NACK received    6 29 2 27  define TW ST LAST DATA 0xC8    last data byte transmitted  ACK received    6 29 2 28  define TW ST SLA        0xA8  SLA R received  ACK returned    6 29 2 29  define TW START 0x08    start condition transmitted    6 29 2 30  define TW STATUS  TWSR  amp  TW STATUS MASK   TWSR  masked by TW STATUS MASK    6 29 2 31  define TW STATUS MASK  Value      _BV  TWS7   _BV TWS6   _BV TWS5   _BV TWS4       _BV  TWS3       The lower 3 bits of TWSR are reserved on the ATmegal63  The 2 LSB carry the  prescaler bits on the newer ATmegas     6 29 2 32  define TW WRITE 0  SLA W address       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 30  lt compat deprecated h gt   Deprecated items 169       6 30  lt compat deprecated h gt   Deprecated items  6 301 Detailed Description    This header file contains several items that used to be available in previous versions of  this library  but have eventually been deprecated over time      include  lt compat deprected h gt     These items are supplied within that header file for backward compatibility reasons  only  so old source code that has been written for previous library versions could easily  be maintained until its end of life  Use of any of these items in new code is strongly  discouraged     Allowing specific system wide interrupts    In addition to globally enabling interrupts  each device s particular interrupt needs to  be enabled sep
67.  27 Which AVR specific assembler operators are available          326  9 9 28 Why are interrupts re enabled in the middle of writing the stack  DOMI    a eae eee boe        E de e 326  9 9 29 Why are there five different linker                2            327  9 9 30 How to add a raw binary image to linker output          327       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS 1       9 9 31 How do I perform a software reset of the                 328  9 10 Building and Installing the GNU Tool                        329  9 10 1 Building and Installing under Linux  FreeBSD  and Others     329  9 10 2              Tools   s c eso c wo k a rape eea 330  9 10 3 Optional Tools    22222 2 m e n x n RR Rs 330  9 10 4 GNU Binutils for the                                    331  9 10 5 GCC forthe AVR target   o oss  s Sos ER os 332  9 106 AVR EIDE eem eS RE RASSE RS 333  Oe 2 iu    mas    deb eS ee ee eS 333  910 8 GDB for the AVR target  lt   o os   u s ek ER RS 334  9 10 9 SIMNIAVE 2o omm        b n n v  N Q S 334  DIO AU ANSBICE  oc bo md REESE RR EG      REI 335  9 10 11 Building and Installing under Windows              335  9 10 12 Tools Required for Building the Toolchain for Windows       336  9 10 13 Building the Toolchain for Windows                 330  9 11 Using the GNU tools                            345  9 11 1 Options for the C compiler                              345  9 11 2 Optionsfortheassembleravr as                    351  9 11 3 Cont
68.  46  JINT16 C  46         16 MAX  46  int16 t  49   JINT32 C  46   JINT32 MAX  46  int32 t  49   JINT64  C  46   JINT64 MAX  46  int64 t  49         8 C  46   JINT8  MAX  47   int8 t  50   JINT FAST16         47  int fastl6 t  50   JINT FAST32  MAX  47  int fast32 t  50   JINT FAST64 MAX  47  int fast64 t  50   JINT FAST8 MAX  47  int fast8 t  50   JINT LEASTI6 MAX  47  int           16 t  50   JINT LEAST32  MAX  47  int least32 t  50   INT LEAST64 MAX  47  int least64 t  50   INT LEAST8 MAX  47  int least8 t  50  JINTMAX C  47  JINTMAX MAX  47  intmax t  51   JINTPTR  MAX  48                           Ce                                          GE    ECCECE       E       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    369       uintptr_t  51  avr_stdio  _FDEV_EOF  56  _FDEV_ERR  56  _FDEV_SETUP_READ  56  _FDEV_SETUP_RW  56  _FDEV_SETUP_WRITE  56  clearerr  58  EOF  56  fclose  58  fdev_close  56  fdev_get_udata  56  fdev_set_udata  56  FDEV_SETUP_STREAM  57  fdev_setup_stream  57  fdevopen  59  feof  59  ferror  60  fflush  60  fgetc  60  fgets  60  FILE  57  fprintf  60  fprintf P  60  fputc  60  fputs  60  fputs P  61  fread  61  fscanf  61  fscanf P  61  fwrite  61  getc  57  getchar  57  gets  61  printf  61  printf P  62  putc  58  putchar  58  puts  62  puts P  62  scanf  62  scanf P  62  snprintf  62  snprintf P  62  sprintf  62  sprintf P  62    sscanf  62  sscanf P  63  stderr  58  stdin  58  stdout  58  ungetc  63  vfprintf  63  vfprintf P
69.  9 9 31 How do I perform a software reset of the AVR     The canonical way to perform a software reset of the AVR is to use the watchdog timer   Enable the watchdog timer to the shortest timeout setting  then go into an infinite  do   nothing loop  The watchdog will then reset the processor     The reason why this is preferrable over jumping to the reset vector  is that when the  watchdog resets the AVR  the registers will be reset to their known  default settings   Whereas jumping to the reset vector will leave the registers in their previous state   which is generally not a good idea     CAUTION  Older AVRs will have the watchdog timer disabled on a reset  For these  older AVRs  doing a soft reset by enabling the watchdog is easy  as the watchdog will  then be disabled after the reset  On newer AVRs  once the watchdog is enabled  then it  stays enabled  even after a reset  For these newer AVRs a function needs to be added  to the  init3 section  i e  during the startup code  before main    to disable the watchdog  early enough so it does not continually reset the AVR     Here is some example code that creates a macro that can be called to perform a soft  reset      include   avr wdt h       define soft reset    do     wdt_enable  WDTO_15MS     for              while  0     PO GOGO GO GG       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 329       For newer AVRs  such as the ATmega1281  also add this functio
70.  AT   mega2561  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646  TIMER3_  SIG_  Timer Counter3 AT90CAN128  AT90CAN32  AT90CANGA   OVF_vect OVERFLOW3 Overflow ATmegal28  ATmegal62  ATmega64         mega640  ATmegal280  ATmegal281  AT   mega2560  ATmega2561  AT90USB1287   AT90USB 1286  AT90USB647   AT90USB646  TIMER4   SIG_INPUT_  Timer Counter4 ATmega640  ATmegal280  ATmegal281   CAPT_vect CAPTURE4 Capture Event ATmega2560  ATmega2561  TIMER4   SIG_  Timer Counter4 ATmega640  ATmegal280  ATmegal281   COMPA vect OUTPUT   Compare Match   ATmega2560  ATmega2561  COMPARE4A   A  TIMER4   SIG_  Timer Counter4 ATmega640  ATmegal280  ATmegal281   COMPB vect OUTPUT   Compare Match   ATmega2560  ATmega2561  COMPAREAB B  TIMERA   SIG   Timer Counter4 ATmega640  ATmegal280  ATmegal281              vect OUTPUT   Compare Match   ATmega2560  ATmega2561  COMPAREAC   C  TIMERA   SIG   Timer Counter4 ATmega640  ATmegal280  ATmegal281   OVF vect OVERFLOWA Overflow ATmega2560  ATmega2561  TIMERS   SIG INPUT   Timer Counter5 ATmega640  ATmegal280  ATmegal281   CAPT vect CAPTURES Capture Event ATmega2560  ATmega2561  TIMERS_  SIG_  Timer Counter5 ATmega640  ATmegal280  ATmegal281   COMPA vect OUTPUT_  Compare Match   ATmega2560  ATmega2561  COMPARESA   A  TIMERS_  SIG_  Timer Counter5 ATmega640  ATmegal280  ATmegal281   COMPB vect OUTPUT   Compare Match   ATmega2560  ATmega2561  COMPARESB B  TIMERS   SIG   Timer Counter5 ATmega640  ATmegal280  ATmegal281              vect OUTPUT   Compare Match  
71.  ATmega2560  ATmega2561  COMPARESC   C  TIMERS   SIG   Timer Counter5 ATmega640  ATmegal280  ATmegal281   OVF vect OVERFLOWS Overflow ATmega2560  ATmega2561  TWI vect SIG 2WIRE     2 wire Serial In    AT90CANI28  AT90CAN32  AT90CAN64   SERIAL terface ATmegal28  ATmegal6  ATmegal63   ATmega32              323  ATmega406   ATmega64                  ATmega8535   ATmegal68  ATmega48  ATmega88         mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT     mega324P  ATmegal64P  ATmega644P         mega644  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen                                                                                                 6 14  lt avr interrupt h gt   Interrupts 117  Vector name Old vector   Description Applicable for device  name  TXDONE_  SIG_  Transmission AT86RF401  vect TXDONE Done  Bit Timer  Flag 2 Interrupt  TXEMPTY_  SIG_TXBE Transmit Buffer   AT86RF401  vect Empty  Bit Itmer  Flag 0 Interrupt  UARTO_RX_  SIG_  UARTO  Rx   ATmegal61  vect UARTO_  Complete  RECV  UARTO_TX_  SIG_  UARTO  Tx   ATmegal61  vect UART0_  Complete  TRANS  UARTO_  SIG_  UARTO Data   ATmegal61  UDRE_vect UARTO_  Register Empty  DATA  UART1_RX_  SIG_  UARTI  Rx   ATmegal61  vect UARTI   Complete  RECV  UARTI TX   SIG   UARTI  Tx   ATmegal61  vect UARTI   Complete  TRANS  UARTI   SIG   UARTI Data   ATmegal61  UDRE vect UARTI   Register Empty  DATA  UART RX   SIG  UART   UART  Rx Com    AT90S2313
72.  Ix     hexadecimal printf format for uint32_t    6 5 2 45  define PRIX8  X     uppercase hexadecimal printf format for uint8_t    6 5 2 46  define PRIx8  x     hexadecimal printf format for uint8_t    6 5 2 47  define PRIXFAST16  X     uppercase hexadecimal printf format for uint_fast16_t    6 5 2 48  define PRIxFASTI16  x     hexadecimal printf format for uint_fast16_t    6 5 2 49  define PRIXFAST32  IX     uppercase hexadecimal printf format for uint  fast32 t    6 5 2 50  define PRIxFAST32  Ix     hexadecimal printf format for        fast32 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 28       6 5 2 51  define PRIXFASTS  X     uppercase hexadecimal printf format for uint  fast8 t    6 5 2 52  define PRIxFASTS         hexadecimal printf format for uint_fast8_t    6 5 2 53  define PRIXLEAST16  X     uppercase hexadecimal printf format for uint_least16_t    6 5 2 54  define PRIXLEAST16         hexadecimal printf format for uint_least16_t    6 5 2 55  define PRIXLEAST32  IX     uppercase hexadecimal printf format for uint_least32_t    6 5 2 56  define PRIXLEAST32  Ix     hexadecimal printf format for uint_least32_t    6 5 2 57  define PRIXLEASTS  X     uppercase hexadecimal printf format for        least8 t    6 5 2 58  define PRIXLEASTS  x     hexadecimal printf format for        least8 t    6 5 2 59  define PRIXPTR PRIX16    uppercase hexadecimal printf format for uintptr t    6 5 2 60  define PRIx
73.  Oct 29 20 02 34 2007 for avr libc by Doxygen    13 Supported Devices       at90pwm2    at90pwm2b    at90pwm216    at90pwm3    at90pwm3b  e at90pwm316    Smart Battery AVR Devices       atmega8hva    atmegal6hva      atmega406    USB AVR Devices     at90usb82    at90usb162    at90usb646    at90usb647    at90usb1286      at90usb1287    Miscellaneous Devices     at94K  2     at76c711  3     at43usb320    at43usb355    at86rf401       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    14 avr libc License 7       Classic AVR Devices     319051200  1     at90s2313    at90s2323    at90s2333    at90s2343    219054414    219054433    219054434    219058515    at90c8534    at90s8535    Note      1  Assembly only  There is no direct support for these devices to be programmed  in C since they do not have a RAM based stack  Still  it could be possible to  program them in C  see the FAQ for an option     Note      2  The at94K devices are a combination of FPGA and AVR microcontroller    TRoth 2002 11 12  Not sure of the level of support for these  More information  would be welcomed       Note    3  The at76c711 is a USB to fast serial interface bridge chip using an AVR core     1 4 avr libc License    avr libc can be freely used and redistributed  provided the following license conditions  are met        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    1 4 avr libc License       Portions of avr libc are Copyright  c  1999 2007    Keith Gudger    Bjoern Haase
74.  Ox3D  Ox3E            0x40  0x41  0x42  0x43  0x44  0x45     0  46  0  47  0  48  0x49  0x4A  0x4B  0x4C  0x4D  0x4E  0x4F     0x50 0x51 0x52 0x53 0x54  0x55  0x56  0x57 0x58 0x59     0x5A  0x5B  0x5C  0x5D  0x5E  Ox5F  0x60  0x61 0x62 0x63     0x64  0x65  0x66  0x67 0x68  0x69  0Ox6A  0x6B  0x6C  0x6D         and later      your code you access this data in a function and store a single byte into     variable like so     byte   mydata i   j    Now you want to store your data in Program Memory  Use the PROGMEM macro found    in  lt avr pomspace  h gt  and put it after the declaration of the variable  but before  the initializer  like so         include  lt avr pgmspace h gt     unsigned char mydata 11   10  PROGMEM        0x00  0  01  0  02  0  03  0  04  0  05  0  06  0  07  0  08  0x09    0  0   0  0   0  0   0  0   0  0   0  0   0  10 0  11 0  12 0  13    0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D    Ox1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27    0x28 0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F 0x30 0x31    0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B    0x3C 0x3D 0x3E 0x3F 0x40 0x41 0x42 0x43 0x44 0x45    0x46 0x47 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F    0x50 0x51 0x52 0x53 0x54 0x55 0x56 0x57 0x58 0x59    Ox5A 0x5B 0x5C 0x5D 0x5E 0x5F 0x60 0x61 0x62 0x63    0x64 0x65 0x66 0x67 0x68 0x69 0x6A 0x6B  0x6C  0x6D                      That s it  Now your data is in the Program Space  You        compile  link  and check  the map file to verify that mydata is placed
75.  PROGMEM    Bar             P array 2  PROGMEM   1  foo   bar         int main  void      char       32         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions    319       PGM_P      int i     memcpy P  amp p   strcpy  P  buf   return 0      amp array i            sizeof PGM_P       Looking at the disassembly of the resulting object file we see that array is in flash as    such     00000026  lt array gt    26  2e 00  28  2a 00    0x002e  0  002       word   word    0000002a  lt bar gt    2    42 61 72 00    0000002    lt foo gt    2    46 6   6   00    foo is at addr 0x002e   bar is at addr 0x002a   array is at addr 0x0026     Then in main we see this     memcpy_P  amp p   amp arraylil     2999      27277                    sizeof PGM_P       70  66 0   add r225 522           ag eats adc 23  123  74       5   subi r22  OxDA j  TGL 7f 4f sbci r23  OxFF    78  42   0 ldi  20  0x02    Ta  50   0 idi r21  0  00 F  7         01 movw r24  r28  7e  81 96 adiw r24  0x21 r  80  08      rcall   16       Bar     Foo     218  255    33  0  92    This code reads       pointer to the desired string from              table array into a    register pair     The value of i  in r22 r23  is doubled to accomodate for the word offset required to  access array    then the address of array  0x26  is added  by subtracting the negated  address  Oxffda   The address of variable p is computed by adding its offset within the  stack frame  33  to the Y poi
76.  SLA W transmitted  NACK received       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    629  lt util twi h gt   TWI bit mask definitions 167       6 29 2 12  define TW NO INFO 0xF8    no state information available    6 29 2 13  define TW READ 1  SLA R address    6 29 2 14  define TW REP START 0x10    repeated start condition transmitted    6 29 2 15  define TW_SR_ARB_LOST_GCALL_ACK 0x78       arbitration lost in SLA RW  general call received  ACK returned    6 29 2 16  define TW_SR_ARB_LOST_SLA_ACK 0x68  arbitration lost in SLA RW  SLA W received  ACK returned       6 29 2 17  define TW_SR_DATA_ACK 0x80    data received  ACK returned    6 29 2 18  define TW_SR_DATA_NACK 0x88    data received  NACK returned    6 29 2 19  define TW_SR_GCALL_ACK 0x70    general call received  ACK returned    6 29 2 20  define TW_SR_GCALL_DATA_ACK 0x90    general call data received  ACK returned    6 29 2 21  define TW_SR_GCALL_DATA_NACK 0x98    general call data received  NACK returned    6 29 2 22  define TW_SR_SLA_ACK 0x60  SLA W received  ACK returned       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    629  lt util twi h gt   TWI bit mask definitions 168       6 29 2 23  define TW SR STOP 0xA0    stop or repeated start condition received while selected    6 29 2 24  define TW ST        LOST SLA        0    0  arbitration lost in SLA RW  SLA R received  ACK returned       6 29 2 25  itdefine TW ST DATA        0xB8    data transmitted  ACK received    6 29 2
77.  SMO     define SLEEP_MODE_PWR_DOWN _BV SM1     define SLEEP_MODE_PWR_SAVE  _BV SMO    _BV SM1      define SLEEP  MODE  STANDBY        5  1    BV SM2      define  SLEEP  MODE EXT STANDBY   BV SMO    BV SMD      BV SM2            6 20 2 Define Documentation    6 20 2 1  define SLEEP MODE        BV SMO   ADC Noise Reduction Mode     6 20 2 2  define SLEEP MODE EXT STANDBY   BV SM0    BV SMI1      BV SM2      Extended Standby Mode     6 20 2 3 define SLEEP MODE IDLE 0  Idle mode     6 20 2 4  define SLEEP MODE PWR DOWN BV SMI     Power Down Mode     6 20 2 5  define SLEEP MODE PWR SAVE   BV SM0    BV SM1         Power Save Mode     6 20 2 6  define SLEEP MODE STANDBY  _BV SM1    BV SM2    Standby Mode        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    621  lt avr version h gt   avr libc version macros 147       6 20 3 Function Documentation    6 20 3 1 void set_sleep_mode  uint8_t mode     Select a sleep mode     6 20 3 2 void sleep_cpu  void     Put the device into sleep mode  The SE bit must be set beforehand  and it is recom   mended to clear it afterwards     6 20 3 3 void sleep_disable  void   Clear the SE  sleep enable  bit     6 20 3 4 void sleep_enable  void   Set the SE  sleep enable  bit     6 20 3 5 void sleep_mode  void     Put the device in sleep mode  How the device is brought out of sleep mode depends on  the specific mode selected with the set_sleep_mode   function  See the data sheet for  your device for more details     6 21  lt avr version
78.  Some of these modes are not available on all devices  See the datasheet for  target device for the available sleep modes      define SLEEP_MODE_IDLE 0   define SLEEP_MODE_ADC _BV SM0     define SLEEP_MODE_PWR_DOWN _BV SM1     define SLEEP_MODE_PWR_SAVE    BV SMO    _BV SM1      define SLEEP  MODE  STANDBY  _BV SM1     BV SM2      define SLEEP  MODE EXT  STANDBY   BV SMO    _BV SMI         BV SM2            Functions  Sleep Functions    void set_sleep_mode  uint8_t mode   void sleep_mode  void    void sleep_enable  void    void sleep_disable  void    void sleep_cpu  void     8 38 stdint h File Reference  8 38 1 Detailed Description    Defines       define   USING MINT8 0       define _ CONCATenate left  right  left    right      define __CONCAT Ieft  right  _ CONCATenate left  right     Limits of specified width integer types    C   implementations should define these macros only when __ STDC  LIMIT    MACROS is defined before  lt stdint h gt  is included     define INT8 MAX Ox7f    define INT8 MIN         8 MAX   1     define UINTS MAX    CONCAT INT8 MAX  U     2U   1U    define INTI6 MAX Ox7fff    define INTI6 MIN   INT16 MAX   1     define UINTIG6 MAX    CONCAT INT16 MAX  U    2U   1U    define INT32 MAX Ox 7fffffffL    define INT32 MIN   INT32 MAX   IL     define UINT322 MAX    CONCAT INT32 MAX  U    2UL           define INT64_MAX Ox 7fffffffffffffIfLL          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 38 stdint h File Reference 242           defi
79.  The sin   function returns the sine of x  measured in radians     6 6 3 29 double sinh  double x     The sinh   function returns the hyperbolic sine of x     6 6 3 30 double sqrt  double x     The sqrt   function returns the non negative square root of x     6 6 3 31 double square  double x     The function square   returns x    x     Note     This function does not belong to the C standard definition     6 6 3 32 double tan  double __x     The tan   function returns the tangent of x  measured in radians     6 6 3 33 double tanh  double __x     The tanh   function returns the hyperbolic tangent of x        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 7  lt setjmp h gt   Non local goto 38       6 6 3 34 double trunc  double x     The trunc   function rounds x to the nearest integer not larger in absolute value     6 7  lt setjmp h gt   Non local goto  6 7 1 Detailed Description    While the C language has the dreaded got o statement  it can only be used to jump to  a label in the same  local  function  In order to jump directly to another  non local   function  the C library provides the setjmp          longjmp   functions  setjmp   and  longjmp   are useful for dealing with errors and interrupts encountered in a low level  subroutine of a program     Note     setjmp   and longjmp   make programs hard to understand and maintain  If possi   ble  an alternative should be used    longjmp   can destroy changes made to global register variables  see How to pe
80.  To use interactive mode  use the    t option       avrdude     2313  t   avrdude  AVR device initialized and ready to accept instructions  avrdude  Device signature   0  1  9101   avrdude gt     The         command displays    list of valid  commands     avrdude gt      gt  gt  gt     Valid commands     dump   dump memory   dump  lt memtype gt   lt addr gt   lt N Bytes gt    read   alias for dump   write   write memory   write  lt memtype gt    addr     bl    lt b2 gt       lt bN gt   erase   perform a chip erase   sig   display device signature bytes   part   display the current part information   send   send a raw command   send   bl    lt b2 gt   lt b3 gt   lt b4 gt    help   help   2   help   quit   quit       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 13 Release Numbering and Methodology 357       Use the  part  command to display valid memory types for use with the     dump    and  write  commands     avrdude gt     9 13 Release Numbering and Methodology  9 13 1 Release Version Numbering Scheme    9 13 1 1 Stable Versions    stable release will always have a minor number that is  an even number  This implies that you should be able to upgrade to a new version of  the library with the same major and minor numbers without fear that any of the APIs  have changed  The only changes that should be made to a stable branch are bug fixes  and under some circumstances  additional functionality  e g  adding support for a new  device      If major version n
81.  UINT32 MAX    CONCAT INT32         U    2UL   100    define INT64  MAX 0x7                   define INT64  MIN   INT64 MAX   ILL     define UINT  4 MAX  _ CONCAT INT64 MAX  U  x 2ULL   LULL              Limits of minimum width integer types     define INT LEAST8 MAX       8 MAX   define INT LEAST8 MIN INT8 MIN   define UINT LEASTS MAX UINT8 MAX  fdefine INT LEASTI6 MAX INTI6 MAX   define INT LEASTI6 MIN INT16 MIN   define UINT LEASTI6 MAX UINTI6 MAX  fdefine INT LEAST32 MAX INT32 MAX   define INT LEAST32 MIN INT32 MIN   define UINT LEAST32 MAX UINT32 MAX  fdefine INT LEAST64 MAX INT64 MAX   define INT LEAST64 MIN INT64 MIN   define UINT LEAST64 MAX UINT64                 Limits of fastest minimum width integer types     define INT FAST8 MAX       8 MAX   define INT FAST8 MIN INT8 MIN   define UINT FASTS MAX UINT8 MAX   define INT FASTI6 MAX            MAX   define INT FASTI6 MIN INTI6 MIN   define UINT FASTI6 MAX UINTI6 MAX   define INT FAST32 MAX INT32          define INT FAST32 MIN INT32 MIN   define UINT FAST32 MAX UINT32 MAX   define INT FAST64 MAX INT64 MAX   define INT FAST64 MIN INT64 MIN   define UINT FAST64 MAX UINT64 MAX             Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 43       Limits of integer types capable of holding object pointers        define INTPTR_MAX INT16_MAX      define INTPTR_MIN INT16_MIN     define UINTPTR_MAX UINT16_MAX    Limits of greatest width integer types        define IN
82.  a  program space string   Note also the use of the  PSTRQ macro     Back to FAQ Index     9 9 21 Why does the compiler compile an 8 bit operation that uses bitwise oper   ators into a 16 bit operation in assembly     Bitwise operations in Standard C will automatically promote their operands to an int   which is  by default  16 bits in avr gcc        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 324       To work around this use typecasts on the operands  including literals  to declare that  the values are to be 8 bit operands     This may be especially important when clearing a bit   var  amp     mask      wrong way  x     The bitwise  not  operator     will also promote the value in mask to an int  To keep  it an 8 bit value  typecast before the  not  operator     var  amp    unsigned char   mask     Back to FAQ Index     9 9 22 How to detect RAM memory and variable overlap problems     You can simply run avr nm on your output  ELF  file  Run it with the  n option  and  it will sort the symbols numerically  by default  they are sorted alphabetically      Look for the symbol _end  that   s the first address in RAM that is not allocated by  a variable   avr gcc internally adds 0x800000 to all data bss variable addresses  so  please ignore this offset   Then  the run time initialization code initializes the stack  pointer  by default  to point to the last avaialable address in  internal  SRAM  Thus   the region between _end and
83.  already uses 32 bit calculations  this causes a loss of preci   sion  See random    for an alternate set of functions that retains full 32 bit precision     6 10 4 20 int rand     unsigned long    ctx     Variant of rand   that stores the context in the user supplied variable located at ct x  instead of a static library variable so the function becomes re entrant     6 10 4 21 long random  void     The random   function computes a sequence of pseudo random integers in the range of  0 to RANDOM_MAX  as defined by the header file  lt stdlib h gt       The srandom   function sets its argument seed as the seed for a new sequence of  pseudo random numbers to be returned by rand    These sequences are repeatable by  calling srandom   with the same seed value     If no seed value is provided  the functions are automatically seeded with a value of 1     6 10 4 22 long random     unsigned long   ctx     Variant of random   that stores the context in the user supplied variable located at ct x  instead of a static library variable so the function becomes re entrant     6 10 4 23 void   realloc  void    __ptr  size_t     size     The realloc   function tries to change the size of the region allocated at pt r to the new  size value  It returns a pointer to the new region  The returned pointer might be the  same as the old pointer  or a pointer to a completely different region     The contents of the returned region up to either the old or the new size value  whatever  is less  will be id
84.  an alphabetic character  It is equivalent to  isupper c     islower c       6 3 2 3 int isascii  int        Checks whether c is a 7 bit unsigned char value that fits into the ASCII character set     6 3 2 4 int isblank  int _ c     Checks for a blank character  that is  a space or a tab     6 3 2 5 int iscntrl  int        Checks for a control character     6 3 2 6 int isdigit  int      Checks for a digit  0 through 9      6 3 2 7 int isgraph  int        Checks for any printable character except space     6 3 2 8 int islower  int _ c     Checks for a lower case character     6 3 2 9 int isprint  int        Checks for any printable character including space     6 3 2 10 int ispunct  int        Checks for any printable character which is not a space or an alphanumeric character     6 3 2 11 int isspace  int        Checks for white space characters  For the avr libc library  these are  space  form   feed        newline C Nn   carriage return      r      horizontal tab      t      and vertical tab    CN         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 4  lt errno h gt   System Errors 19       6 3 2 12 intisupper int        Checks for an uppercase letter     6 3 2 13 intisxdigit  int _ c   Checks for a hexadecimal digits  i e  oneof0123456789abcdefABCDEE    6 3 2 14      toascii  int c     Converts c to a 7 bit unsigned char value that fits into the ASCII character set  by  clearing the high order bits     Warning     Many people will be unhappy if you us
85.  avr5 at90can32   AVR AT90CAN32    avr5 at90can64 _   _AVR_AT90CAN64__  avr5 at90can128   AVR AT90CANI28    avr5 at90usb82   AVR AT90USB82    avr5 at90usb162   AVR AT90USBIG2    avr5 at90usb646 __AVR_AT90USB646__  avr5 at90usb647   AVR AT90USB647    avr5 at90usb1286   _        AT90USBI1286    avr5 at90usb1287     AVR AT90USBI1287    avr5 atmegal28   AVR ATmegal28    avr5 atmegal280   AVR ATmegal280    avr5 atmegal281   AVR ATmegal281    avr5 atmegal6 __AVR_ATmegal6__  avr5 atmegal61 __AVR_ATmegal61__  avr5 atmegal62   AVR ATmegal62    avr5 atmegal  3   AVR ATmegal63    avr5 atmegal64p   AVR ATmegal64P _  avr5 atmega165   AVR ATmegal65    avr5 atmegal65p     AVR ATmegal65P    avr5 atmegal68   AVR ATmegal  8    avr5 atmegal68p     AVR ATmegal68P    avr5 atmegal69   AVR ATmegal69    avr5 atmegal69p       AVR ATmegal69P    avr5 atmegal6hva   _ AVR  ATmegal6HVA    avr5 atmega32   AVR ATmega32    avr5 atmega323   AVR ATmega323    avr5 atmega324p   _ AVR ATmega324P    avr5 atmega325   AVR ATmega325    avr5 atmega325p     AVR ATmega325P __  avr5 atmega3250   AVR ATmega3250    avr5 atmega3250p     AVR ATmega3250P    avr5 atmega328p     AVR ATmega328P    avr5 atmega329   AVR ATmega320    avr5 atmega329p     AVR ATmega329P    avr5 atmega3290   AVR ATmega3290               Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 348                                                       Architecture MCU name Macro   avr5 atmega3290p     AVR ATmega3290P    
86.  avr_inttypes  22  PRIdFASTS  avr inttypes  22  PRIdLEAST16  avr_inttypes  22  PRIdLEAST32  avr_inttypes  23  PRIdLEASTS  avr inttypes  23  PRIdPTR  avr inttypes  23  PRIi16                         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    377       avr_inttypes  23  PRIi32   avr_inttypes  23        8   avr_inttypes  23  PRIFASTI16   avr inttypes  23  PRIFAST32   avr inttypes  23  PRIFAST8   avr_inttypes  23  PRILEAST16   avr_inttypes  23  PRILEAST32   avr inttypes  23                 8   avr_inttypes  24  PRIiPTR   avr_inttypes  24  printf   avr_stdio  61  printf_P   avr_stdio  62  PRIo16   avr inttypes  24  PRIo32   avr inttypes  24  PRIo8   avr inttypes  24  PRIoFAST16   avr_inttypes  24  PRIoFAST32   avr_inttypes  24  PRIoFAST8   avr_inttypes  24  PRIoLEASTI6   avr inttypes  24  PRIoLEAST32   avr inttypes  24  PRIoLEASTS   avr inttypes  24  PRIoPTR   avr inttypes  25  PRIu16   avr inttypes  25  PRIu32    avr inttypes  25  PRIu8   avr inttypes  25  PRIuFAST16   avr_inttypes  25  PRIuFAST32   avr_inttypes  25  PRIuFASTS   avr inttypes  25  PRIULEAST16   avr_inttypes  25  PRIULEAST32   avr_inttypes  25  PRIuLEASTS   avr inttypes  25  PRIuPTR   avr inttypes  25  PRIX16   avr_inttypes  26  PRIx16   avr_inttypes  26  PRIX32   avr_inttypes  26  PRIx32   avr_inttypes  26  PRIX8   avr_inttypes  26  PRIx8   avr_inttypes  26  PRIXFAST16   avr_inttypes  26  PRIxFAST16   avr_inttypes  26  PRIXFAST32   avr_inttypes  26  PRIxFAST32   avr_inttypes  26     
87.  by Doxygen    611  lt string h gt   Strings 91       6 11 3 28 size t strnlen  const char    src  size_t len   Determine the length of a fixed size string     The strnlen function returns the number of characters in the string pointed to by src  not  including the terminating 7 0    character  but at most len  In doing this  strnlen looks  only at the first len characters at src and never beyond src len     Returns     The strnlen function returns strlen src   if that is less than len  or len if there is no      0    character among the first len characters pointed to by src     6 11 3 29 char    strpbrk  const char   s  const char    accept     The strpbrk   function locates the first occurrence in the string s of any of the characters  in the string accept     Returns     The strpbrk   function returns a pointer to the character in s that matches one of  the characters in accept  or NULL if no such character is found  The terminating  zero is not considered as a part of string  if one or both args are empty  the result  will NULL     6 11 3 30 char x strrchr  const char x src  int val   Locate character in string     The strrchr   function returns a pointer to the last occurrence of the character val in the  string src     Here  character  means  byte    these functions do not work with wide or multi byte  characters     Returns     The strrchr   function returns a pointer to the matched character or NULL if the  character is not found     6 11 3 31 char x strrev  char   s
88.  can hold     6 8 2 3  define INT16_MIN   INT16_MAX   1     smallest negative value an int16_t can hold     6 8 2 4  define INT32_C value  _ CONCAT value  L     define a constant of type int32_t    6 8 2 5  define INT32 MAX Ox7fffffffL    largest positive value an int32 t can hold     6 8 2 6  define INT32 MIN   INT32 MAX   1L     smallest negative value an int32 t can hold     6 8 2 7  define INT64_C value  CONCAT value  LL     define a constant of type int64 t    6 8 2 8  define INT64        OXx   fEfffffffffffffLL    largest positive value an int64 t can hold     6 8 2 9  define INT64 MIN   INT64 MAX   ILL     smallest negative value an int64_t can hold     6 8 2 10 define INT8_C value    int8 t  value     define a constant of type int8 t    6 8 2 11  define INT8 MAX 0x7f    largest positive value an int8 t can hold        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 45       6 8 2 12  define INT8 MIN   INT8 MAX   1     smallest negative value an int8 t can hold     6 8 2 13  define INT FASTI6 MAX INTI6           largest positive value an int  fast16 t can hold     6 8 2 14 ftdefine INT FAST16 MIN INT16 MIN    smallest negative value an int  fast16 t can hold     6 8 2 15  define INT FAST32 MAX INT32 MAX    largest positive value an int  fast32 t can hold     6 8 2 16  define INT FAST32 MIN INT32 MIN    smallest negative value an int  fast32 t can hold     6 8 2 17  define INT FAST64 MAX INT64 MAX    largest 
89.  char    Itoa  long int __val  char x__s  int radix    char    utoa  unsigned int __val  char x__s  int radix    char    ultoa  unsigned long int __ val  char  __s  int __radix   long random  void    void srandom  unsigned long __seed    long random_r  unsigned long  ctx                 Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 40 stdlib h File Reference 247       Conversion functions for double arguments     Note that these functions are not located in the default library  1ibc a  but in the  mathematical library  1ibm a  So when linking the application  the    1m option needs  to be specified        define DTOSTR_ALWAYS_SIGN 0x01      define DTOSTR_PLUS_SIGN 0x02      define DTOSTR_UPPERCASE 0x04   e char    dtostre  double __val  char    s  unsigned char __ prec  unsigned char    flags       char    dtostrf  double __val  signed char __ width  unsigned char  prec  char    S     Defines        define STDLIB H 1       define need NULL        define need size t       define need wchar t       define     ptr t void          define RAND MAX 0x7FFF    Typedefs       typedef int x  compar fn t  const void     const void        Functions    e inline void abort  void  ATTR NORETURN     int abs  int 1  ATTR  CONST   long labs  long __i           CONST   void    bsearch  const void  __key  const void    base  size_t __nmemb  size_t    size  int  __compar  const void     const void        div t div  int _ num  int _ denom  asm    divmodhi4   _ ATTR            
90.  converted  The complete conversion specifica   tion is               eE The double argument is rounded and converted in the format      d ddde dd  where there is one digit before the decimal point charac   ter and the number of digits after it is equal to the precision  if the precision  is missing  it is taken as 6  if the precision is zero  no decimal point character  appears  An E conversion uses the letter   E   rather than          to introduce  the exponent  The exponent always contains two digits  if the value is zero  the  exponent is 00          F The double argument is rounded and converted to decimal notation in the  format       ddd ddd   where the number of digits after the decimal point  character is equal to the precision specification  If the precision is missing  it is  taken as 6  if the precision is explicitly zero  no decimal point character appears   If a decimal point appears  at least one digit appears before it        gG The double argument is converted in style    or e  or F or E for G conver   sions   The precision specifies the number of significant digits  If the precision  is missing  6 digits are given  if the precision is zero  it is treated as 1  Style e is  used if the exponent from its conversion is less than  4 or greater than or equal to  the precision  Trailing zeros are removed from the fractional part of the result  a  decimal point appears only if it is followed by at least one digit     S Similar to the s format  except the pointer is
91.  decrease the current  PWM value  shorting PD3 to GND will increase it     While PD4 is shorted to GND  one ADC conversion for channel 0  ADC input is on  PAO  will be triggered each internal clock tick  and the resulting value will be used as  the PWM value  So the brightness of the LED follows the analog input value on PCO   VAREF on the STK500 should be set to the same value as VCC     When running in serial control mode  the function of the watchdog timer can be demon   strated by typing an    r     This will make the demo application run in a tight loop without  retriggering the watchdog so after some seconds  the watchdog will reset the MCU   This situation can be figured out on startup by reading the MCUCSR register     The current value of the PWM is backed up in an EEPROM cell after about 3 seconds  of idle time after the last change  If that EEPROM cell contains a reasonable  i  e   non erased  value at startup  it is taken as the initial value for the PWM  This virtually  preserves the last value across power cycles  By not updating the EEPROM immme   diately but only after a timeout  EEPROM wear is reduced considerably compared to  immediately writing the value at each change     6 35 3    code walkthrough    This section explains the ideas behind individual parts of the code  The source code  has been divided into numbered parts  and the following subsections explain each of  these parts        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35
92.  directory without having them clobber each other  If you  don t know how to do this  you probably shouldn t be making releases or cutting  branches     2 1 Creating a cvs branch The following steps should be taken to cut a  ch in cvs     Check out a fresh source tree from cvs HEAD     Update the NEWS file with pending release number and commit to cvs HEAD     Change  Changes since avr libc  lt last_release gt    to  Changes in avr libc     this relelase           Set the branch point tag  setting  lt major gt  and  lt minor gt  accordingly     cvs tag avr libe    major      minor  branchpoint      Create the branch    cvs tag  b avr libe    major      minor   branch       Update the package version in configure ac and commit configure ac to cvs  HEAD     Change minor number to next odd value       Update the NEWS file and commit to cvs HEAD   Add  Changes since avr libc  lt this_release gt         Check out a new tree for the branch             CO  r avr libe    major      minor    branch       Update the package version in configure ac and commit configure ac to cvs  branch     Change the patch number to 90 to denote that this now a branch leading up to a  release  Be sure to leave the  lt date gt  part of the version       Bring the build system up to date by running bootstrap and configure     Perform a  make distcheck  and make sure it succeeds  This will create the  snapshot source tarball  This should be considered the first release candidate     Upload the snapshot ta
93.  executed when      ISR  fires with no accompanying ISR handler  This may be used along with the ISR   macro  to create a catch all for undefined but used ISRs for debugging purposes     6 14 2 2  define cli       include  lt avr interrupt h gt     Disables all interrupts by clearing the global interrupt mask  This function actually  compiles into a single line of assembly  so there is no function call overhead     6 14 2 3  define EMPTY_INTERRUPT vector      include  lt avr interrupt h gt     Defines an empty interrupt handler function  This will not generate any prolog or  epilog code and will only return from the ISR  Do not define a function body as this  will define it for you  Example     EMPTY_INTERRUPT  ADC_vect       6 14 2 4  define ISR vector  attributes      include  lt avr interrupt h gt     Introduces an interrupt handler function  interrupt service routine  that runs with global  interrupts initially disabled by default with no attributes specified     The attributes are optional and alter the behaviour and resultant generated code of the  interrupt routine  Multiple attributes may be used for a single function  with a space  seperating each attribute     Valid attributes are ISR BLOCK  ISR_NOBLOCK  ISR NAKED and ISR    ALIASOF vect      vector must be one of the interrupt vector names that are valid for the particular  MCU type        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 122       6 14 2 5  d
94.  expected to point to a program   memory  ROM  string instead of a RAM string     In no case does a non existent or small field width cause truncation of a numeric field   if the result of a conversion is wider than the field width  the field is expanded to contain  the conversion result     Since the full implementation of all the mentioned features becomes fairly large  three  different flavours of vfprintf   can be selected using linker options  The default vf   printf   implements all the mentioned functionality except floating point conversions   A minimized version of vfprintf   is available that only implements the very basic in   teger and string conversion facilities  but only the   additional option can be specified  using conversion flags  these flags are parsed correctly from the format specification   but then simply ignored   This version can be requested using the following compiler  options      Wl  u vfprintf  lprintf min    If the full functionality including the floating point conversions is required  the follow   ing options should be used        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 67        Wl  u vfprintf  lprintf_flt  lm    Limitations     e The specified width and precision can be at most 255     Notes     e For floating point conversions  if you link default or minimized version of  vfprintf    the symbol   will be output and double argument will be skiped   So you output below wil
95.  fopen    but since this would have required to parse a string  and to take all  the information needed either out of this string  or out of an additional table that  would need to be provided by the application  this approach was not taken     Note 2     This basically follows the Unix approach  if a device such as a terminal needs  special handling  it is in the domain of the terminal device driver to provide this  functionality  Thus  a simple function suitable as put    for fdevopen    that  talks to a UART interface might look like this        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 55       int  uart_putchar char c  FILE xstream          if  c      n     uart_putchar     r       loop_until_bit_is_set  UCSRA  UDRE    UDR        return 0     Note 3     This implementation has been chosen because the cost of maintaining an alias  is considerably smaller than the cost of maintaining full copies of each stream   Yet  providing an implementation that offers the complete set of standard  streams was deemed to be useful  Not only that writing printf    instead of  fprintf  mystream       saves typing work  but since avr gcc needs to re   sort to pass all arguments of variadic functions on the stack  as opposed to passing  them in registers for functions that take a fixed number of parameters   the ability  to pass one parameter less by implying st din will also save some execution time     Defines     define FI
96.  for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 340       CFLAGS  D_ USF_MINGW_ACCESS N     Sarchivedir configure N    prefix  installdir N    target avr N    disable nls N    enable doc N    datadir  installdir doc binutils N    with gmp  usr local N    with mpfr  usr local N  2 gt  amp 1   tee binutils configure log      Make    make all html install install html 2 gt  amp 1   tee binutils make log        Manually change documentation location                    Open source code pacakge        patch    necessary       Configure and build in a directory outside of the source code tree       Set PATH  in order        lt MikTex executables gt       usr local bin       usr bin      bin      mingw bin      c  cygwin bin      lt install directory gt  bin    Configure    CFLAGS  D_ USF_MINGW_ACCESS N      gcc Sversion configure N    prefix  installdir N    target  target N        enable languages c c        with dwarf2 N    enable win32 registry WinAVR  release      disable nls N    with gmp  usr local N    with mpfr  usr local N    enable doc N    disable libssp N  2 gt  amp 1   tee Spackage configure log      Make    make all html install 2 gt  amp 1   tee  package make log       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 341           Manually copy the HTML documentation from the source code tree to the  installation tree        avr libc        Open source code package       Config
97.  for avr libc by Doxygen    9 9    Frequently Asked Questions 306       11   12   13   14   15   16   17   18     19   20     21   22   23   24   25   26   27     I get  undefined reference to     for functions like  sin     How to permanently bind a variable to a register    How to modify MCUCR or WDTCR early    What is all this  BV   stuff about    Can I use C   on the AVR    Shouldn t I initialize all my variables    Why do some 16 bit timer registers sometimes get trashed     How do I use a define d constant in an asm statement       Why does the PC randomly jump around when single stepping through my pro     gram in avr gdb    How do I trace an assembler file in avr gdb    How do I pass an IO port as a parameter to a function   What registers are used by the C compiler    How do I put an array of strings completely in ROM   How to use external RAM    Which  O flag to use    How do I relocate code to a fixed address     My UART is generating nonsense  My ATmega128 keeps crashing  Port F is  completely broken     Why do all my  foo   bar  strings eat up the SRAM     Why does the compiler compile an 8 bit operation that uses bitwise operators  into a 16 bit operation in assembly     How to detect RAM memory and variable overlap problems   Is it really impossible to program the ATtinyXX in C    What is this  clock skew detected  messsage    Why are  many  interrupt flags cleared by writing a logical 1   Why have  programmed  fuses the bit value 0    Which AVR specific assemb
98.  for your application     See the GNU Make User Manual for more information     9 1 7 AVRDUDE    After creating your software  you ll want to program your device  You can do this by  using the program AVRDUDE which can interface with various hardware devices to  program your processor     AVRDUDE is a very flexible package  All the information about AVR processors  and various hardware programmers is stored in a text database  This database can be  modified by any user to add new hardware or to add an AVR processor if it is not  already listed     9 1 8 GDB Insight   DDD    The GNU Debugger  GDB  is a command line debugger that can be used with the rest  of the AVR toolchain  Insight is        plus a GUI written in TcI Tk  Both        and       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 1 Toolchain Overview 265       Insight are configured for the AVR and the main executables are prefixed with the target  name  avr gdb  and avr insight  There is also a  text mode  GUI for GDB  avr gdbtui   DDD  Data Display Debugger  is another popular GUI front end to GDB  available on  Unix and Linux systems     9 1 9 AVaRICE                   is a back end program to AVR GDB and interfaces to the Atmel JTAG In   Circuit Emulator  ICE   to provide emulation capabilities     9 1 10 SimulAVR    SimulAVR is an AVR simulator used as a back end with AVR GDB  Unfortunately   this project is currently unmaintained and could use some help     9 1 11 Utilities    There are al
99.  from the controller  needs to be handled as two nibble IOs  The functions hd44780_outnibble    and  hd44780_innibble    implement this  They do not belong to the public interface   so they are declared static     Building upon these  the public functions hd44780_outbyte   and hd44780_   inbyte    transfer one byte to from the controller     The function hd44780  wait ready   waits for the controller to become ready   by continuously polling the controller s status  which is read by performing a byte read  with the RS signal cleard   and examining the BUSY flag within the status byte  This  function needs to be called before performing any controller IO     Finally  hd44780  init    initializes the LCD controller into 4 bit mode  based on  the initialization sequence mandated by the datasheet  As the BUSY flag cannot be  examined yet at this point  this is the only part of this code where timed delays are  used  While the controller can perform a power on reset when certain constraints on       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 336 Using the standard IO facilities 205       the power supply rise time are met  always calling the software initialization routine  at startup ensures the controller will be in a known state  This function also puts the  interface into 4 bit mode  which would not be done automatically after a power on  reset      6 36 3 5 Icd h This function declares the public interface of the higher level  char   acter IO  LCD driv
100.  h gt   avr libc version macros    6 21 1 Detailed Description     include  lt avr version h gt     This header file defines macros that contain version numbers and strings describing the  current version of avr libc     The version number itself basically consists of three pieces that are separated by a  dot  the major number  the minor number  and the revision number  For development  versions  which use an odd minor number   the string representation additionally gets  the date code  YY YYMMDD  appended     This file will also be included by  lt avr io h gt   That way  portable tests can be  implemented using  lt avr io h gt  that can be used in code that wants to remain  backwards compatible to library versions prior to the date when the library version  API had been added  as referenced but undefined C preprocessor macros automatically  evaluate to 0        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    621  lt avr version h gt   avr libc version macros 148       Defines     define   AVR_LIBC_VERSION_STRING__   AVR_LIBC_VERSION     define __AVR_LIBC_VERSION__  AVR_LIBC_VERSION_   NUMERIC  UL    define _ AVR        DATE STRING   AVR_LIBC_RELDATE     define _ AVR        DATE   AVR LIBC RELDATEQGUL    define _ AVR        MAJOR   AVR LIBC MAJORG    define _ AVR LIBC MINOR  AVR_LIBC_MINOR                 AVR LIBC REVISION QAVR_LIBC_REVISION                        6 21 2 Define Documentation    6 21 21  define AVR          DATE  AVR          RELDATEGUL       
101.  in the correct section     Now that your data resides in the Program Space  your code to access  read  the data  will no longer work  The code that gets generated will retrieve the data that is located  at the address of the mydata array  plus offsets indexed by the i and j variables   However  the final address that is calculated where to the retrieve the data points to  the Data Space  Not the Program Space where the data is actually located  It is likely  that you will be retrieving some garbage  The problem is that AVR GCC does not  intrinsically know that the data resides in the Program Space     The solution is fairly simple  The  rule of thumb  for accessing data stored in the  Program Space is to access the data as you normally would  as if the variable is stored  in Data Space   like so        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 4 Data in Program Space 278       byte   mydata i   3    then take the address of the data   byte    amp  mydata i  j       then use the appropriate pgm read    macro  and the address of your data becomes  the parameter to that macro     byte   pgm read byte  amp  mydata i  j1       The        read    macros take an address that points to the Program Space  and re   trieves the data that is stored at that address  This is why you take the address of the  offset into the array  This address becomes the parameter to the macro so it can gen   erate the correct code to retrieve the data from the Program Space  Ther
102.  is a  long int  rather than int  The h is ignored   as short int  isequivalent to int       A character that specifies the type of conversion to be applied     The conversion specifiers and their meanings are       diouxX The int  or appropriate variant  argument is converted to signed decimal   d and 1   unsigned octal       unsigned decimal  u   or unsigned hexadecimal   x and X  notation  The letters  abcdef  are used for x conversions  the letters   ABCDEF  are used for X conversions  The precision  if any  gives the minimum  number of digits that must appear  if the converted value requires fewer digits  it  is padded on the left with zeros     e p The void xargumentis taken as an unsigned integer  and converted similarly  as a   x command would do        c The int argument is converted to an  unsigned char  and the resulting  character is written       s The  char x  argument is expected to be a pointer to an array of character  type  pointer to a string   Characters from the array are written up to  but not  including  a terminating NUL character  if a precision is specified  no more than       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 66       the number specified are written  If a precision is given  no null character need  be present  if the precision is not specified  or is greater than the size of the array   the array must contain a terminating NUL character          A   is written  No argument is
103.  label before  since it then takes this label as the name of a new function that  appears to have been entered  Thus  the best practice to avoid this confusion is to only  use non local labels when declaring a new function  and restrict anything else to local  labels  Local labels consist just of a number only  References to these labels consist  of the number  followed by the letter b for a backward reference  or f for a forward  reference  These local labels may be re used within the source file  references will pick  the closest label with the same number and given direction     Example     myfunc  push  push  push  push  push    t lt   lt  H hH n          eor  idi  idi  rjmp    6  r16   start loop   L  lo8 sometable    H  hi8  sometable    f   jump to loop test at end  7  Y    loop continues here             H No Ho HH    breq 1f   return from myfunc prematurely           r16  2  cmp  brlo 1b   jump back to top of loop    H                         Lr pop  pop  pop  pop  pop  ret       HH H  lt   lt           Back to FAQ Index     9 9 13 How do I pass an IO port as a parameter to a function     Consider this example code        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 315        include  lt inttypes h gt    include  lt avr io h gt     void  set_bits_func_wrong  volatile uint8_t port  uint8_t mask       port    mask          void  set bits func correct  volatile uint8_t xport  uint8 t mask       xport    mask         de
104.  names like PORTA directly  in C expressions  also on the left side of assignment operators  and GCC will do the  right thing  use short I O instructions if possible   The     SFR  OFFSET definition is  not used in any way in this case        Define SFR    5   COMPAT as 1 to make these names work as simple constants  ad   dresses of the I O registers   This is necessary when included in preprocessed assem   bler    S  source files  so it is done automatically if  ASSEMBLER is defined  By  default  all addresses are defined as if they were memory addresses  used in 1ds st s  instructions   To use these addresses in in out instructions  you must subtract 0x20  from them                 For more backwards compatibility  insert the following at the start of your old assem   bler source file      define _ SFR OFFSET 0    This automatically subtracts 0x20 from I O space addresses  but it s a hack  so it is  recommended to change your source  wrap such addresses in macros defined here  as  shown below  After this is done  the___SFR_OFF SET definition is no longer necessary  and can be removed        Real example   this code could be used in a boot loader that is portable between devices  with SPMCR at different addresses      lt avr ioml63 h gt    define SPMCR _SFR_I08 0x37    lt avr iom128 h gt    define SPMCR _SFR_MEM8  0x68     dif    SFR IO REG P  SPMCR    out      SFR IO ADDR SPMCR   r24   else   sts _SFR_MEM_ADDR SPMCR   r24   endif       You can use the in out cbi sbi sbic sb
105.  new   initN sections  which one to use  etc       The advantage of this method is that you can insert any initialization code you want   just remember that this is very early startup     no stack and no zero reg yet    and no program memory space is wasted if this feature is not used        There should be no need to modify linker scripts anymore  except for some very spe   cial cases  It is best to leave     stack at its default value  end of internal SRAM      faster  and required on some devices like ATmegal61 because of errata   and add   W1l  Tdata 0x801100 to start the data section above the stack     For more information on using sections  see Memory Sections  There is also an ex   ample for Using Sections in C Code  Note that in C code  any such function would  preferrably be placed into section  init3 as the code in  init2 ensures the internal regis   ter zero reg is already cleared        Back to FAQ Index        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 309       9 9 6 What is all this BV   stuff about     When performing low level output work  which is a very central point in microcon   troller programming  it is quite common that a particular bit needs to be set or cleared  in some IO register  While the device documentation provides mnemonic names for  the various bits in the IO registers  and the AVR device specific IO definitions reflect  these names in definitions for numerical constants  a way is needed 
106.  o        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project    188            data 0x00800060 0x0  usr local lib gcc avr 4 2 2 avr4 libgcc a _clear_bss o   x   datax   x   rodata   x   rodatax        gnu linkonce dx   0x00800060   ALIGN  0x2   0x00800060 _edata    0x00800060 PROVIDE  __data_end       bss 0x00800060 0x3 load address 0x00000114  0x00800060 PROVIDE  __bss_start      x   bss    bss 0x00800060 0  3 demo o   bss 0x00800063 0  0  home joerg src avr libc avr lib avr4 atmega8 crtm8 o   bss 0x00800063 0  0  home joerg src avr libc avr lib avr4 exit o   bss 0x00800063 0x0  usr local lib gcc avr 4 2 2 avr4 libgcc a _exit o    bss 0x00800063 0  0  usr local lib gcc avr 4 2 2 avr4 libgcc a _copy_data o    bss 0x00800063 0  0  usr local lib gcc avr 4 2 2 avr4 libgcc a _clear_bss o   x   bssx      COMMON   0x00800063 PROVIDE  __bss_end      0x00000114 _ data_load_start   LOADADDR   data   0x00000114 data_load_end    __data_load_start   SIZEOF   data     noinit 0x00800063 0x0  0x00800063 PROVIDE  __noinit_start         noinit    0x00800063 PROVIDE  __noinit_end      0x00800063 _end    0x00800063 PROVIDE  __heap_start       eeprom 0x00810000 0  0                        0  00810000   eeprom end      The last address in the  text segment is location 0x114   denoted by _et ext    so the  instructions use up 276 bytes of FLASH     The  data segment  where initialized static variables are stored  starts at location 0x 60   which is the first ad
107.  object  is referenced by ptr     Returns the number of objects successfully written  i  e  nmemb unless an output error  occured     6 9 3 18 char gets  char x str     Similar to fgets   except that it will operate on stream st din  and the trailing newline   if any  will not be stored in the string  It is the caller   s responsibility to provide enough  storage to hold the characters read     6 9 3 19 int printf  const char    fmt             Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 63       The function printf performs formatted output to stream stderr  See  vfprintf    for details     6 9 3 20 int printf_P  const char   fmt          Variant of print       that uses a fmt string that resides in program memory     6 9 3 21 int puts  const char     s  r     Write the string pointed to by str  and a trailing newline character  to stdout     6 9 3 22 int puts P  const char    __str     Variant of puts   where st r resides in program memory     6 9 3 23 int scanf  const char     fmt       The function scanf performs formatted input from stream st din     See vfscanf   for details     6 9 3 24 int scanf_P  const char    fmt          Variant of scanf   where   mt resides in program memory     6 9 3 25 int snprintf  char x  s size t  n constchar   fmt         Like sprintf     but instead of assuming s to be of infinite size  no more than n  characters  including the trailing NUL character  will be converted to s  
108.  of the  Global Interrupt Status flag when execution of the block completes     6 23 2 4  define NONATOMIC_BLOCK type     Creates a block of code that is executed non atomically  Upon entering the block the  Global Interrupt Status flag in SREG is enabled  and disabled upon exiting the block  from any exit path  This is useful when nested inside ATOMIC_BLOCK sections  al   lowing for non atomic execution of small blocks of code while maintaining the atomic  access of the other sections of the parent ATOMIC_BLOCK     Two possible macro parameters are permitted  NONATOMIC_RESTORESTATE and  NONATOMIC_FORCEOFF     6 23 2 5 ftdefine NONATOMIC_FORCEOFF    This is a possible parameter for NONATOMIC_BLOCK  When used  it will cause the  NONATOMIC_BLOCK to force the state of the SREG register on exit  disabling the  Global Interrupt Status flag bit  This saves on flash space as the previous value of the  SREG register does not need to be saved at the start of the block     Care should be taken that NONATOMIC_FORCEOFF is only used when it is known  that interrupts are disabled before the block   s execution or when the side effects of  disabling global interrupts at the block   s completion are known and understood     6 23 2 6  define NONATOMIC RESTORESTATE    This is a possible parameter for NONATOMIC_BLOCK  When used  it will cause  the NONATOMIC_BLOCK to restore the previous state of the SREG register  saved  before the Global Interrupt Status flag bit was enabled  The net effect of
109.  of the STK500    The LCD controller is used in 4 bit mode  including polling the  busy  flag so the  R    W line from the LCD controller needs to be connected  Note that the LCD con   troller has yet another supply pin that is used to adjust the LCD   s contrast  V5            ically  that pin connects to a potentiometer between Vcc and GND  Often  it might  work to just connect that pin to GND  while leaving it unconnected usually yields an  unreadable display     Port A has been chosen as 7 pins on    single port are needed to connect the LCD  yet all  other ports are already partially in use  port B has the pins for in system programming   ISP   port C has the ports for JTAG  can be used for debugging   and port D is used  for the UART connection     6 36 2 Functional overview    The project consists of the following files       stdiodemo c This is the main example file      defines h Contains some global defines  like the LCD wiring    hd44780 c Implementation of an HD44780 LCD display driver  e hd44780 h Interface declarations for the HD44780 driver      1cd c Implementation of LCD character IO on top of the HD44780 driver          1cd h Interface declarations for the LCD driver       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 336 Using the standard IO facilities 202          uart c Implementation of a character IO driver for the internal UART      uart h Interface declarations for the UART driver    6 36 3 A code walkthrough    6 36 3 1 stdiodem
110.  on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 88 wdt h File Reference 260       8 88 wdt h File Reference  8 88 1 Detailed Description    Defines     define wdt reset   asm volatile       wdr     define WD PS3 MASK 0x00    define WD CONTROL REG WDTCR   define WD CHANGE BIT WDCE    define wdt write value     define wdt_disable      define wdt_enable timeout  _wdt_write timeout    define WDTO_15MS 0    define WDTO_30MS 1    define WDTO_60MS 2    define WDTO_120MS 3    define WDTO_250MS 4    define WDTO_500MS 5    define WDTO 1S 6    define WDTO_2S 7    define WDTO 4S 8    define WDTO_8S 9       8 88 2 Define Documentation    8 88 2 1  define _wdt_write value        Value   __asm__ __volatile__   N   in tmp_reg__ __SREG__    n t     tali  mynyt                n t      out  0 81    n t  N   out SREG   tmp reg      n t  N        out  0  2          no outputs    N             I   _SFR_IO_ADDR _WD_CONTROL_REG         r    BV  WD CHANGE BIT    _BV WDE    N    r    uint8 t    value  amp  0x08   WD PS3            0x00       _BV  WDE     value  amp  0x07         SU pM X       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 avr libc Page Documentation 261       9 avr libc Page Documentation    91 Toolchain Overview  9 1 1 Introduction    Welcome to the open source software development toolset for the Atmel AVR     There is not a single tool that provides everything needed to develop software for the  AVR  It takes many tools working together  Collectively  
111.  over the  RS 232 connection to a terminal  e g  from to a PC running a terminal program   while       1cd_str stream provides a method to display character data on the LCD text  display     The function delay_1s    suspends program execution for approximately one sec   ond  This is done using the delay ms   function from  lt util delay h gt   which in turn needs the F_CPU macro in order to adjust the cycle counts  As the  _delay_ms    function has a limited range of allowable argument values  depending  on F_CPU   a value of 10 ms has been chosen as the base delay which would be safe  for CPU frequencies of up to about 26 MHz  This function is then called 100 times to  accomodate for the actual one second delay     In a practical application  long delays like this one were better be handled by a hardware  timer  so the main CPU would be free for other tasks while waiting  or could be put on  sleep     At the beginning of main     after initializing the peripheral devices  the default stdio  streams stdin  stdout  and stderr are set up by using the existing static FILE  stream objects  While this is not mandatory  the availability of stdin and stdout  allows to use the shorthand functions  e g  printf    instead of fprintf      and    stderr can mnemonically be referred to when sending out diagnostic messages           Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 336 Using the standard IO facilities 203       Just for demonstration purposes  stdin and st
112.  path   with the path to the         h file on your system  Replace   1ib    path   with the path to 1ibbfd a on your system       5 CPPFLAGS  I  hdr path   LDFLAGS  L  lib path      configure   prefix  PREFIX    9 10 11 Building and Installing under Windows    Building and installing the toolchain under Windows requires more effort because all  of the tools required for building  and the programs themselves  are mainly designed  for running under a POSIX environment such as Unix and Linux  Windows does not  natively provide such an environment     There are two projects available that provide such an environment  Cygwin and  MinGW MSYS  There are advantages and disadvantages to both  Cygwin provides  a very complete POSIX environment that allows one to build many Linux based tools  from source with very little or no source modifications  However  POSIX functionality  is provided in the form of a DLL that is linked to the application  This DLL has to  be redistributed with your application and there are issues if the Cygwin DLL already  exists on the installation system and different versions of the DLL  On the other hand   MinGW MSYS can compile code as native Win32 applications  However  this means       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 336       that programs designed for Unix and Linux  i e  that use POSIX functionality  will not  compile as MinGW MSYS does not provide that POSIX layer for you
113.  pwm so others  can use it in calculations  In order to allow for a simple calculation of a percentage  value without requiring floating point mathematics  the maximal value of the PWM is  restricted to 1000 rather than 1023  so a simple division by 10 can be used  Due to the  nature of the human eye  the difference in LED brightness between 1000 and 1023 is  not noticable anyway        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project 199       6 35 3 5 Part 5  main   At the start of main     a variable mode is declared to  keep the current mode of operation       enumeration is used to improve the readability   By default  the compiler would allocate a variable of type int for an enumeration  The  packed attribute declarator instructs the compiler to use the smallest possible integer  type  which would be an 8 bit type here      After some initialization actions  the application   s main loop follows  In an embedded  application  this is normally an infinite loop as there is nothing an application could   exit  into anyway     At the beginning of the loop  the watchdog timer will be retriggered  If that timer is  not triggered for about 2 seconds  it will issue a hardware reset  Care needs to be taken  that no code path blocks longer than this  or it needs to frequently perform watchdog  resets of its own  An example of such a code path would be the string IO functions  for  an overly large string to print  about 2000 charac
114.  respectively  to be less than  to  match  or be greater than s2  A consequence of the ordering used by strncasecmp    is that if s1 is an initial substring of s2  then s1 is considered to be  less than   52     6 11 3 25 char x strncat  char    dest  const char    src  size_t len   Concatenate two strings     The strncat   function is similar to strcat    except that only the first n characters of src  are appended to dest     Returns     The strncat   function returns a pointer to the resulting string dest     6 11 3 26 int strncmp  const char   s1  const char    s2  size_t len    Compare two strings    The strncmp   function is similar to stremp    except it only compares the first  at most   n characters of sl and s2    Returns            strncmp   function returns an integer less than  equal to  or greater than zero  if sl  or the first n bytes thereof  is found  respectively  to be less than  to match   or be greater than s2     6 11 3 27 char    strncpy  char    dest  const char    src  size_t len   Copy a string     The strncpy   function is similar to strcpy    except that not more than n bytes of src  are copied  Thus  if there is no null byte among the first n bytes of src  the result will  not be null terminated     In the case where the length of src is less than that of n  the remainder of dest will be  padded with nulls   Returns     The strncpy   function returns a pointer to the destination string dest        Generated on Mon Oct 29 20 02 34 2007 for avr libc
115.  returns a pointer to dest     6 11 3 8 void    memmem  const void  gt  s7  size t len   const void    s2  size t len2     The memmem   function finds the start of the first occurrence of the substring s2 of  length 1en2 in the memory area s1 of length 1en1   Returns            memmem   function returns a pointer to the beginning of the substring  or  NULL if the substring is not found  If 1en2 is zero  the function returns s1        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 86       6 11 3 9 void x memmove  void   dest  const void    src  size t len    Copy memory area           memmove   function copies len bytes from memory area src to memory area dest   The memory areas may overlap    Returns     The memmove   function returns a pointer to dest     6 11 3 10 void    memrchr  const void    src  int val  size t len           memrchr   function is like the memchr   function  except that it searches back   wards from the end of the 1en bytes pointed to by src instead of forwards from the  front   Glibc  GNU extension      Returns     The memrchr   function returns a pointer to the matching byte or NULL if the  character does not occur in the given memory area     6 11 3 11 void x memset  void x dest  int val  size t len    Fill memory with a constant byte    The memset   function fills the first len bytes of the memory area pointed to by dest  with the constant byte val    Returns     The memset   function returns a pointe
116.  selection of the proper contraint depends on the range of the constants or registers   which must be acceptable to the AVR instruction they are used with  The C compiler  doesn t check any line of your assembler code  But it is able to check the constraint  against your C expression  However  if you specify the wrong constraints  then the  compiler may silently pass wrong code to the assembler  And  of course  the assembler  will fail with some cryptic output or internal errors  For example  if you specify the  constraint   r  and you are using this register with an  ori  instruction in your as   sembler code  then the compiler may select any register  This will fail  if the compiler  chooses r2 to r15   It will never choose r0 or r1  because these are uses for special  purposes   That s why the correct constraint in that case is  d   On the other hand  if  you use the constraint  M   the compiler will make sure that you don t pass anything  else but an 8 bit value  Later on we will see how to pass multibyte expression results       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook    291       to the assembler code     The following table shows all AVR assembler mnemonics which require operands  and  the related contraints  Because of the improper constraint definitions in version 3 3   they aren t strict enough  There is  for example  no constraint  which restricts integer    constants to the range 0 to 7 for bit set and bit cle
117.  set aside completely for use by these routines  so the  compiler would not use them for C code  This is arranged for in project h     The file is divided into one section that will be used by the assembly source code  and  another one to be used by C code  The assembly part is distinguished by the prepro   cessing macro __ASSEMBLER__  which will be automatically set by the compiler                   Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 33 Combining C and assembly source files 176       front end when preprocessing an assembly language file   and it contains Just macros  that give symbolic names to a number of CPU registers  The preprocessor will then  replace the symbolic names by their right hand side definitions before calling the as   sembler     In C code  the compiler needs to see variable declarations for these objects  This is  done by using declarations that bind a variable permanently to a CPU register  see  How to permanently bind a variable to a register    Even in case the C code never  has a need to access these variables  declaring the register binding that way causes the  compiler to not use these registers in C code at all     The flags variable needs to be in the range of r16 through r31 as it is the target of a  load immediate  or SER  instruction that is not applicable to the entire register file        6 33 2 3 isrs S This file is a preprocessed assembly source file  The C preprocessor  will be run by the compiler front end f
118.  that are guaranteed to be excuted  Atomically or Non Atmomically  The term  Atomic  in this context refers to the un   ability of the respective code to be interrupted     These macros operate via automatic manipulation of the Global Interrupt Status  T  bit  of the SREG register  Exit paths from both block types are all managed automatically       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 23  lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 153       without the need for special considerations  1      the interrupt status will be restored to  the same value it has been when entering the respective block     A typical example that requires atomic access is    16  or more  bit variable that is  shared between the main execution path and an ISR  While declaring such a variable  as volatile ensures that the compiler will not optimize accesses to it away  it does not  guarantee atomic access to it  Assuming the following example      include  lt inttypes h gt    include  lt avr interrupt h gt    include  lt avr io h gt     volatile uint16_t ctr       5                OVF               Gtr            int  main  void          ctr   0x200    start timer      while  ctr    0      wait         There is a chance where the main context will exit its wait loop when the variable ct r  just reached the value OxFF  This happens because the compiler cannot natively access  a 16 bit variable atomically in an 8 bit CPU  So the variable is for exam
119.  the 1 second  flash LED had to be moved from PD6 to PD4   PD4 is used as the ADC control button  on the other MCU types  but that is not needed here            is located at PB3 on this  device        The        TARGET macro in the Makefile needs to be adjusted appropriately for the  alternative controller types        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project 196       The flash ROM and RAM consumption of this demo are way below the resources  of even an ATmega48  and still well within the capabilities of      ATtiny2313  The  major advantage of experimenting with the ATmega16  in addition that it ships together  with an STK500 anyway  is that it can be debugged online via JTAG  Likewise  the  ATmega48 88 168 and ATtiny2313 devices can be debugged through debugWire  using  the Atmel JTAG ICE mkII or the low cost AVR Dragon     Note that in the explanation below  all port pin names are applicable to the ATmegal6  setup     6 35 2 Functional overview    PD6 will be toggled with each internal clock tick  approx  10 ms   PD7 will flash once  per second     PDO and        are configured as UART IO  and        be used to connect the demo kit to  a PC  9600 Bd  8N1 frame format   The demo application talks to the serial port  and  it can be controlled from the serial port     PD2 through PD4 are configured as inputs  and control the application unless control  has been taken over by the serial port  Shorting PD2 to GND will
120.  the AVR tools in the same directory  or some of the tools will not work correctly  To ensure consistency and simplify the  discussion  we will use SPREF IX to refer to whatever directory you wish to install in   You can set this as an environment variable if you wish as such  using a Bourne like  shell            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 330         PREFIX  HOME local avr    export PREFIX    Note     Be sure that you have your PATH environment variable set to search the direc   tory you install everything in before you start installing anything  For example  if  you use  prefix  PREFIX  you must have  PREFIX bin in your exported  PATH  As such           8 PATH  PATH  PREFIX bin  5 export PATH    Warning   If you have CC set to anything other than avr gcc in your environment  this will  cause the configure script to fail  It is best to not have CC set at all    Note     It is usually the best to use the latest released version of each of the tools     9 10 2 Required Tools      GNU Binutils  http   sources redhat com binutils     Installation               http   gcc gnu org     Installation      AVR Libc  http   savannah gnu org projects avr libc     Installation    9 10 3 Optional Tools    You can develop programs for AVR devices without the following tools  They may or  may not be of use for you        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and In
121.  the contents of the  hex file  specified on the command line  In this example  the file main   hex is burned into the  flash memory       avrdude  p 2313  e  m flash  i main hex    avrdude  AVR device initialized and ready to accept instructions       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 12 Using the avrdude program 356       avrdude  Device signature   0  1  9101    avrdude  erasing chip   avrdude  done    avrdude  reading input file  main hex    avrdude  input file main hex auto detected as Intel Hex    avrdude  writing flash    1749 0  00   avrdude  1750 bytes of flash written   avrdude  verifying flash memory against main hex   avrdude  reading on chip flash data    1749 0  00   avrdude  verifying   avrdude  1750 bytes of flash verified       avrdude done  Thank you     The     2313 option lets avrdude know that we are operating on      419052313  chip  This option specifies the device id and is matched up with the device of the same  id in avrdude s configuration file    usr local etc avrdude conf    To list  valid parts  specify the    v option             option instructs avrdude to perform a  chip erase before programming  this is almost always necessary before programming  the flash  The  m flash option indicates that we want to upload data into the flash  memory  while  i main hex specifies the name of the input file     The EEPROM is uploaded in the same way  the only difference is that you would use   m eeprom instead of  m flash    
122.  the documentation  of vfprintf   for a detailed description  The same applies to vfscanf   and the scanf  family of functions     Outline of the chosen API        standard streams stdin  stdout  and stderr are  provided  but contrary to the C standard  since avr libc has no knowledge about appli   cable devices  these streams are not already pre initialized at application startup  Also        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 53       since there is no notion of  file  whatsoever to avr libc  there is no function fopen     that could be used to associate a stream to some device   See note 1   Instead  the  function fdevopen    is provided to associate a stream to a device  where the device  needs to provide a function to send a character  to receive a character  or both  There  is no differentiation between  text  and  binary  streams inside avr libc  Character  n  is sent literally down to the device s put    function  If the device requires a carriage  return  N r  character to be sent before the linefeed  its put    routine must implement  this  see note 2      As an alternative method to fdevopen    the macro fdev_setup_stream   might be used  to setup a user supplied FILE structure     It should be noted that the automatic conversion of a newline character into a carriage  return   newline sequence breaks binary transfers  If binary transfers are desired  no  automatic conversion should be perfor
123.  the end of SRAM is what is available for stack   If your  application uses malloc    which e  g  also can happen inside printf    the heap for  dynamic memory is also located there  See Memory Areas and Using malloc        The amount of stack required for your application cannot be determined that easily   For example  if you recursively call a function and forget to break that recursion  the  amount of stack required is infinite      You can look at the generated assembler code   avr gcc      5   there s a comment in each generated assembler file that tells  you the frame size for each generated function  That s the amount of stack required for  this function  you have to add up that for all functions where you know that the calls  could be nested     Back to FAQ Index     9 9 23 Is it really impossible to program the ATtinyXX in C     While some small           are not directly supported by the C compiler since they do not  have a RAM based stack  and some do not even have RAM at all   itis possible anyway  to use the general purpose registers as a RAM replacement since they are mapped into  the data memory region     Bruce D  Lightner wrote an excellent description of how to do this  and offers this  together with a toolkit on his web page        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 325       http   lightner net avr ATtinyAvrGcc html    Back to FAQ Index     9 9 24 What is this  clock skew detected  messsage     I
124.  this is to make  the NONATOMIC BLOCK s contents guaranteed non atomic  without changing the  state of the Global Interrupt Status flag when execution of the block completes        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 24  lt util crc16 h gt   CRC Computations 156       6 24  lt util crc16 h gt   CRC Computations    6 241 Detailed Description     include   util crcl6 h      This header file provides a optimized inline functions for calculating cyclic redundancy  checks  CRC  using common polynomials     References     See the Dallas Semiconductor app note 27 for 8051 assembler example and general  CRC optimization suggestions  The table on the last page of the app note is the key to  understanding these implementations     Jack Crenshaw   s  Implementing CRCs  article in the January 1992 isue of Embedded  Systems Programming  This may be difficult to find  but it explains CRC   s in very clear  and concise terms  Well worth the effort to obtain a copy     A typical application would look like        Dallas iButton test vector   uint8_t serno       0x02  Oxlc  Oxb8  0  01  0  0  0  Oxa2       int    checkcrc  void          uint8_t cre   0  i   for  i   0  i  lt  sizeof serno   sizeof serno 0   i     crc   _crc_ibutton_update crc  serno i       return crc     must be 0    Functions    e static _ inline __uint16_t _crc16_update  uint16 t     crc  uint8_t _ data    e static inline     uintl6 t  crc xmodem update  uint16 t  crc uint8 t     data   e sta
125.  timeout  _wdt_write timeout    define WDTO_15MS 0    define WDTO_30MS 1    define WDTO_60MS 2    define WDTO_120MS 3    define WDTO_250MS 4    define WDTO_500MS 5    define WDTO 1S 6    define WDTO_2S 7    define WDTO 4S 8    define WDTO_8S 9       6 22 2 Define Documentation    6 22 21  define wdt_disable      Value       asm__ __volatile__  N   in tmp_reg__               n t     X   ala    n t      out  0   1    n t  N                 uut  0      zero reg        n t    X    out SREG   tmp reg      n t           no outputs           I    SFR IO ADDR   WD CONTROL REG          r    uint8 t          WD CHANGE           BV WDE          x CX    Disable the watchdog timer  if possible  This attempts to turn off the Enable bit in the  watchdog control register  See the datasheet for details     6 22 2 2  define wdt enable timeout  wdt write timeout     Enable the watchdog timer  configuring it for expiry after timeout  which is a com   bination of the WDPO through WDP2 bits to write into the WDTCR register  For those  devices that have a WDTCSR register  it uses the combination of the WDPO through  WDP3 bits      See also the symbolic constants WDTO  15MS et al        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 22  lt avr wdt h gt   Watchdog timer handling 151       6 22 2 3  define wdt_reset   asm volatile   wdr         Reset the watchdog timer  When the watchdog timer is enabled  a call to this instruction  is required before the timer expires  otherwise a
126.  to access   and use the address as a parameter to pgm_read_word  We use the pgm_read_   word macro to read the string pointer out of the string_table array  Remember  that a pointer is 16 bits  or word size  The pgm_read_word macro will return a 16   bit unsigned integer  We then have to typecast it as a true pointer to program memory   PGM_P  This pointer is an address in Program Space pointing to the string that we  want to copy  This pointer is then used as a parameter to the function st rcpy_P  The  function strcpy_P is just like the regular st rcpy function  except that it copies a  string from Program Space  the second parameter  to a buffer in the Data Space  the  first parameter      There are many string functions available that work with strings located in Program  Space  All of these special string functions have a suffix of P in the function name   and are declared in the  lt avr pgmspace h  gt  header file     9 4 5 Caveats    The macros and functions used to retrieve data from the Program Space have to gen   erate some extra code in order to actually load the data from the Program Space  This  incurs some extra overhead in terms of code space  extra opcodes  and execution time   Usually  both the space and time overhead is minimal compared to the space savings  of putting data in Program Space  But you should be aware of this so you can mini   mize the number of calls within a single function that gets the same piece of data from  Program Space  It is always in
127.  uint32_   t  address_long     define pgm_read_dword_far address_long    ELPM dword  uint32      t  address long      define          read  byte address short         read  byte near address short    define          read  word address short         read word  near address short    define pgm read  dword address short           read dword  near address short    define PGM  P const prog char       define PGM  VOID P const prog void       Typedefs    typedef void PROGMEM prog  void  typedef char PROGMEM prog char  typedef unsigned char PROGMEM prog uchar  typedef int8 t PROGMEM prog int8 t  typedef uint8 t PROGMEM prog uint8 t  typedef int16 t PROGMEM prog int16 t  typedef uint16 t PROGMEM prog uintl6 t  typedef int32 t PROGMEM prog int32 t  typedef uint32 t PROGMEM prog uint32 t  typedef int  4 t PROGMEM prog int64 t  typedef uint64_t PROGMEM prog uint64 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33 pgmspace h File Reference    234       Functions    CONST__    int memcmp_P  const void x  PGM  VOID     size t  ATTR_PURE       void    memcpy  P  void            VOID     size_t     void    memmem_P  const void     size t  PGM  VOID     size t     PGM  VOID P memchr     PGM  VOID P s  int val  size t len  ATTR      ATTR         PURE    CONST     char    strcat  P  char     PGM  P    PGM P strchr P  PGM P s  int val  ATTR  CONST  PGM P strchrnul P  PGM P s  int val  _ ATTR_CONST   int stremp_P  const char     PGM_P  __ATTR_PURE   char   strcpy_P  cha
128.  up the  external memory interface early during the device initialization so the initialization of  these variable will take place  Refer to How to modify MCUCR or WDTCR early  for  a description how to do this using few lines of assembler code  or to the chapter about  memory sections for an example written in C     The explanation of malloc   contains a discussion about the use of internal RAM vs   external RAM in particular with respect to the various possible locations of the heap   area reserved for malloc     It also explains the linker command line options that are  required to move the memory regions away from their respective standard locations in  internal RAM     Finally  if the application simply wants to use the additional RAM for private data  storage kept outside the domain of the C compiler  e  g  through a char   variable  initialized directly to a particular address   it would be sufficient to defer the initializa   tion of the external RAM interface to the beginning of main    so no tweaking of the   init3 section is necessary  The same applies if only the heap is going to be located  there  since the application start up code does not affect the heap     It is not recommended to locate the stack in external RAM  In general  accessing exter   nal RAM is slower than internal RAM  and errata of some AVR devices even prevent  this configuration from working properly at all     Back to FAQ Index        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxyg
129.  watchdog initiated device reset will  occur     6 22 2 4  define WDTO 120MS 3    See WDTO 15MS    6 22 2 5  define WDTO 15MS 0    Symbolic constants for the watchdog timeout  Since the watchdog timer is based on  a free running RC oscillator  the times are approximate only and apply to a supply  voltage of 5 V  At lower supply voltages  the times will increase  For older devices   the times will be as large as three times when operating at Vcc   3 V  while the newer  devices  e  g  ATmegal28  ATmega8  only experience a negligible change     Possible timeout values are  15 ms  30 ms  60 ms  120 ms  250 ms  500 ms  1 s  2 s    Some devices also allow for 4 s and 8 s   Symbolic constants are formed by the prefix  WDTO_  followed by the time     Example that would select a watchdog timer expiry of approximately 500 ms            enable  WDTO_500MS       6 22 2 6  define WDTO 1S 6    See WDTO 15MS    6 22 27  define WDTO 250MS 4    See WDTO 15MS    6 22 2 8  define WDTO 287    See WDTO 15MS    6 22 2 9  define WDTO 30MS 1    See WDTO 15MS    6 22 2 10  define WDTO 45 8    See WDTO_15MS Note  This is only available on the ATtiny2313  ATtiny24  AT   tiny44  ATtiny84  ATtiny25            45  ATtiny85  ATtiny261  ATtiny461  ATtiny861        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 23  lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 152       ATmega48  ATmega88  ATmegal68  ATmega48P  ATmega88P  ATmegal68P  AT   mega328P  ATmegal64P  ATme
130. 0    define TW SR ARB LOST SLA        0x68   define TW SR  GCALL         0x70    define TW SR        LOST GCALL        0x78   define TW SR  DATA ACK 0x80    define TW SR                   0x88    define TW SR         DATA ACK 0x90  fdefine TW SR  GCALL DATA NACK 0x98   define TW SR  STOP OxAO    define        NO INFO OxF8    define TW BUS ERROR 0x00    define TW STATUS     5      define        STATUS  TWSR  amp  TW STATUS     5                      R  W bit in SLA R W address field         define TW READ 1      define TW_WRITE 0       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    629  lt util twi h gt   TWI bit mask definitions 166       6 29 2 Define Documentation    6 29 2 1  define TW BUS ERROR 0x00    illegal start or stop condition    6 29 2   define TW MR        LOST 0x38  arbitration lost in SLA R or NACK    6 29 2 3  define TW MR DATA        0x50    data received  ACK returned    6 29 2 4  define TW MR DATA NACK 0x58    data received  NACK returned    6 29 2 5 ididefine TW MR SLA  ACK 0x40  SLA R transmitted  ACK received    6 29 2 6  define TW MR SLA           0x48  SLA R transmitted  NACK received    6 29 2 7  define TW MT        LOST 0x38    arbitration lost in SLA W or data    6 29 2 8  define TW MT DATA        0x28    data transmitted  ACK received    6 29 2 9  define TW MT DATA NACK 0x30    data transmitted  NACK received    6 29 2 10  define TW MT SLA ACK 0x18  SLA W transmitted  ACK received    6 29 2 11              TW MT SLA          0x20 
131. 007 for avr libc by Doxygen    6 10     lt stdlib h gt   General utilities 72       Typedefs    typedef int    __compar_fn_t  const void     const void        Functions      inline void abort  void  _ ATTR_NORETURN_   int abs  int  i           CONST   long labs  long __i  _ ATTR_CONST    void    bsearch  const void    key  const void    base  size_t __nmemb  size_t  size  int  __compar  const void     const void        div t div  int _ num  int _ denom            divmodhid  _ ATTR    CONST__   ldiv t Idiv  long __num  long __denom  __asm__  __divmodsi4   __ATTR_   CONST__   void qsort  void    base  size_t __nmemb  size t size    compar fn t     compar    long strtol  const char     nptr  char       endptr  int base    unsigned long strtoul  const char     nptr  char   __endptr  int     base    long atol  const char xs  ATTR  PURE   int atoi  const char xs  ATTR  PURE   void exit  int status           NORETURN   void    malloc  size t size           MALLOC     void free  void    ptr    void    calloc  size t nele  size t size   ATTR MALLOC     void    realloc  void    ptr  size t size           MALLOC     double strtod  const char     nptr  char       endptr    double atof  const char     nptr    int rand  void    void srand  unsigned int __ seed    int rand r  unsigned long  ctx                                   Variables    size t malloc margin  char    __            heap  start  char       malloc heap end    6 10 2 Define Documentation    6 10 2 1 fdefine DTOSTR ALWAYS SIG
132. 02 34 2007 for avr libc by Doxygen    CONTENTS x       8 62    8 63    8 64    8 65    8 66    8 67    8 68    8 69    8 70    8 71    8 72    8 73    8 74    8 75    8 76    8 77    strlen PS File Reference      25 m RR EET 252  8 02 1 Detaled Description  lt       ecs pss 8 ss EUR ER SUN 252                     22222222422 eae X ed           uos 253  5 63 1 Detailed Description      scs s neas rapace ia 253  strncasecmp S File                                              253  8 64 1 Detailed Description                        253  strncasecmp PS File Reference 22 2 2 22 2  2          253  8 65 1 Detailed Description                        253  sinet   Pule         cu soe aoei y Os did s Rs 253  8 66 1 Detailed Description s p    scs cs  Sa SUR    253  strncat_PS File Relereice o u a 2 2 u s    Q eq m boo    253  5 67 1 Detailed Deseripliom ue cR RR 253  simompos File Referente   o suus uot oko o Ro OY Y A RO De 254  6 08 1 Detaled Description    622444885 Rx se xS 254  stracmp P S File RETefen  e   vocem a on UR Rs 254  8 69 1 Detailed Description      lt    es e a o koa sss sa 254           File Referenee 22222222225  222    5552554 254  8 70 1 Detailed Descriptio 2                       254  s  ncpy P S Pile Referenc   uec be 22222       255  6 3L Detaled Description  lt  s sie seora me        BASES 255           Pile Reference  co    eR KS ee    255  8 72 1 Detailed Description                        255  strnlen  P S File                          22 ro o o m 255  8231 D
133. 0USB162  AT90USB82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646  USART2_  SIG_  USART2  Rx   ATmega640  ATmegal280  ATmegal281   RX_vect USART2   Complete ATmega2560  ATmega2561  RECV  USART2   SIG   USART2  Tx ATmega640  ATmegal280  ATmegal28l   TX vect USART2   Complete ATmega2560  ATmega2561  TRANS          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    119                                                                                  Vector name Old vector   Description Applicable for device  name  USART2_  SIG_  USART2 Data   ATmega640  ATmegal280  ATmegal281   UDRE vect USART2   register Empty ATmega2560  ATmega2561  DATA  USART3   SIG   USART3  Rx ATmega640  ATmegal280  ATmegal281   RX vect USART3   Complete ATmega2560  ATmega2561  RECV  USART3   SIG   USART3  Tx ATmega640  ATmegal280  ATmegal28l   TX vect USART3   Complete ATmega2560  ATmega2561  TRANS  USART3   SIG   USART3 Data ATmega640  ATmegal280  ATmegal281   UDRE vect USART3   register Empty ATmega2560  ATmega2561  DATA  USART   SIG   USART  Rx ATmegal6  ATmega32  ATmega323  AT          vect USART   Complete mega8  RECV  SIG_   UART_RECV  USART_RX_    SIG_  USART  Rx   AT90PWM3  AT90PWM2  AT90PWMI   vect USART_  Complete ATmega3250  ATmega3290  ATmega3290P             SIG   ATmega6450  ATmega6490  ATmega8535   UART RECV ATmegal68  ATmega48  ATmega88  AT   tiny2313  USART   SIG   USART  Tx ATmegal6  ATmega32  ATmega323  AT   TXC  vect USAR
134. 0e 94 7c 00     11 Oxf8       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 316       You can clearly see that 0x0038 is correctly passed for the address of the io port   Looking at the disassembled object code for the body of the function  we can see that  the function is indeed performing the operation we intended     void  set_bits_func_correct  volatile uint8_t xport  uint8_t mask            8       01 movw r30  r24   port    mask         80 81 1   r24  7  Fo  86 2b or r24  r22  fe  80 83 st Z  r24     100  08 95 ret    Notice that we are accessing the io port via the LD and ST instructions     The port parameter must be volatile to avoid a compiler warning     Note     Because of the nature of the IN and OUT assembly instructions  they can not be  used inside the function when passing the port in this way  Readers interested in  the details should consult the Instruction Set data sheet     Finally we come to the macro version of the operation  In this contrived example  the  macro is the most efficient method with respect to both execution speed and code size     set bits macro  PORTB  0    0      Lies 88 b3 in r24  0x18   24  11e  80 6f ori r24  OxF0   240  120  88 bb out 0x18  r24   24    Of course  in a real application  you might be doing a lot more in your function which  uses a passed by reference io port address and thus the use of a function over a macro  could save you some code space  but still at a cost of exec
135. 1 lt  lt CLKPS1   1 lt  lt CLKPS2   1 lt  lt CLKPS3       Enumerations      enum clock div t     clock div 1 0  clock div 2  1  clock div 4  2  clock div 8   3   clock div 16   4  clock div 32   5  clock div 64   6  clock div 128   7   clock div 256   8      8 34 2 Define Documentation    8 34 2   define clock prescale set x     Value        uint8_t tmp   _BV CLKPCE      __asm__ _ volatile        in tmp_reg__ __SREG__    n t                     n t          Sts  1    0   XnNEU N    SES  1   2        X    out SREG__  tmp_reg__          no outputs    N   s  gd         Y          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 35 setbaud h File Reference    240        M    SFR MEM ADDR CLKPR      qr  x         rO     y N    8 35 setbaud h File Reference  8 35 1 Detailed Description    Defines        define               2       define          VALUE       define UBRRL VALUE        define UBRRH  VALUE        define USE 2X 0  8 36 setjmp h File Reference  8 36 1 Detailed Description  Defines        define                1            define _ ATTR_NORETURN__ __attribute__  __noreturn__      Functions       int setimp  jmp buf __jmpb        void longjmp  jmp_buf __jmpb  int       ATTR NORETURN      8 37  sleep h File Reference  8 371 Detailed Description    Defines        define_AVR_SLEEP_H_ 1          define_SLEEP_CONTROL_REG MCUCR    Sleep Modes       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 38 stdint h File Reference 241       Note    
136. 198       6 35 3 3 Part 3  Interrupt service routines        ISR to handle timer 175 overflow  interrupt arranges for the software clock  While timer   runs the PWM  it calls its  overflow handler rather frequently  so the TMR1_SCALE value is used as a postscaler  to reduce the internal software clock frequency further  If the software clock triggers   it sets the tmr_int bitfield  and defers all further tasks to the main loop     The ADC ISR just fetches the value from the ADC conversion  disables the ADC  interrupt again  and announces the presence of the new value in the adc_int bitfield   The interrupt is kept disabled while not needed  because the ADC will also be triggered  by executing the SLEEP instruction in idle mode  which is the default sleep mode    Another option would be to turn off the ADC completely here  but that increases the  ADC   s startup time  not that it would matter much for this application         6 35 3 4 Part 4  Auxiliary functions The function handle mcucsr   uses two    attribute  declarators to achieve specific goals  First  it will instruct the com   piler to place the generated code into the  init3 section of the output  Thus  it will be   come part of the application initialization sequence  This is done in order to fetch  and  clear  the reason of the last hardware reset from MCUCSR as early as possible  There  is a short period of time where the next reset could already trigger before the current  reason has been evaluated  This also expl
137. 2 2 19  define GET EXTENDED FUSE BITS  0x0002     address to read the extended fuse bits  using boot lock fuse bits get    6 12 2 20  define GET HIGH FUSE BITS  0  0003     address to read the high fuse bits  using boot lock fuse bits get    6 12 2 21  define GET LOCK BITS  0  0001     address to read the lock bits  using boot lock fuse bits get    6 12 2 22  define GET LOW FUSE BITS  0  0000     address to read the low fuse bits  using boot lock fuse bits get    6 13  lt avr eeprom h gt   EEPROM handling    6 13 1 Detailed Description    finclude  lt avr eeprom h gt     This header file declares the interface to some simple library routines suitable for han   dling the data EEPROM contained in the AVR microcontrollers  The implementation  uses a simple polled mode interface  Applications that require interrupt controlled  EEPROM access to ensure that no time will be wasted in spinloops will have to deploy  their own implementation     Note     All of the read write functions first make sure the EEPROM is ready to be ac   cessed  Since this may cause long delays if a write operation is still pending  time   critical applications should first poll the EEPROM e  g  using eeprom is ready    before attempting any actual I O        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 13  lt avr eeprom h gt   EEPROM handling 100       avr     This header file declares inline functions that call the assembler subroutines di   rectly  This prevents that the compiler gen
138. 21         BLOCK  121    5   NAKED  121  ISR_NOBLOCK  122  reti  122   sei  122   SIGNAL  122    avr inttypes           farptr t  31  PRId16  22  PRId32  22   PRId8  22  PRIdFAST16  22  PRIdFAST32  22  PRIdFASTS  22  PRIdLEAST16  22  PRIdLEAST32  23  PRIdLEASTS  23  PRIdPTR  23  PRIi16  23  PRIi32  23   PRIi8  23  PRIiFASTI16  23       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    366       PRHFAST32  23  PRIFASTS  23  PRILEASTI6  23  PRILEAST32  23  PRIiLEASTS  24  PRIiPTR  24  PRIo16  24      1032  24       1  8  24  PRIoFASTI6  24  PRIoFAST32  24  PRIoFASTS  24  PRIoLEASTI6  24  PRIoLEAST32  24  PRIoLEASTS  24  PRIoPTR  25  PRIu16  25  PRIu32  25         8  25  PRIuFAST16  25  PRIuFAST32  25  PRIuFASTS  25  PRIuLEASTI6  25  PRIuLEAST32  25  PRIuLEASTS  25  PRIuPTR  25  PRIX16  26  PRIx16  26  PRIX32  26  PRIx32  26  PRIX8  26   PRIx8  26  PRIXFAST16  26  PRIxFASTI6  26  PRIXFAST32  26  PRIxFAST32  26  PRIXFASTS  26  PRIxFASTS  27  PRIXLEASTIO  27  PRIxLEASTI6  27  PRIXLEAST32  27  PRIxLEAST32  27  PRIXLEASTS  27  PRIxLEASTS  27  PRIXPTR  27  PRIxPTR  27    SCNd16  27  SCNd32  27  SCNdFAST 16  28  SCNdFAST32  28  SCNdLEAST 16  28  SCNdLEAST32  28  SCNdPTR  28  SCNi16  28  SCNi32  28  SCNiFAST16  28  SCNiFAST32  28  SCNiLEAST16  28  SCNiLEAST32  28  SCNiPTR  29  SCNo16  29  SCNo32  29  SCNoFAST 16  29  SCNoFAST32  29  SCNoLEAST 16  29  SCNoLEAST32  29  SCNoPTR  29  SCNul6  29  SCNu32  29  SCNuFASTI16  29  SCNuFAST32  30  SCNuLEAST 16  30  SCNuLEAS
139. 25          t strspn P  const char    s         P accept     The strspn_P   function calculates the length of the initial segment of s which con   sists entirely of characters in accept  This function is similar to strspn   except that  accept is a pointer to a string in program space     Returns     The strspn_P   function returns the number of characters in the initial segment of  s which consist only of characters from accept  The terminating zero is not  considered as a part of string     6 16 4 26 char x strstr P  const char   57  PGM P s2   Locate a substring     The strstr_P   function finds the first occurrence of the substring 52 in the string s1   The terminating     0    characters are not compared  The strstr_P   function is similar to  strstr   except that s2 is pointer to a string in program space     Returns          strstr_P   function returns a pointer to the beginning of the substring  or NULL  if the substring is not found  If s2 points to a string of zero length  the function  returns s1     6 17  lt avr power h gt   Power Reduction Management    finclude  lt avr power h gt        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 17  lt avr power h gt   Power Reduction Management 138       Many AVRs contain a Power Reduction Register  PRR  or Registers  PRRx  that allow  you to reduce power consumption by disabling or enabling various on board peripher   als as needed     There are many macros in this header file that provide an easy inter
140. 258  util twi h 258  wdt h 260    5 avr libc Page Index    5 1  avr libc Related Pages    Here is a list of all related documentation pages     Toolchain Overview 261  Memory Areas and Using malloc   266  Memory Sections 271  Data in Program Space 275  avr libc and assembler programs 280       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 avr libc Module Documentation 15       Inline Assembler Cookbook 286  How to Build a Library 298  Porting From IAR to AVR GCC 301  Frequently Asked Questions 305  Building and Installing the GNU Tool Chain 329  Using the GNU tools 345  Using the avrdude program 355  Release Numbering and Methodology 357  Acknowledgments 360  Todo List 361  Deprecated List 361    6 avr libc Module Documentation    6 1  lt alloca h gt   Allocate space in the stack  6 1 1 Detailed Description    Functions       void   alloca  size  t size     6 1 2 Function Documentation    6 1 2 1 void   alloca  size t size   Allocate size bytes of space in the stack frame of the caller     This temporary space is automatically freed when the function that called alloca   re   turns to its caller  Avr libc defines the alloca   as a macro  which is translated into the  inlined builtin alloca   function  The fact that the code is inlined  means  that it is impossible to take the address of this function  or to change its behaviour by  linking with a different library        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 2  lt assert h gt 
141. 2_t int_farptr_t    typedef uint32_t uint_farptr_t    8 18 io h File Reference    8 18 1 Detailed Description    8 19 math h File Reference  8 19 1 Detailed Description  Defines       define    PI 3 141592653589793238462643       define M SORT2 1 4142135623730950488016887       define         builtin nan           define INFINITY _ builtin inf      Functions    double cos  double x   ATTR  CONST   double fabs  double _ x           CONST   double fmod  double _ x  double              CONST  double modf  double __ value  double              double sin  double x           CONST   double sqrt  double _ x  _ ATTR  CONST   double tan  double x   ATTR_CONST   double floor  double __x  _ ATTR_CONST   double ceil  double x   ATTR  CONST   double frexp  double __ value  int    exp    double ldexp  double _     int exp           CONST  double exp  double _ x   ATTR  CONST                                     Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 20    memccpy S File Reference 229       double cosh  double x   ATTR CONST  double sinh  double x   ATTR CONST  double tanh  double x  ATTR  CONST  double acos  double x   ATTR  CONST  double asin  double x  ATTR  CONST  double atan  double x   ATTR CONST  double atan2  double y  double x           CONST  double log  double _ x           CONST  double log10  double _ x   ATTR  CONST  double pow  double x  double __y  ATTR CONST  int isnan  double x  ATTR  CONST  int           double      ATTR  CONST  double square  d
142. 2e  de bf out 0  3    r29   62   30  cd bf out 0x3d  r28   61  00000032         copy data      32  10 eO ldi ri7  0x00   0   34  a0 e6 ldi r26  0x60   96   36    0 eO         x27    0x00    0   38  e4 el 141 r30  0x14    20         fl eO 141 r31  0  01  1   36s 02 60 rjmp   4   0x42    do copy  data start    0000003e    do copy           loop      3e  05 90 lpm r0  Z    40  Od 92 st X   ro  00000042  lt  do_copy_data_start gt     42  a0 36 cpi r26  0x60   96   44  bl 07 Gp   27    17   46    9   7 brne   10   Ox3e  lt  5      gt   00000048  lt __do_clear_bss gt     48  10 e0        riz  0x00 0   4a  a0 e6 ldi r26  0x60   96   4c  bo eO ldi r27  0x00   0   4e  01 cO rjmp   2   0x52    do clear bss start    00000050    do clear bss loop      503 Td     92 st Xt        00000052    do clear bss start      52  a3 36 cpi r26  0x63   99   54  bl 07 EDE S27    17   56  el f7 brne   8   0x50    do clear bss loop     58  4d d0 rcall   154   Oxf4   main            5     0 rjmp   180   Ox110   exit     0000005      vector 8       include  iocompat h     Note  1       enum   UP  DOWN      ISR  TIMER1  OVF            x Note  2  x        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project       50 2 92 push rl         Of 92 push r0   60  Of b6 in    0  0x3f 5 63  62  Of 92 push r0   64  11 24 eor rl  rl   66  2f 93 push r18   68   3f 93 push r19         8f 93 push r24    static uintl6_t pwm     Note  3       static uint8_t direction     switch  direction 
143. 4   vect START   WATCHDOG_    SIG_  Watchdog Time    ATtiny24  ATtiny44  ATtiny84   vect WATCHDOG_          TIMEOUT   WDT_  SIG_  Watchdog Timer   ATtiny2313   OVERFLOW_    WATCHDOG_    Overflow   vect TIMEOUT   SIG_WDT_   OVERFLOW   WDT_vect SIG_WDT  Watchdog Time    AT90PWM3  AT90PWM2  AT90PWMI   SIG_  out Interrupt ATmega406  ATmegal68  ATmega48   WATCHDOG_  ATmega88   ATmega640   ATmegal280   TIMEOUT ATmegal281  ATmega2560  ATmega2561                 ATmega324P  ATmegal64P  ATmega644P   ATmega644  ATtinyl3            45  AT   tiny25  ATtiny85  ATtiny261  ATtiny461   ATtiny861  AT90USBI62      9005  82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       Global manipulation of the interrupt flag    The global interrupt flag is maintained in the I bit of the status register  SREG          define sei        define cli      Macros for writing interrupt handler functions       define ISR vector  attributes         define SIGNAL  vector        define EMPTY_INTERRUPT vector        define ISR_ALIAS vector  target vector         define reti        define BADISR_vect    ISR attributes        define ISR_BLOCK        define ISR_NOBLOCK        define ISR_NAKED      define ISR_ALIASOF target_vector        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts 121       6 14 2 Define Documentation    6 14 2 1  define BADISR vect     include   avr interrupt h      This is a vector which is aliased to _ vector  default  the vector
144. 4  lt avr interrupt h gt   Interrupts    109          Vector name    Old  name    vector    Description    Applicable for device       INT6_vect    SIG_   INTERRUPT6    External Interrupt  Request 6    AT90CAN128  AT90CAN32  ATIOCAN64   ATmegal03  ATmegal28  AT   mega64  ATmega640  ATmega1280   ATmegal 281  ATmega2560  AT   mega2561  AT90USBI62      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646       INT7_vect    SIG_   INTERRUPT7    External Interrupt  Request 7    AT90CAN128  AT90CAN32  AT90CANGA   ATmegal03  ATmegal28  AT   mega64  ATmega640  ATmega1280   ATmegal 281  ATmega2560  AT   mega2561  AT90USBI62      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646       IO PINS vect    SIG  PIN   SIG PIN    CHANGE    External Interrupt  Request 0    ATtinyll  ATtiny12  ATtiny15  ATtiny26       LCD vect    SIG LCD    LCD Stat of  Frame    ATmegal69  ATmegal69P  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega649  ATmega6490       LOWLEVEL_   IO PINS vect    SIG  PIN    Low level Input  on Port B    ATtiny28       OVRIT vect    SIG  CAN    OVERFLOWI    CAN  Overrun    Timer        90      128  AT90CAN32  AT90CAN64       PCINTO vect    SIG PIN    CHANGEO    Pin Change Inter   rupt Request 0    ATmegal62  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega325   ATmega3250  ATmega329  ATmega329P   ATmega3290  ATmega3290P  ATmega406   ATmega645  ATmega6450  ATmega649   ATmega6490  ATmegal68   ATmega48   ATmega88   ATmega640   ATmegal280   ATmeg
145. 46  uint32_t  avr_stdint  49  UINT64_C  avr_stdint  46  UINT64_MAX  avr_stdint  46  uint64_t  avr_stdint  49  UINT8_C  avr_stdint  46  UINT8_MAX  avr_stdint  47  uint8_t  avr_stdint  50  uint_farptr_t    avr_inttypes  31  UINT_FAST16_MAX    avr_stdint  47  uint_fast16_t  avr_stdint  50    UINT_FAST32_MAX    avr_stdint  47  uint_fast32_t  avr_stdint  50    UINT_FAST64_MAX    avr_stdint  47  uint_fast64_t  avr_stdint  50    UINT_FAST8_MAX    avr_stdint  47  uint_fast8_t  avr_stdint  50    UINT_LEAST16_MAX    avr_stdint  47  uint_least16_t  avr_stdint  50    UINT_LEAST32_MAX    avr_stdint  47  uint_least32_t  avr_stdint  50  UINT_LEAST64_MAX  avr_stdint  47  uint_least64_t  avr_stdint  50  UINT_LEAST8_MAX  avr_stdint  47  uint_least8_t  avr_stdint  50  UINTMAX_C  avr_stdint  47  UINTMAX_MAX  avr_stdint  47  uintmax_t  avr_stdint  51  UINTPTR_MAX  avr_stdint  48  uintptr_t  avr_stdint  51  ultoa  avr_stdlib  79  ungetc  avr_stdio  63  USE_2X  util_setbaud  163  Using the standard IO facilities  199  util_atomic  ATOMIC_BLOCK  153  ATOMIC_FORCEON  153  ATOMIC_RESTORESTATE  154  NONATOMIC_BLOCK  154  NONATOMIC_FORCEOFF  154  NONATOMIC_RESTORESTATE   154  util_crc  _crc16_update  156  _crc_ccitt_update  156  _crc_ibutton_update  157  _crc_xmodem_update  157  util_delay  _delay_ms  159  _delay_us  159  util_delay_basic  _delay_loop_1  160       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    384       _delay_loop_2  160  util_parity  parity_even_bit  161  ut
146. 6            lt  lt  8      for  i20  i  8  i            XR  ere  cro   else  ere         return crc      amp  0  8000      cre  lt  lt  1    0x1021      lt  lt   1     6 25  lt util delay h gt   Convenience functions for busy wait delay    loops    6 25 1 Detailed Description     define F CPU 1000000UL    1 MHz       define F CPU    14 7456E6     include   util delay h      Note     As an alternative method  it is possible to pass the F CPU macro down to the com   piler from the Makefile  Obviously  in that case  no define statement should    be used     The functions in this header file are wrappers around the basic busy wait functions from    util delay basic h    They are meant as convenience functions where actual time  values can be specified rather than a number of cycles to wait for  The idea behind is  that compile time constant expressions will be eliminated by compiler optimization so  floating point expressions can be used to calculate the number of delay cycles needed  based on the CPU frequency passed by the macro F CPU     Note     In order for these functions to work as intended  compiler optimizations must be  enabled  and the delay time must be an expression that is a known constant at  compile time  If these requirements are not met  the resulting delay will be much  longer  and basically unpredictable   and applications that otherwise do not use  floating point calculations will experience severe code bloat by the floating point  library routines linked in
147. 6   AT90USB 1287  AT90PWM 1   AT90PWM2  AT90PWM2B   AT90PWM3  AT90PWM3B   AT90PWM216   AT90PWM316  ATmega165   ATmega165P  ATmega325   ATmega3250  ATmega645   ATmega6450  ATmega169   ATmegal69P  ATmega329   ATmega3290  ATmega649   ATmega6490  ATmega164P   ATmega324P  ATmega644   ATmega48  ATmega88   ATmegal68  ATtiny24   ATtiny44  ATtiny84  ATtiny25   ATtiny45  ATtiny85   ATtiny261  ATtiny461   ATtiny861       power_lcd_enable      Enable the LCD module     ATmegal69  ATmega169P   ATmega329  ATmega3290   ATmega649  ATmega6490       power_lcd_disable       Disable the LCD module     ATmegal69  ATmega169P   ATmega329  ATmega3290   ATmega649  ATmega6490       power pscO enable      Enable the Power Stage  Controller 0 module     AT90PWMI  AT90PWM2   AT90PWM2B  AT90PWM3   AT90PWM3B                               20 02 34 20    7 Ris ablelihe RoVerygtage    Controller 0 module     AT90PWMI  AT90PWM2   AT90PWM2B  AT90PWM3   AT90PWM3B       power_psc1_enable      Enable the Power Stage  Controller 1 module     AT90PWMI  AT90PWM2   AT90PWM2B  AT90PWM3   AT90PWM3B       power_psc1_disable            Disable the Power Stage  Controller 1 module        AT90PWMI  AT90PWM2   AT90PWM2B  AT90PWM3           6 18 Additional notes from  lt avr sfr_defs h  gt  140       Some of the newer AVRSs contain a System Clock Prescale Register  CLKPR  that  allows you to decrease the system clock frequency and the power consumption when  the need for processing power is low  Below are two macros and an en
148. 6  lt math h gt   Mathematics 34       6 6 3 Function Documentation    6 6 3 1 double acos  double __x     The acos   function computes the principal value of the arc cosine of x  The returned  value is in the range  0  pi  radians  A domain error occurs for arguments not in the  range   1   1      6 6 3 2 double asin  double x     The asin   function computes the principal value of the arc sine of x  The returned  value is in the range   pi 2  pi 2  radians  A domain error occurs for arguments not in  the range   1   1      6 6 33 double atan  double x     The atan   function computes the principal value of the arc tangent of x  The returned  value is in the range  0  pi  radians  A domain error occurs for arguments not in the  range   1   1      6 6 3 4 double atan2  double __y  double        The atan2   function computes the principal value of the arc tangent of      x  using  the signs of both arguments to determine the quadrant of the return value  The returned  value is in the range   pi   pi  radians     6 6 3 5 double ceil  double x     The ceil   function returns the smallest integral value greater than or equal to x  ex   pressed as a floating point number     6 6 3 6  ATTR CONST double copysign  double x  double y     The copysign   function returns x but with the sign of y  They work even if x or y are  NaN or zero     6 6 3 7 double cos  double x     The cos   function returns the cosine of x  measured in radians     6 6 3 8 double cosh  double x     The cosh   f
149. 64_t  64 bit unsigned type        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 51       Note     This type is not available when the compiler option  mint8 is in effect     6 8 3 18 typedef unsigned char uint8_t  8 bit unsigned type     6 8 3 19 typedef uint16_t uint_fast16_t    fastest unsigned int with at least 16 bits     6 8 3 20 typedef uint32_t uint_fast32_t    fastest unsigned int with at least 32 bits     6 8 3 21 typedef uint64_t uint_fast64_t    fastest unsigned int with at least 64 bits     Note     This type is not available when the compiler option  mint8 is in effect     6 8 3 22 typedef uint8_t uint_fast8_t    fastest unsigned int with at least 8 bits     6 8 3 23 typedef uint16_t uint_least16_t    unsigned int with at least 16 bits     6 8 3 24 typedef uint32_t uint_least32_t    unsigned int with at least 32 bits     6 8 3 25 typedef uint64_t uint_least64_t    unsigned int with at least 64 bits     Note     This type is not available when the compiler option  mint8 is in effect        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 52       6 8 3 26 typedef uint8_t uint_least8_t    unsigned int with at least 8 bits     6 8 3 27 typedef uint64_t uintmax_t    largest unsigned int available     6 8 3 28 typedef uint16_t uintptr_t    Unsigned pointer compatible type     6 9  lt stdio h gt   Standard IO facilities    6 9 1 Detailed Descripti
150. 7 CanluseCi on the AVR                     309  9 9 8 Shouldn   t I initialize all my variables                 310  9 9 9 Why do some 16 bit timer registers sometimes get trashed  311  9 9 10 How do I use a  define   d constant in an asm statement          312  9 9 11 Why does the PC randomly jump around when single stepping   through my program in                              312  9 9 12 How do I trace an assembler file in avr gdb               313  9 9 13 How do I pass an IO port as a parameter to a function  314  9 9 14 What registers are used by      C compiler             317  9 9 15 How do I put an array of strings completely in ROM          318  9 9 16 How to use external                            320  9917 Which Oflagtouse               321  9 9 18 How do I relocate code to a fixed address                 321  9 9 19      UART is generating nonsense       ATmegal28 keeps  crashing  Port F is completely broken               322  9 9 20 Why do all my  foo   bar  strings eat up the SRAM        322  9 9 21 Why does the compiler compile an 8 bit operation that uses  bitwise operators into    16 bit operation in assembly        323  9 9 22 How to detect RAM memory and variable overlap problems    324  9 9 23 Is it really impossible to program the ATtinyXX in C  324  9 9 24 What is this  clock skew detected  messsage           325  9 9 25 Why are  many  interrupt flags cleared by writing alogical 1  325  9 9 26 Why have  programmed  fuses the bit value 0           326  9 9
151. 7 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 65       0  zero  Zero padding  For all conversions  the converted value is padded  on the left with zeros rather than blanks  If a precision is given with a  numeric conversion  d  i  0  u  i  x  and X   the 0 flag is ignored            negative field width flag  the converted value is to be left adjusted on  the field boundary  The converted value is padded on the right with blanks   rather than on the left with blanks or zeros  A   overrides a 0 if both are  given              space  A blank should be left before a positive number produced by a  signed conversion  d  or i            A sign must always be placed before a number produced by a signed  conversion       overrides a space if both are used       An optional decimal digit string specifying a minimum field width  If the con   verted value has fewer characters than the field width  it will be padded with  spaces on the left  or right  if the left adjustment flag has been given  to fill out  the field width        An optional precision  in the form of a period   followed by an optional digit  string  If the digit string is omitted  the precision is taken as zero  This gives the  minimum number of digits to appear for d  i  o  u  x  and X conversions  or the  maximum number of characters to be printed from a string for s conversions       An optional 1 or h length modifier  that specifies that the argument for the d  i       u      or X conversion
152. 710E0A0E6BOEO01C0OEC  00050001D92A336B107E1F74DD05AC01F920F92FF  00060000FB60F9211242F933F938F9380916000CE  0007000882379F420916100309162002F5F3F4F17  0008000309362002093610083E02F3F3807D9F45A   1000900017C0813029F0209161003091620013C0B7   1000A0002091610030916200215030403093620015  000  000209361002115310531  41092600003  006  000C00081E0809360003BBD2ABD8F913F912F91CD  000D0000F900FBE0F901F90189583E88FBD8EB5BF  000E00081608EBD1BBC1ABC82E087BB84E089BFE7  000F00078940895CFE5DA4EODEBFCDBFEEDF85B7BD  10010000806885BF889585B78F7785BFF8CF78CF12   0401100000COFFCF5D    00000001FF                The  1 option indicates that we want the information from the  text and  data segment  extracted  If we specify the EEPROM segment  we can generate a  hex file that can be  used to program the EEPROM       avr objcopy  j  eeprom   change section lma  eeprom 0  O ihex demo elf demo eeprom hex    There is no demo  eeprom hex file written  as that file would be empty     Starting with version 2 17 of the GNU binutils  the avr  ob jcopy command that used  to generate the empty EEPROM files now aborts because of the empty input section   eeprom  so these empty files are not generated  It also signals an error to the Makefile  which will be caught there  and makes it print a message about the empty file not being  generated        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 190       6 34 7 Letting Make Build the Project    Rather than type these command
153. 8  tolower   ctype  18  tools  optional  329  tools  required  329  toupper   ctype  18  trunc   avr_math  36  TW_BUS_ERROR   util_twi  165  TW_MR_ARB_LOST   util_twi  165  TW_MR_DATA_ACK   util_twi  165  TW_MR_DATA_NACK   util_twi  165  TW_MR_SLA_ACK   util_twi  165  TW_MR_SLA_NACK   util_twi  165  TW_MT_ARB_LOST   util_twi  165  TW_MT_DATA_ACK   util_twi  165  TW_MT_DATA_NACK   util_twi  165  TW_MT_SLA_ACK   util_twi  165  TW_MT_SLA_NACK   util_twi  165  TW_NO_INFO   util_twi  165  TW_READ   util_twi  166  TW_REP_START    util_twi  166  TW_SR_ARB_LOST_GCALL_ACK  util_twi  166  TW SR ARB LOST SLA ACK  util twi  166         SR  DATA  ACK  util twi  166  TW SR           NACK  util twi  166  TW SR  GCALL         util twi  166  TW SR  GCALL DATA ACK  util twi  166  TW SR  GCALL          NACK  util twi  166  TW SR SLA  ACK  util twi  166  TW SR  STOP  util twi  166  TW ST        LOST SLA  ACK  util twi  167  TW ST DATA ACK  util twi  167  TW ST DATA NACK  util twi  167  TW ST LAST DATA  util twi  167  TW ST SLA  ACK  util twi  167  TW START  util twi  167  TW STATUS  util twi  167  TW STATUS MASK  util twi  167  TW WRITE  util twi  167  twi h  257                   UBRR  VALUE   util setbaud  163  UBRRH VALUE  util setbaud  163  UBRRL VALUE  util setbaud  163  UINTI16 C          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    383       avr_stdint  46  UINT16_MAX  avr_stdint  46  uintl6_t  avr_stdint  49  UINT32_C  avr_stdint  46  UINT32_MAX  avr_stdint  
154. 8 5 boot h File Reference    216        define GET_HIGH_FUSE_BITS  0x0003    define boot_lock_fuse_bits_get address               define boot_rww_enable   __boot_rww_enable       define boot_lock_bits_set lock_bits  __ boot_lock_bits_set lock_bits         define boot_page_fill_safe address  data    define boot_page_erase_safe address    define boot_page_write_safe address    define boot_rww_enable_safe      define boot_lock_bits_set_safe lock_bits     8 5 2 Define Documentation    8 5 2 1  define boot lock bits set lock bits        Value      4  uint8_t value    uint8_t     lock_bits     __asm__ __volatile__      idi 30  T n t              31  O n t    mov r0   2 n t    sts  0   1 n t            spm n t       i    SFR MEM ADDR  SPM REG      r      int8 t  BOOT LOCK BITS SET     r   value               EST   r31     8 5 2 2  define boot lock bits set alternate lock bits        Value         uint8_t value    uint8_t     lock bits     __asm__ __volatile__      Idi r30  1 n t           r31  O n t    mov r0   2 n t    sts  0   1 n t     POLO ut GOGO uu GO PE           uw    Pdl a         m d     define boot page fill address  data      boot page fill normal address  data    define boot page erase address  boot page erase normal address    define boot page write address  boot page write normal address        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 5 boot h File Reference 217              spm n t       word Oxffff n t        nop n t               i    SFR 
155. 9   9   1 1 Ts   1O RESET                     18   20K S      2 2 8  MOSI  PB5    17  LED EK       H XTAL2         16  R2  D1  18        OCT  PB3  15 LI b    XTAL1 PB2   14  See note  8  Na id    18pf 20        AIN1  PB1  13                 AINO  PBO  12         TE  IcP PD6 HH   T1  PDS   2   M               8      INT1  PD3       GND  INTO  PD2  6    TxD  PD1    3    RxD  PDO   2                AT90S2313P    Figure 1  Schematic of circuit for demo project    The source code is given in demo c  For the sake of this example  create a file called  demo c containing this source code  Some of the more important parts of the code  are     Note  1      As the AVR microcontroller series has been developed during the past years   new features have been added over time  Even though the basic concepts of  the timer counterl are still the same as they used to be back in early 2001 when  this simple demo was written initially  the names of registers and bits have been  changed slightly to reflect the new features  Also  the port and pin mapping of  the output compare match IA  or 1 for older devices  pin which is used to control  the LED varies between different AVRs  The file iocompat  h tries to abstract  between all this differences using some preprocessor  ifdef statements  so the  actual program itself can operate on a common set of symbolic names  The macros  defined by that file are                   OCR the name of the OCR register used to control the PWM  usually either         
156. 9005  1287  AT90USB1286   AT90USB647  AT90USB646       INT2_vect    SIG_   INTERRUPT2    External Interrupt  Request 2    AT90PWM3  AT90PWM2  AT90PWMI   AT90CAN128  AT90CAN32  AT90CAN64   ATmegal03  ATmegal28              16   ATmegal61  ATmegal62  ATmega32   ATmega323  ATmega406  ATmega64   ATmega8515  ATmega8535  AT   mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P   ATmega644  AT90USB162  AT90USB82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       INT3_vect    SIG_   INTERRUPT3    External Interrupt  Request 3    AT90PWM3  AT90PWM2  AT90PWMI   AT90CAN128  AT90CAN32  AT90CAN64   ATmegal03   ATmegal28   ATmega406   ATmega64   ATmega640   ATmegal280   ATmegal281  ATmega2560  AT   mega2561  AT90USBI62      9005  82       9005  1287  AT90USB 1286   AT90USB647  AT90USB646       INT4_vect    SIG_   INTERRUPT4    External Interrupt  Request 4    AT90CAN128  AT90CAN32  AT90CAN64   ATmegal03  ATmegal28  AT   mega64  ATmega640  ATmega1280   ATmegal 281  ATmega2560  AT   mega2561  AT90USBI62      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646       INT5_vect          SIG_   INTERRUPTS       External Interrupt  Request 5       AT90CANI28  AT90CAN32  AT90CANGA4   ATmegal03  ATmegal28  AT   mega64  ATmega640  ATmega1280   ATmegal 281  ATmega2560  AT   mega2561  AT90USB162      9005  82   AT90USB1287  AT90USB 1286   AT90USB647  AT90USB646          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 1
157. AM    On a simple device like a microcontroller it is a challenge to implement a dynamic  memory allocator that is simple enough so the code size requirements will remain low   yet powerful enough to avoid unnecessary memory fragmentation and to get it all done  with reasonably few CPU cycles  Microcontrollers are often low on space and also run  at much lower speeds than the typical PC these days     The memory allocator implemented in avr libc tries to cope with all of these con   straints  and offers some tuning options that can be used if there are more resources  available than in the default configuration     9 2 2 Internal vs  external RAM    Obviously  the constraints are much harder to satisfy in the default configuration where  only internal RAM is available  Extreme care must be taken to avoid a stack heap  collision  both by making sure functions aren t nesting too deeply  and don t require  too much stack space for local variables  as well as by being cautious with allocating  too much dynamic memory     If external RAM is available  it is strongly recommended to move the heap into the ex   ternal RAM  regardless of whether or not the variables from the  data and  bss sections  are also going to be located there  The stack should always be kept in internal RAM   Some devices even require this  and in general  internal RAM can be accessed faster  since no extra wait states are required  When using dynamic memory allocation and  stack and heap are separated in dist
158. BLE FOR ANY DIRECT  INDIRECT  INCIDENTAL  SPECIAL  EXEMPLARY  OR  ONSEQUENTIAL DAMAGES  INCLUDING  BUT NOT LIMITED TO  PROCUREMENT OF  UBSTITUTE GOODS OR SERVICES  LOSS OF USE   NTERRUPTION  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY  WHETHER IN  ONTRACT  STRICT LIABILITY  OR TORT  INCLUDING NEGLIGENCE OR OTHERWISE   RISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE  EVEN IF ADVISED OF THE    DATA  OR PROFITS  OR BUSINESS          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    2 avr libc Module Index       2 avr libc Module Index    2 1 avr libc Modules             is a list of all modules    lt alloca h gt   Allocate space in the stack   lt assert h gt   Diagnostics   lt ctype h gt   Character Operations   lt errno h gt   System Errors   lt inttypes h gt   Integer Type conversions   lt math h gt   Mathematics   lt setjmp h gt   Non local goto   lt stdint h gt   Standard Integer Types   lt stdio h gt   Standard IO facilities   lt stdlib h gt   General utilities   lt string h gt   Strings   lt avr boot h gt   Bootloader Support Utilities   lt avr eeprom h gt   EEPROM handling   lt avr interrupt h gt   Interrupts   lt avr io h gt   AVR device specific IO definitions   lt avr pgmspace h gt   Program Space Utilities   lt avr power h gt   Power Reduction Management   lt avr sfr_defs h gt   Special function registers   Additional notes from  lt avr sfr_defs h gt     lt avr sleep h gt   Power Management and Sleep Modes     lt avr version h gt   avr libc version 
159. Compare memory areas            memcmp_P   function compares the first Len bytes of the memory areas s1 and  flash s2  The comparision is performed using unsigned char operations     Returns            memcmp_P   function returns an integer less than  equal to  or greater than  zero if the first Len bytes of s1 is found  respectively  to be less than  to match  or  be greater than the first Len bytes of 52     6 16 4 3 void    memcpy_P  void   dest  PGM_VOID_P src  size_t n           memcpy_PQ function is similar to memcpy    except the src string resides in pro   gram space    Returns     The memcpy_P   function returns a pointer to dest     6 16 4 4 void x memmem P  const void    51  size t len   PGM_VOID_P s2   size_t len2     The memmem_P   function is similar to memmem   except that s2 is pointer to a  string in program space        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 132       6 16 4 5 PGM_VOID_P memrchr P         VOID P src  int val  size_t len    The memrchr P   function is like the memchr P   function  except that it searches  backwards from the end of the 1en bytes pointed to by src instead of forwards from  the front   Glibc  GNU extension      Returns     The memrchr_P   function returns a pointer to the matching byte or NULL if the  character does not occur in the given memory area     6 16 4 6 int strcasecmp P  const char    s1         P 52    Compare two strings ignoring case    T
160. EOF is returned if an input failure occurs before any conversion such as an end of file  occurs  If an error or end of file occurs after conversion has begun  the number of  conversions which were successfully completed is returned        By default  all the conversions described above are available except the floating point  conversions  and the    conversion  These conversions will be available in the ex   tended version provided by the library 1ibscanf flt a  Note that these conver   sions require a 40 byte conversion buffer  so the extended version requires more stack  space than the basic version irrespective of whether the actual call in progress actu   ally uses this buffer or not  To link a program against the extended version  use the  following compiler flags in the link stage      Wl  u vfscanf  lscanf flt  lm    A third version is available for environments that are tight on space  This version is  provided in the library 1ibscanf min a  and can be requested using the following  options in the link stage      Wl  u vfscanf  l1scanf min  lm    In addition to the restrictions of the standard version  this version implements no field  width specification  no conversion assignment suppression flag      no n specification   and no general format character matching at all  All characters in   mt that do not       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 70       comprise a conversion specification will 
161. File Reference  8 25 1 Detailed Description    Defines       define dest hi r25       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 26 memcpy PS File Reference    231           define dest_lo r24      define src       r23      define src lo r22      define len hi r21      define len lo r20    8 26 memcpy PS File Reference  8 26 1 Detailed Description    Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src lo r22      define len hi r21      define len lo r20    8 27 memmem S File Reference    8 27 1 Detailed Description    828 memmove S File Reference  8 28 1 Detailed Description    Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src lo r22      define len hi r21      define len lo r20       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 29 memrchr S File Reference 232       8 29 memrchr S File Reference    8 29 1 Detailed Description    8 30 memrchr_P S File Reference    8 30 1 Detailed Description    8 34 memset S File Reference  8 31 4 Detailed Description  Defines        define dest hi r25       define dest lo r24       define val lo r22       define len hi r21       define len lo r20  8 32 parity h File Reference  8 32 1 Detailed Description  Defines        define parity even  bit val     8 33 pgmspace h File Reference  8 33 1 Detailed Description    Defines     define _ PGMSPACE H 1   define need size t    define ATTR CONST     attribute    
162. Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 24  lt util crc16 h gt   CRC Computations 158       uint16_t  crc ccitt update  uintl16 t crc  uint8_t data       data      108  crc     data      data  lt  lt  4     return     uint16            lt  lt  8    hi8  crc      uint8_t   data  gt  gt  4       uint16 t data      3       6 24 2 3 static inline  uint8 t crc ibutton update  uint8 t crc  uint8 t    _data   static        Optimized Dallas  now Maxim  iButton 8 bit CRC calculation   Polynomial  x 8   x 5   x 4   1  0x8C   Initial value  0  0  See http    www maxim ic com appnotes cfm appnote number 27  The following is the equivalent functionality written in C   uint8 t   crc ibutton update uint8 t crc  uint8 t data          uint8_t i     cre   crc   data   for  i   0  i  lt  8  itt      if  cre  amp  0x01   crc    crc  gt  gt  1    0x8C   else  cre  gt  gt   1          return crc     6 24 2 4 static _ inline uint16_t _crc_xmodem_update  uint16_t _ crc   uint8 t data   static     Optimized CRC XMODEM calculation   Polynomial  x 16   x 12   x 5   1  0x1021    Initial value  0  0   This is the CRC used by the Xmodem CRC protocol     The following is the equivalent functionality written in C        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 25  lt util delay h gt      Convenience functions for busy wait delay loops    159       uintl6_t    crc_xmodem_update  uintl6_t crc  uint8_t data          int i     A                         uintl1
163. IO facilities 61       Test the end of file flag of st ream  This flag can only be cleared by a call to clearerr       6 9 3 5      ferror  FILE    _ stream     Test the error flag of stream  This flag can only be cleared by    call to clearerr       6 9 3 6 int fflush  FILE x stream   Flush stream     This is a null operation provided for source code compatibility only  as the standard IO  implementation currently does not perform any buffering     6 9 37 int fgetc  FILE x __ stream        The function fgetc reads a character from st ream  It returns the character  or EOF  in case end of file was encountered or an error occurred  The routines feof   or ferror    must be used to distinguish between both situations     6 9 3 8 char  fgets  char    __str  int __size  FILE        stream     Read at most size   1 bytes from stream  until a newline character was encoun   tered  and store the characters in the buffer pointed to by str  Unless an error was  encountered while reading  the string will then be terminated with a NUL character     If an error was encountered  the function returns NULL and sets the error flag of  stream  which can be tested using ferror    Otherwise  a pointer to the string will  be returned     6 9 3 9 int fprintf  FILE x __ stream  const char    fmt          The function fprintf performs formatted output to stream  See vfprintf     for details     6 9 3 10 int fprintf_P  FILE    stream  const char    fmt          Variant of fprintf    that uses a fmt st
164. Id32  1      define PRIGLEAST32        define PRIGFAST32  Id    define PRIi32  li    define PRIILEAST32  li    define PRIiFAST32  li    define PRIdPTR PRId16   define PRUPTR PRII16   define PRIo8  o     define PRIOLEASTS  o    define PRIoFASTS  o    define PRIu8  u     define PRIULEASTS  u    define PRIUFASTS  u    define PRIx8  x     define PRIXLEASTS  x    define PRIxFASTB8  x    define PRIX8  X    define PRIXLEASTS  X    define PRIXFASTS  X    define PRIo16  o    define PRIOLEAST16        define PRIOFAST16  o        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 22        define PRIu16  u     define PRIULEAST16  u    define PRIUFAST16  u    define PRIx16  x     define PRIXLEASTI16  x    define PRIXFAST16  x    define PRIX16  X    define PRIXLEAST16  X    define PRIXFAST16  X    define PRIo32  lo    define PRIOLEAST32  lo    define PRIoFAST32  lo    define PRIu32  lu    define PRIULEAST32  lu    define PRIuFAST32  lu    define PRIx32  Ix    define PRIXLEAST32  Ix    define PRIXFAST32  Ix    define PRIX32  IX    define PRIXLEAST32  IX    define PRIXFAST32  IX    define PRIoPTR PRIo16   define PRIUPTR PRIul6   define PRIxPTR PRIx16   define PRIXPTR PRIX16   define SCNd16  d    define SCNdLEAST16  d    define SCNdFAST16  d    define SCNi16  1     define SCNiLEAST16  i    define SCNIFASTI6  i    define SCNd32  Id    define SCNdLEAST32  Id    define SCNdFAST32        define SCNi32  li     define SCNiLEAST32  li  
165. LCD   followed by three dots in one second spacing  followed by a sequence that  will clear the LCD  Finally  main    Will be terminated  and the library will add an  infinite loop  so only a CPU reset will be able to restart the application     There are three  commands  recognized  each determined by the first letter of the line  entered  converted to lower case        The  q   quit  command has the same effect of leaving the main loop     The    LCD  command takes its second argument  and sends it to the LCD       The    u     UART  command takes its second argument  and sends it back to the  UART connection     Command recognition is done using sscanf    where the first format in the format  string just skips over the command itself  as the assignment suppression modifier   is  given      6 36 3 2 defines h This file just contains a few peripheral definitions               CPU macro defines the CPU clock frequency  to be used in delay loops  as well  as in the UART baud rate calculation     The macro UART_BAUD defines the RS 232 baud rate  Depending on the actual CPU  frequency  only a limited range of baud rates can be supported        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 36 Using the standard IO facilities 204       The remaining macros customize the IO port and pins used for the HD44780 LCD  driver     6 36 3 3 hd44780 h This file describes the public interface of the low level LCD  driver that interfaces to the HD44780 LCD controller  Pub
166. LE struct file    define stdin  __iob 0      define stdout  __iob 1      define stderr  __iob 2      define EOF   1     define fdev_set_udata stream  u  do    stream      udata   u    while 0    define fdev_get_udata stream    stream      udata     define fdev_setup_stream stream  put  get  rwflag     define FDEV SETUP READ  SRD   define FDEV SETUP WRITE  SWR    define FDEV SETUP RW   SRD  SWR     define FDEV ERR   1     define _FDEV_EOF   2     define FDEV_SETUP_STREAM put  get  rwflag     define fdev_close      define putc  c      stream  fputc __c  ___   define putchar __c  fputc __c  stdout    define getc __stream  fgetc __stream    define getchar   fgetc stdin           stream              Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 56       Functions    int fclose  FILE   stream    int vfprintf  FILE   _ stream  const char    fmt  va_list        int vfprintf P  FILE   stream  const char    fmt  va_list __ap   intfputc  int __c  FILE   stream    int printf  const char    fmt       int printf P  const char     fmt        int vprintf  const char    fmt  va list ap    int sprintf  char    s constchar   fmt       int sprintf P  char  __s  const char x__fmt        int snprintf  char  __s  size_t __n  const char  __fmt        int snprintf_P  char  __s  size_t __n  const char x__fmt        int vsprintf  char  __s  const char   __fmt  va list ap    int vsprintf P  char  __s  const char  __fmt  va_list ap    int vsn
167. LLOC  2  stab 000007d4 00000000 00000000 00000188 2xx2  CONTENTS  READONLY  DEBUGGING  3  stabstr 000006ef 00000000 00000000 0000095   2      0    CONTENTS  READONLY  DEBUGGING  Disassembly of section  text     00000000  lt __vectors gt             22700 rjmp   36   0  26  lt __ctors_end gt    2  85   0 rjmp   266   Oxl0e  lt __bad_interrupt gt   4  84 cO rjmp   264   0x10e  lt __bad_interrupt gt   6  83   0 rjmp   262   Oxl0e  lt __bad_interrupt gt        82 60 rjmp   260   Oxl0e  lt __bad_interrupt gt       81 cO rjmp   258   Oxl0e    bad interrupt    c  80   0 rjmp   256   Oxl0e    bad interrupt    e  7f cO rjmp   254   Oxl0e    bad interrupt    10  25 c0 rjmp   74   Ox5c    vector 8     12            rjmp   250   0  10    lt __bad_interrupt gt              Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen                6 34    simple project 183  14  7     0 rjmp   248   0    0    lt __bad_interrupt gt   16       60 rjmp   246   0  10    lt __bad_interrupt gt   18  7a      rjmp   244   0  10    lt __bad_interrupt gt   lar 79 cU rjmp   242   0  10      bad interrupt    lor 78 60 rjmp   240   0  10      bad interrupt    le  77   0 rjmp  238   0  10      bad interrupt    20  76 cO rjmp   236   Oxl0e    bad interrupt    22  TI OO rjmp   234   0  10      bad interrupt    24  74 cO rjmp    232   0  10      bad interrupt     00000026    ctors end      26  11 24 eor rl  rl   28  1f be out 0x3f  rl 63   2a  cf e5 ldi r28  O0x5F   95   2c    4 eO ldi r29  0x04   4   
168. MEM ADDR  SPM REG    N    r    uint8 t  BOOT LOCK BITS SET   x    r   value               NEON  TESIT X            8 5 2 3  define __boot_page_erase_alternate address        Value           __asm__ __volatile__     movw r30   2 n t    sts   0  Sl An t    spm n t      word Oxffff n t    nop n t      i   _SFR_MEM_ADDR __SPM_REG      r    uint8 t   BOOT PAGE ERASE                       uint16_t address         TESIS    u PP A UEA u BO IAE    8 5 2 4  define __boot_page_erase_extended address        Value           __asm__ __volatile__     movw r30   A3 n t    sts  1   C3 n t    sts  0   2 n t    spm n t    i    SFR MEM ADDR  SPM REG      i    SFR MEM ADDR RAMPZ      r    uint8 t  BOOT PAGE ERASE                 m  uint32 t address    230             BA    GO Vut       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 5 boot h File Reference    218       8 5 2 5  define _ boot_page erase normal address        Value           __asm__ __volatile__     movw r30   2 n t    sts  0   1 n t    spm n t           SFR_MEM_ADDR  __SPM_REG                   E    uint8 t  BOOT_PAGE_ERASE     r    uint16_t  address      30    ya    8 5 2 6  define boot page fill alternate address  data        Value       asm    volatile       movw r0   3 n t    movw r30   2 n t    sts   0  S INXNnNE    spm n t      word Oxffff n t    nop n t    Nele  ZINE      su    1 SFR_MEM_ADDR   SPM_REG       uint8_t  BOOT_PAGE_FILL     uint16 t address             uint16_t data      yo    r30    r31      
169. N 0x01    Bit value that can be passed in flags to dtostre          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 73       6 10 2 2  define DTOSTR PLUS SIGN 0x02    Bit value that can be passed in   1ags to dtostre       6 10 2 3  define DTOSTR_UPPERCASE 0x04    Bit value that can be passed in flags to dtostre       6 10 2 4  define RAND MAX 0x7FFF    Highest number that can be generated by rand       6 10 2 5  define RANDOM MAX 0x7FFFFFFF    Highest number that can be generated by random       6 10 3 Typedef Documentation    6 10 3 1 typedefint    compar fn t const void     const void        Comparision function type for qsort    just for convenience     6 10 4 Function Documentation    6 10 4 1   inline void abort  void     The abort   function causes abnormal program termination to occur  In the limited  AVR environment  execution is effectively halted by entering an infinite loop     6 10 4 2 int abs  int _ p    The abs   function computes the absolute value of the integer i     Note     The abs   and labs   functions are builtins of gcc     6 10 4 3 double atof  const char    __nptr     The atof   function converts the initial portion of the string pointed to by nptr to  double representation     It is equivalent to calling    strtod nptr   char    NULL         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 74       6 10 4 4 int atoi  const char x s   Co
170. NDBY  avr_sleep  145  SLEEP_MODE_IDLE  avr_sleep  145  SLEEP_MODE_PWR_DOWN  avr_sleep  145  SLEEP_MODE_PWR_SAVE  avr_sleep  145  SLEEP_MODE_STANDBY  avr_sleep  145  snprintf  avr_stdio  62  snprintf_P  avr_stdio  62  sprintf  avr_stdio  62  sprintf_P  avr_stdio  62       sqrt   avr_math  36  square   avr_math  36  srand   avr_stdlib  78  srandom   avr_stdlib  78  sscanf   avr_stdio  62  sscanf_P   avr_stdio  63  stderr   avr_stdio  58  stdin   avr_stdio  58  stdint h  240  stdio h  243  stdlib h  245  stdout   avr_stdio  58  strcasecmp   avr_string  85  strcasecmp S  247  strcasecmp_P   avr_pgmspace  131    strcasecmp_P S  247  strcasestr   avr_string  85  strcasestr S  247  strcasestr_P   avr_pgmspace  131  strcat   avr_string  86  strcat S  247  strcat_P   avr_pgmspace  131  strcat_P S  248  strchr   avr_string  86  strchr S  248  strchr_P   avr_pgmspace  131  strchr_P S  248  strchrnul   avr_string  86  strchrnul S  248  strchrnul_P   avr_pgmspace  132  strchrnul P S  248  strcmp   avr_string  86  strcmp S  248  strcmp P   avr pgmspace  132  strcmp P S  248  strcpy   avr string  87  strcpy S  248  strcpy P   avr pgmspace  132  strepy_P S  249  strcspn   avr string  87  strcspn S  249  strcspn P   avr pgmspace  132  strespn_P S  249  string h  249  strlcat   avr string  87  strlcat S  251       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    381       strlcat_P   avr_pgmspace  133  strlcat_ P S  251  strlcpy   avr_string  88  strlcpy S  251  strlcp
171. Numerical representation of the release date     6 21 2 2  define AVR          DATE STRING     AVR LIBC    RELDATE         String literal representation of the release date     6 21 2 3  define        LIBC MAJOR _  AVR_LIBC_MAJOR        Library major version number     6 21 2 4  define AVR        MINOR  QGAVR LIBC MINORG       Library minor version number     6 21 2 5  define               REVISION    AVR_LIBC_REVISION        Library revision number     6 21 2 6  define __        LIBC VERSION  GAVR LIBC VERSION    NUMERIC UL    Numerical representation of the current library version     In the numerical representation  the major number is multiplied by 10000  the minor  number by 100  and all three parts are then added  It is intented to provide a monoton   ically increasing numerical value that can easily be used in numerical checks        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 22  lt avr wdt h gt   Watchdog timer handling 149       6 21 2 7  define __ AVR        VERSION STRING   GAVR           VERSION      String literal representation of the current library version     6 222  lt avr wdt h gt   Watchdog timer handling    6 22 1 Detailed Description     include  lt avr wdt h gt     This header file declares the interface to some inline macros handling the watchdog  timer present in many AVR devices  In order to prevent the watchdog timer configura   tion from being accidentally altered by a crashing application  a special timed sequence  is requir
172. O facilities 200       6 336 Using the standard IO facilities    This project illustrates how to use the standard IO facilities  stdio  provided by this  library  It assumes a basic knowledge of how the stdio subsystem is used in standard C  applications  and concentrates on the differences in this library   s implementation that  mainly result from the differences of the microcontroller environment  compared to a  hosted environment of a standard computer     This demo is meant to supplement the documentation  not to replace it     6 36 1 Hardware setup    The demo is set up in a way so it can be run on the ATmegal6 that ships with the  STK500 development kit  The          port needs to be connected to the RS 232  spare   port by a jumper cable that connects PDO to RxD and PD1 to TxD  The RS 232 channel  is set up as standard input  st din  and standard output  stdout   respectively     In order to have a different device available for a standard error channel  stderr   an  industry standard LCD display with an HD44780 compatible LCD controller has been  chosen  This display needs to be connected to port A of the STK500 in the following  way                                      Port Header Function  AO 1 LCD D4  Al 2 LCD D5  A2 3 LCD D6  A3 4 LCD D7  A4 5 LCD R  W  A5 6 LCDE  A6 7 LCD RS  A7 8 unused  GND 9 GND  VCC 10 Vcc                      Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 336 Using the standard IO facilities 201          Figure 5  Wiring
173. PB_vect OUTPUT_  Compare Match   ATtiny25  ATtiny85  COMPAREIB B  TIMI OVF   SIG   Timer Counter1 ATtiny24  ATtiny44  ATtiny84  ATtiny45   vect OVERFLOWI   Overflow ATtiny25  ATtiny85  TIMERO   SIG  INPUT   ADC Conversion   ATtiny261  ATtiny461  ATtiny861  CAPT vect CAPTUREO Complete  TIMERO   SIG   TimerCounter0 ATmegal68  ATmega48  ATmega88         COMPA_vect OUTPUT_  Compare Match mega640  ATmegal280  ATmegal281   COMPAREOA A ATmega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny2313  ATtiny261  ATtiny461  AT   tiny861      ATOOUSBI62      9005  82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646  TIMERO   SIG   Timer Counter 0   AT90PWM3  AT90PWM2  AT90PWMI   COMPB vect OUTPUT   Compare Match ATmegal68  ATmega48  ATmega88  AT   COMPAREOB    B mega640   ATmegal280  ATmegal281   SIG   ATmega2560  ATmega2561  ATmega324P   OUTPUT   ATmegal64P  ATmega644P  ATmega644   COMPAREO   ATtiny2313  ATtiny261  ATtiny461  AT   B tiny861      AT90USB162      9005  82       9005  1287  AT90USB 1286         9005  647      9005  646          Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    112                                     Vector name Old vector   Description Applicable for device  name  TIMERO   SIG_  Timer Counter0 AT90PWM3  AT90PWM2  AT90PWM 1  COMP A   OUTPUT   Compare Match  vect COMPAREOA    A  SIG    OUTPUT    COMPAREO    A  TIMERO   SIG   Timer Counter0 AT90CAN128  AT90CAN32  AT90CANGA
174. PESO  Vests            _ result              8 33 2 5  define  ELPM word enhanced               Value     __extension__      uint32_t __addr32    uint32_t   addr      uint16_t __result       asm   N    N    out  2   C1  WAYNE M     movw r30   1       n t      elpm   AO  Z     n t      elpm  BO  Z    n t          r    result       r      addre32   N    I    SFR IO ADDR  RAMPZ   N        0   r3  N           result                 8 33 2 6  define__LPM_classic__ addr     Value        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33 pgmspace h File Reference 237           extension_     uintl6 t _ addr16    uintl6 t   addr      uint8 t _ result      asm        Ipm    n t    mov  0          n t     r    result   TZ  244416   Typ        result     rr rr rr ree           8 33 27  define _ LPM_dword_classic__ addr        Value     __extension__    V  uintl6 t __addr16    uintl6 t   addr   N  uint32 t _ result  N    asm   N    N    lpm             mov    0  ro          X   adiw r30  1          X   lpm  VANNES      mov  B0  ro  TO NLY      adiw r30  1                 lpm    n t      mov  CO  ro               N   adiw r30  1  mn      lpm    n t  N   mov  D0  ro              r    result     z   _ addr16  N    1   __addr16       yn N          _ result              8 33 2 8  define _ LPM_dword_enhanced_               Value     __extension__      uintl6 t _ addrl6    uint16_t   addr      uint32 t   result  N    asm   N    N    lpm SAO  Z     n t      lpm  BO  Z     n t 
175. PM  uint32    t  address long      Read a byte from the program space with a 32 bit  far  address     Note     The address is a byte address  The address is in the program space        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pgmspace h gt   Program Space Utilities 128       6 16 2 4 define        read byte near address short    LPM  uintl6    t  address short      Read a byte from the program space with a 16 bit  near  address     Note     The address is a byte address  The address is in the program space     6 16 2 5  define pgm read dword address short  pgm read dword    near address short     Read a double word from the program space with a 16 bit  near  address     Note     The address is a byte address  The address is in the program space     6 16 2 6  define        read dword far address long    ELPM    dword  uint32 t  address long      Read a double word from the program space with a 32 bit  far  address     Note     The address is a byte address  The address is in the program space     6 16 2 7  define        read dword near address short    LPM_   dword  uint16 t  address short      Read a double word from the program space with a 16 bit  near  address     Note     The address is a byte address  The address is in the program space     6 16 2 8  define        read word address short  pgm read word    near address short     Read a word from the program space with a 16 bit  near  address     Note     The address is a byte address  
176. PTR PRIx16    hexadecimal printf format for uintptr t    6 5 2 61  define SCNd16  d     decimal scanf format for int16 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 29       6 5 2 62  define SCNd32         decimal scanf format for int32_t    6 5 2 63  define SCNdFAST16         decimal scanf format for int_fast16_t    6 5 2 64  define SCNdFAST32  Id     decimal scanf format for int_fast32_t    6 5 2 65  define SCNdLEASTI6  d     decimal scanf format for int leastl6 t    6 5 2 66  define SCNdLEAST32         decimal scanf format for int least32 t    6 5 2 67  ftdefine SCNdPTR SCNd16    decimal scanf format for intptr t    6 5 2 68  define SCNi16  i     generic integer scanf format for int16 t    6 5 2 69  define SCNi32  li     generic integer scanf format for int32 t    6 5 2 70  define SCNiIFAST16  i     generic integer scanf format for int_fast16_t    6 5 2 71  define SCNiIFAST32  li     generic integer scanf format for int_fast32_t    6 5 2 72  define SCNILEASTIG  i     generic integer scanf format for int_least16_t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 30       6 5 2 73  define SCNILEAST32  li     generic Integer scanf format for int_least32_t    6 5 2 74  ftdefine SCNIPTR SCNi16    generic Integer scanf format for intptr_t    6 5 2 75  define SCNo16  o     octal scanf format for uint16_t    6 5 2 76  define SCNo32  lo 
177. RGET   attiny84   MCU_TARGET   attiny85   MCU_TARGET   attiny861  OPTIMIZE    02   DEFS     LIBS        You should not have to change anything below here          avr gcc    Override is only needed by avr lib build system     override CFLAGS    g  Wall   OPTIMIZE   mmcu    MCU_TARGET    DEFS   override LDFLAGS  Wl  Map    PRG   map    OBJCOPY   avr objcopy  OBJDUMP   avr objdump    all     PRG  elf lst text eeprom    S PRG   elf  5  OBJ   5          CFLAGS    LDFLAGS       8      LIBS       dependency   demo o  demo c iocompat h    clean   rm  rf x o   PRG  elf   eps   png   pdf x bak  rm  rf x lst   map   EXTRA_CLEAN_FILES    lst   S PRG  lst      lst    elf  S OBJDUMP   h  S   lt   gt          Rules for building the  text rom images  text  hex bin srec   hex                       bin    PRG  bin    srec                            hex    elf                      j  text  j  data  O ihex   lt  560      srec    elf                      j  text  j  data  O srec   lt   6    oe     bin    elf                      j  text  j  data  O binary   lt  50      Rules for building the  eeprom rom images    eeprom  ehex ebin esrec       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project    192       ehex    PRG _eeprom hex            S PRG _eeprom bin                PRG _eeprom srec    eeprom hex    elf   5  OBJCOPY            _eeprom     ur     OBJCOPY             eeprom bin    elf       ur     OBJCOPY            j      echo empty  8 not ge
178. T   Complete mega8  TRANS   SIG_UART_   TRANS  USART_TX_  SIG_  USART  Tx   AT90PWM3  AT90PWM2  AT90PWMI   vect USART_  Complete ATmega8535  ATmegal68  ATmega48         TRANS  mega88  ATtiny2313  SIG_UART_   TRANS  USART_  SIG_  USART Data   AT90PWM3  AT90PWM2  AT90PWMI   UDRE_vect USART_  Register Empty ATmegal6  ATmega32  ATmega323  AT   DATA  SIG_  mega3250  ATmega3290  ATmega3290P   UART_DATA ATmega6450  ATmega6490  ATmega8  AT   mega8535  ATmegal68  ATmega48  AT   mega88  ATtiny2313  USL   SIG_USI_  USI Overflow ATmegal65  ATmegal65P  ATmegal69   OVERFLOW_    OVERFLOW ATmegal69P  ATmega325  ATmega3250   vect ATmega329  ATmega329P  ATmega3290   ATmega3290P  ATmega645  ATmega6450   ATmega649  ATmega6490  ATtiny2313  USI_OVF_  SIG_USI_  USI Overflow ATtiny26  ATtiny24  ATtiny44  ATtiny84   vect OVERFLOW ATtiny45  ATtiny25  ATtiny85  ATtiny261   ATtiny461  ATtiny861  USI_START_  SIG_USI_  USI Start Condi    ATmegal65  ATmegal65P  ATmegal69   vect START tion ATmegal69P  ATmega325  ATmega3250   ATmega329  ATmega329P  ATmega3290   ATmega3290P  ATmega645  ATmega6450   ATmega649  ATmega6490  ATtiny2313   ATtiny45  ATtiny25  ATtiny85  ATtiny261   ATtiny461  ATtiny861  USI STRT_  SIG_USI_  USI Start ATtiny26  vect START          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen                         6 14  lt avr interrupt h gt   Interrupts 120   Vector name Old vector   Description Applicable for device  name   USI_STR_  SIG_USI_  USI START ATtiny24  ATtiny44  ATtiny8
179. T32  30  SCNuPTR  30  SCNx16  30  SCNx32  30  SCNxFASTI16  30  SCNxFAST32  30  SCNxLEASTI16  30  SCNxLEAST32  30  SCNxPTR  30  uint farptr t  31   avr math  acos  33  asin  33  atan  33  atan2  33  ceil  33  copysign  33  cos  33  cosh  33  exp  33          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    367       fabs  34  fdim  34  floor  34  fma  34  fmax  34  fmin  34  fmod  34  frexp  34  hypot  34  INFINITY  32  isfinite  35  isinf  35  isnan  35  Idexp  35  log  35  log10  35  M_PI  32      5      2  32  modf  35          32  pow  36  signbit  36  sin  36  sinh  36  sqrt  36  square  36         36  tanh  36  trunc  36   avr_pgmspace  memchr_P  130  memcmp_P  130  memcpy_P  130  memmem_P  130  memrchr_P  130  PGM_P  126  pgm_read_byte  126  pgm_read_byte_far  126  pgm_read_byte_near  126  pgm_read_dword  127  pgm_read_dword_far  127  pgm_read_dword_near  127  pgm_read_word  127  pgm_read_word_far  127  pgm_read_word_near  128  PGM_VOID_P  128    prog_char  128  prog_int16_t  128  prog_int32_t  128  prog 11164  t  128  prog_int8_t  129  prog_uchar  129  prog uintl6 t  129  prog uint32 t  129  prog  uint64 t  129  prog uint8 t  129  prog void  129  PROGMEM  128  PSTR  128  strcasecmp P  131  strcasestr P  131  strcat P  131  strchr  P  131  strchrnul P  132  strcmp P  132  strcpy  P  132  strcspn P  132  stricat_P  133                  P  133  strlen P  133  strncasecmp_P  133  strncat  P  134  strncmp P  134  strncpy  P  134  strnlen P  135  str
180. TMAX MAX INT64_MAX      define INTMAX_MIN INT64_MIN     define UINTMAX MAX UINT64_MAX    Limits of other integer types       C   implementations should define these macros only when _ STDC LIMIT    MACROS is defined before  lt stdint h gt  is included       define PTRDIFF MAX INTI6 MAX       define PTRDIFF MIN INT16 MIN        define SIG ATOMIC MAX INT8 MAX       define SIG ATOMIC MIN INT8  MIN        define SIZE MAX    CONCAT INT16 MAX  U      Macros for integer constants  C   implementations should define these macros only when _ STDC  CONSTANT    MACROS is defined before  lt stdint h  gt  is included     These definitions are valid for integer constants without suffix and for macros defined  as integer constant without suffix     define INT8_C value    int8 t  value    define UINT8 C value    uint8 0  CONCAT value  U     define INT16 C value  value    define UINT16_C value  _ CONCAT value  U     define INT32_C value  _ CONCAT  value  L     define UINT32_C value  _ CONCAT value  UL     define INT64_C value  _ CONCAT value  LL     define UINT64_C value  _ CONCAT value  ULL    define INTMAX_C value  _ CONCAT value  LL    define UINTMAX_C value  _ CONCAT value  ULL                 Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 44       6 8 2 Define Documentation    6 8 2 1             INT16_C value  value    define    constant of type int16_t    6 8 2 2 fidefine INT16_MAX 0x7fff    largest positive value an int16_t
181. TTR  PURE  char    strrchr  const char x  int           PURE   char    strrev  char       char    strsep  char       const char       size t strspn  const char   s  const char xaccept   ATTR  PURE  char    strstr  const char     const char x  ATTR  PURE   char    strtok_r  char     const char     char         char    strupr  char                                                           Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 57    strlcat S File Reference    252       8 57    8 57 1    8 58    8 58 1    8 59    8 59 1    8 60    8 60 1    8 61    8 61 1    Defines    strlcat S File Reference  Detailed Description  strlcat_P S File Reference  Detailed Description  strlcpy S File Reference  Detailed Description  strlcpy_P S File Reference  Detailed Description   strlen S File Reference    Detailed Description        define src_hi r25      define src_lo r24    8 62    8 62 1    Defines    strlen_P S File Reference    Detailed Description        define src  hi r25      define src_lo r24       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 63 strlwr S File Reference    253       8 63 strlwr S File Reference    8 63 1 Detailed Description    8 64 strncasecmp S File Reference    8 64 1 Detailed Description    8 65 strncasecmp P S File Reference    8 65 1 Detailed Description    8 66 strncat S File Reference  8 66 1 Detailed Description    Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src 
182. The address is in the program space        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pgmspace h gt   Program Space Utilities 129       6 16 2 9  define pgm_read_word_far address_long  __KLPM_word  uint32_   t  address_long         Read a word from the program space with a 32 bit  far  address     Note     The address is a byte address  The address is in the program space     6 16 2 10                     read  word near address short  _LPM_word  uint16_   t   address short      Read a word from the program space with a 16 bit  near  address     Note     The address is a byte address  The address is in the program space     6 16 2 11    define             P const prog void       Used to declare a generic pointer to an object in program space     6 16 2 12  define PROGMEM  ATTR PROGMEM      Attribute to use in order to declare an object being located in flash ROM     6 16 2 13  define PSTR s    const PROGMEM char    s    Used to declare a static pointer to a string in program space   6 16 3 Typedef Documentation   6 16 3 1 prog char    Type of a  char  object located in flash ROM     6 16 3 2 prog intl6 t  Type of an  int16 t  object located in flash ROM     6 16 3 3 prog int32 t  Type of an  int32 t  object located in flash ROM        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pgmspace h gt   Program Space Utilities 130       6 16 3 4 prog int64 t  Type of an  int64 t  object located in flash ROM     Note  
183. The linker will then go through the libraries  in order  to match the undefined references  with function definitions that are found in the libraries  If it finds the function that  matches the call  the linker will then link in the object module in which the function is  located  This part is important  the linker links in THE ENTIRE OBJECT MODULE in  which the function is located  Remember  the linker knows nothing about the functions  internal to an object module  other than symbol names  such as function names   The  smallest unit the linker works with is object modules     When there are no more undefined references  the linker has linked everything and is  done and outputs the final application     9 7 3 How to Design a Library    How the linker behaves is very important in designing a library  Ideally  you want to  design a library where only the functions that are called are the only functions to be  linked into the final application  This helps keep the code size to a minimum  In order  to do this  with the way the linker works  is to only write one function per code module   This will compile to one function per object module  This is usually a very different  way of doing things than writing an application     There are always exceptions to the rule  There are generally two cases where you  would want to have more than one function per object module     The first is when you have very complementary functions that it doesn t make much  sense to split them up  For ex
184. The strupr   function returns a pointer to the converted string  The pointer is the  same as that passed in since the operation is perform in place     6 12  lt avr boot h gt   Bootloader Support Utilities    6 12 1 Detailed Description     include  lt avr io h gt    include  lt avr boot h gt     The macros in this module provide a C language interface to the bootloader support  functionality of certain AVR processors  These macros are designed to work with all  sizes of flash memory     Global interrupts are not automatically disabled for these macros  It is left up to the  programmer to do this  See the code example below  Also see the processor datasheet  for caveats on having global interrupts enabled during writing of the Flash     Note   Not all AVR processors provide bootloader support  See your processor datasheet  to see if it provides bootloader support     Todo    From email with Marek  On smaller devices  all except ATmega64 128   5        REG is in the I O space  accessible with the shorter  in  and  out  instructions    since the boot loader has a limited size  this could be an important optimization        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr boot h gt   Bootloader Support Utilities 94       API Usage Example    The following code shows typical usage of the boot API      include  lt inttypes h gt    include  lt avr interrupt h gt    include  lt avr pgmspace h gt     void boot_program_page  uint32_t page  uint8_t xbuf    
185. To do the equivalent in AVR GCC  do this     void main void  __attribute__  noreturn      void main void        Khan       Note     See the GCC User Manual for more information on Function Attributes     In AVR GCC  a prototype for main   is required so you can declare the function at   tribute to specify that the main   function is of type  noreturn   Then  define main   as  normal  Note that the return type for main   is now void     9 8 7 Locking Registers    The IAR compiler allows a user to lock general registers from r15 and down by using  compiler options and this keyword syntax     _ regvar __no_init volatile unsigned int filteredTimeSinceCommutation  814     This line locks r14 for use only when explicitly referenced in your code thorugh the var  name  filteredTimeSinceCommutation   This means that the compiler cannot dispose  of it at its own will     To do this in AVR         do this     register unsigned char counter asm  r3       Typically  it should be possible to use r2 through r15 that way     Note     Do not reserve r0 or rl as these are used internally by the compiler for a temporary  register and for a zero value    Locking registers is not recommended in AVR GCC as it removes this register  from the control of the compiler  which may make code generation worse  Use at  your own risk     9 9 Frequently Asked Questions  9 91 FAQ Index    1  My program doesn t recognize a variable updated within an interrupt routine       Generated on Mon Oct 29 20 02 34 2007
186. UTPUT_  Compare Match   ATmegal28  ATmega64  ATmega640   COMPAREIC C ATmegal280  ATmegal281  ATmega2560   ATmega2561  AT90USB162      9005  82       9005  1287  AT90USB 1286   AT90USB647  AT90USB646                 SIG_  Timer Counter1 ATtiny261  ATtiny461  ATtiny861  COMPD_vect OUTPUT_  Compare Match  COMPAREOD   D                 SIG_  Timer Counter1     9052333  AT90S4433  ATtiny15  COMP_vect OUTPUT_  Compare Match  COMPAREIA  TIMERI   SIG   Timer Counter1 AT908S2313  ATtiny26  OVFI vect OVERFLOWI Overflow  TIMERI    SIG   Timer Counter1 AT90S2333   AT90S4414  AT90S4433   OVF_vect OVERFLOW 1 Overflow AT90S4434      9058515  419058535                 AT90PWM3  AT90PWM2  AT90PWMI       90      128  AT90CAN32  ATOOCAN64     ATmegal03  ATmegal28  ATmegal6   ATmegal61   ATmegal62  ATmegal63   ATmegal65  ATmegal65P  ATmegal69     ATmegal69P  ATmega32   ATmega323   ATmega325  ATmega3250  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega64   ATmega645   ATmega6450   ATmega649    ATmega6490              8   ATmega8515  ATmega8535  ATmegal68   ATmega48  ATmega88  ATmega640  AT   megal280  ATmegal281  ATmega2560   ATmega2561  ATmega324P  ATmegal64P   ATmega644P  ATmega644            15   ATtiny2313  ATtiny261  ATtiny461         tiny861  AT9OUSB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    115          Vector name    Old vector  name
187. X    Note     If you are planning on using avr gdb  you will probably want to install either  simulavr or avarice since avr gdb needs one of these to run as a a remote target  backend     9 10 9 SimulAVR  SimulAVR also uses the configure system  so to build and install     gunzip  c simulavr   version   tar gz   tar xf         simulavr  lt version gt    mkdir obj avr   cd obj avr      configure   prefix  PREFIX   make   make install    A X X Xr X X XY       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 335       Note     You might want to have already installed avr binutils  avr gcc and avr libc if you  want to have the test programs built in the simulavr source     9 10 10                   Note     These install notes are not applicable to avarice 1 5 or older  You probably don t  want to use anything that old anyways since there have been many improvements  and bug fixes since the 1 5 release     AVaRICE also uses the configure system  so to build and install     gunzip     avarice  lt version gt  tar gz   tar xf    cd avarice  lt version gt    mkdir obj avr   cd obj avr      configure   prefix S  PREFIX   make   make install         X X Xr X dX WH    Note     AVaRICE uses the BFD library for accessing various binary file formats  You  may need to tell the configure script where to find the lib and headers for the link  to work  This is usually done by invoking the configure script like this  Replace    hdr
188. _   COMP_0_vect    SIG_     Analog Com     COMPARATORD parator 0    AT90PWM3  AT90PWM2  AT90PWM1       ANALOG_   COMP_1_vect    SIG_   COMPARATOR    Analog Com       parator 1    AT90PWM3  AT90PWM2  AT90PWM1       ANALOG_   COMP_2_vect    SIG_     Analog Com     COMPARATORE parator 2    AT90PWM3  AT90PWM2  AT90PWM1       ANALOG_   COMP_vect    SIG_   COMPARATOR    Analog Com     parator    AT90CAN128  AT90CAN32  AT90CANGA   ATmegal03   ATmegal28  ATmegal65   ATmegal65P  ATmegal69  ATmegal69P   ATmega325  ATmega3250  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega64   ATmega645  ATmega6450   ATmega649  ATmega6490  ATmegal68   ATmega48  ATmega88  ATmega640   ATmegal280  ATmegal281  AT   mega2560  ATmega2561  ATmega324P   ATmega164P  ATmega644P  AT   mega644  AT90USB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646       ANA_   COMP_vect    SIG_   COMPARATOR    Analog Com     parator    AT90S1200  AT90S2313   AT90S4414  419054433   AT90S8515  419058535 ATmegal6   ATmegal61   ATmegal62  ATmegal63   ATmega32  ATmega323  ATmega8  AT   mega8515  ATmega8535  ATtiny11   ATtiny12  ATtiny13  ATtiny15  ATtiny2313   ATtiny26  ATtiny28  ATtiny24  ATtiny44   ATtiny84  ATtiny45  ATtiny25  ATtiny85   ATtiny261  ATtiny461            861    AT90S2333   AT90S4434        CANIT_vect          SIG_CAN_   INTERRUPTI    CAN Transfer  Complete or       Error           90      128  AT90CAN32  AT90CAN64          Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxyge
189. _CPU 11059200   define BAUD 38400   include  lt util setbaud h gt     This header file requires that on entry values are already defined for F_CPU and BAUD   In addition  the macro BAUD_TOL will define the baud rate tolerance  in percent  that  is acceptable during the calculations  The value of BAUD_TOL will default to 2       This header file defines macros suitable to setup the UART baud rate prescaler registers  of an AVR  All calculations are done using the C preprocessor  Including this header  file causes no other side effects so it is possible to include this file more than once   supposedly  with different values for the BAUD parameter   possibly even within the  same function     Assuming that the requested BAUD is valid for the given F_CPU then the macro  UBRR_VALUE is set to the required prescaler value  Two additional macros are pro   vided for the low and high bytes of the prescaler  respectively  UBRRL_VALUE is set  to the lower byte of the UBRR_VALUE and UBRRH_VALUE is set to the upper byte   An additional macro USE_2X will be defined  Its value is set to 1 if the desired BAUD       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 28  lt util setbaud h gt   Helper macros for baud rate calculations 163       rate within the given tolerance could only be achieved by setting the U2X bit in the  UART configuration  It will be defined to 0 if U2X is not needed     Example usage      include  lt avr io h gt    define F_CPU 4000000    static void   
190. _REG     uint8 t  BV SPMIE     define        spm interrupt disable     SPM REG  amp    uint8_t  _   BV SPMIB      define boot is spm interrupt     SPM  REG  amp   uint8 t  BV SPMIE     define boot        busy     SPM  REG  amp   uint8 t         COMMON ASB     define boot spm busy      SPM  REG  amp   uint8 t  BV SPMEN     fidefine boot spm busy  wait   do   while boot        busy       define _ BOOT PAGE ERASE   BV SPMEN    BV PGERS      define          PAGE WRITE   BV SPMEN    BV PGWRT     Zdefine          PAGE              5             define          RWW ENABLE   BV SPMEN    BV   COMMON    ASRE      define _ BOOT LOCK BITS SET  _BV SPMEN    BV BLBSET     define     boot page fill normal address  data     define     boot page fill alternate address  data     define     boot page fill extended address  data    fdefine boot page erase normal address     define boot page erase alternate address    fdefine boot page erase extended address     define boot page write normal address     define     boot page write alternate address     define __ boot page write extended address    define  boot rww  enable      define __ boot rww  enable alternate     define boot lock bits set lock bits    define boot lock bits set alternate lock bits     define GET LOW FUSE BITS  0x0000     define GET          BITS  0x0001     define GET EXTENDED FUSE BITS  0x0002                                                                       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    
191. _rww_busy isdigit  17  avr_boot  97 isgraph  17  boot_rww_enable islower  17  avr_boot  97 isprint  17  boot_rww_enable_safe ispunct  17  avr_boot  97 isspace  17  boot_spm_busy isupper  17  avr_boot  97 isxdigit  18  boot_spm_busy_wait toascii  18  avr_boot  97 tolower  18  boot_spm_interrupt_disable toupper  18  avr_boot  97 ctype h  220  boot_spm_interrupt_enable  avr_boot  97 delay h  221  BOOTLOADER_SECTION delay_basic h  221  avr_boot  98 Demo projects  171  bsearch g deprecated_items    avr_stdlib  73    calloc  avr_stdlib  73    cbi  169  enable_external_int  169  inb  169  inp  169       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    372       INTERRUPT  170   outb  170             170   sbi  170   timer_enable_int  171  disassembling  181  div   avr_stdlib  73  div_t  211   quot  211   rem  211  DTOSTR_ALWAYS_SIGN   avr_stdlib  71  DTOSTR_PLUS_SIGN   avr_stdlib  71  DTOSTR_UPPERCASE   avr_stdlib  72  dtostre   avr_stdlib  74  dtostrf   avr_stdlib  74    EDOM  avr_errno  19  EEMEM  avr_eeprom  100  eeprom h  222  eeprom_busy_wait  avr_eeprom  100  eeprom_is_ready  avr_eeprom  100  eeprom_read_block  avr_eeprom  100  eeprom_read_byte  avr_eeprom  100  eeprom_read_word  avr_eeprom  101  eeprom_write_block  avr_eeprom  101  eeprom_write_byte  avr_eeprom  101  eeprom_write_word  avr_eeprom  101  EMPTY_INTERRUPT  avr_interrupts  120  enable_external_int    deprecated_items  169  EOF   avr_stdio  56  ERANGE   avr_errno  19  errno h  223  Example 
192. _t strcspn  P  const char xs  PGM_P reject  ATTR_PURE                            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 127       size_t strlcat_P  char            P  size_t    size t strlcpy  P  char     PGM_P  size_t    size_t strlen_P  PGM_P   ATTR  CONST   int strncasecmp_P  const char x  PGM_P  size_t  _ ATTR_PURE  char    strncat_P  char     PGM  P  size_t    int strncmp  P  const char     PGM_P  size_t  _ ATTR_PURE  char    strncpy_P  char                size_t    size_t strnlen P             size_t  _ ATTR CONST   char    strpbrk_P  const char xs  PGM_P accept  ATTR_PURE  PGM_P strrchr_P  PGM_P s  int val  ATTR  CONST   char    strsep_P  char x sp  PGM_P delim    size_t strspn_P  const char   s  PGM P accept  ATTR_PURE  char    strstr P  const char     PGM  P  ATTR PURE   void    memmem  P  const void     size t         VOID P  size t   ATTR    PURE    char    strcasestr P  const char            P            PURE                                  6 16 2 Define Documentation    6 16 2 1  define        P const prog char       Used to declare a variable that is a pointer to a string in program space     6 16 2 2  define        read byte address short         read byte near address    short     Read a byte from the program space with a 16 bit  near  address     Note     The address is a byte address  The address is in the program space     6 16 2 3  define        read byte far address long    EL
193. ables first  from the beginning of the  internal RAM  followed by  bss  The stack is started from the top of internal RAM   growing downwards  The so called  heap  available for the dynamic memory allocator  will be placed beyond the end of  bss  Thus  there s no risk that dynamic memory will  ever collide with the RAM variables  unless there were bugs in the implementation of  the allocator   There is still a risk that the heap and stack could collide if there are large  requirements for either dynamic memory or stack space  The former can even happen  if the allocations aren t all that large but dynamic memory allocations get fragmented  over time such that new requests don t quite fit into the  holes  of previously freed  regions  Large stack space requirements can arise in a C function containing large  and or numerous local variables or when recursively calling function     Note     The pictures shown in this document represent typical situations where the RAM       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 2 Memory Areas and Using malloc   267       locations refer to an ATmega128  The memory addresses used are not displayed    in a linear scale        e SP t RAMEND      __brkval    lt    SP       __malloc_margin      on board RAM external RAM    0x0100  Ox10FF  0x1100   OxFFFF                w               heap start     __heap_start  C          _ bss end    data            bss start  data start    Figure 6  RAM map of a device with internal R
194. ady      Returns     1 if EEPROM is ready for a new read write operation  0 if not     6 13 3 Function Documentation    6 13 3 1 void eeprom_read_block  void   pointer_ram  const void    pointer_   eeprom  size_t n     Read a block of n bytes from EEPROM address pointer_eepromto pointer_   ram  For constant n  lt   256 bytes a library function is used  For block sizes unknown  at compile time or block sizes  gt  256 an inline loop is expanded        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 102       6 13 3 2 uint8 t eeprom read byte  const uint8 t    addr   Read one byte from EEPROM address addr     6 13 3 3  uint16 t eeprom read word  const uint16 t x addr   Read one 16 bit word  little endian  from EEPROM address addr     6 13 3 4 void eeprom write block  const void    pointer ram  void    pointer     eeprom  size t n     Write a block of n bytes to EEPROM address pointer eepromfrom pointer    ram     6 13 3 5 void eeprom write byte  uint8 t x addr  uint8 t value   Write a byte value to EEPROM address addr     6 13 3 6 void eeprom write word  uint16 t x addr  uint16 t value     Write a word value to EEPROM address addr     6 14  lt avr interrupt h gt   Interrupts    6 14 1 Detailed Description  Note     This discussion of interrupts was originally taken from Rich Neswold s document   See Acknowledgments     Introduction to avr libc s interrupt handling It   s nearly impossible to find compil   ers that agree o
195. ainly what you didn t want     6 34 4 Examining the Object File    Now we have a binary file  Can we do anything useful with it  besides put it into the  processor   The GNU Binutils suite is made up of many useful tools for manipulating  object files that get generated  One tool is avr objdump  which takes information  from the object file and displays it in many useful ways  Typing the command by itself  will cause it to list out its options     For instance  to get a feel of the application   s size  the    h option can be used  The  output of this option shows how much space is used in each of the sections  the  stab  and  stabstr sections hold the debugging information and won t make it into the ROM  file      An even more useful option is    S  This option disassembles the binary file and inter   sperses the source code in the output  This method is much better  in my opinion  than  using the    S with the compiler because this listing includes routines from the libraries  and the vector table contents  Also  all the  fix ups  have been satisfied  In other words   the listing generated by this option reflects the actual code that the processor will run       avr objdump  h  5 demo elf  gt  demo lst    Here s the output as saved in the demo  1st file     demo elf  file format elf32 avr  Sections   Idx Name Size VMA LMA File off Algn  0  text 00000114 00000000 00000000 00000074 2xx1  CONTENTS  ALLOC  LOAD  READONLY  CODE  1  bss 00000003 00800060 00000114 00000188 2xx0  A
196. ains why the variable mcucsr that mirrors  the register s value needs to be placed into the  noinit section  because otherwise the  default initialization  which happens after  init3  would blank the value again     As the initialization code is not called using CALL RET instructions but rather con   catenated together  the compiler needs to be instructed to omit the entire function pro   logue and epilogue  This is performed by the naked attribute  So while syntactically   handle mcucsr   is a function to the compiler  the compiler will just emit the in   structions for it without setting up any stack frame  and not even a RET instruction at  the end     Function ioinit    centralizes all hardware setup  The very last part of that function  demonstrates the use of the EEPROM variable ee  pwm to obtain an EEPROM address  that can in turn be applied as an argument to eeprom read word       The following functions handle UART character and string output   UART input  is handled by an ISR   There are two string output functions  printstr   and  printstr p    The latter function fetches the string from program memory  Both  functions translate a newline character into a carriage return newline sequence  so a  simple Nn can be used in the source code     The function set pwm   propagates the new PWM value to the PWM  performing  range checking  When the value has been changed  the new percentage will be an   nounced on the serial link  The current value is mirrored in the variable
197. al281  ATmega2560  ATmega2561   ATmega324P  ATmegal64P  ATmega644P   ATmega644            13            24  AT   tiny44  ATtiny84  ATtiny45  ATtiny25   ATtiny85  AT9OUSB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646       PCINTI  vect    SIG PIN    CHANGEI    Pin Change Inter   rupt Request 1    ATmegal62  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega325   ATmega3250  ATmega329  ATmega329P   ATmega3290  ATmega3290P  ATmega406   ATmega645  ATmega6450  ATmega649   ATmega6490   ATmegal68   ATmega48   ATmega88   ATmega640   ATmegal280   ATmegal281  ATmega2560  ATmega2561   ATmega324P  ATmegal64P  ATmega644P   ATmega644  ATtiny24  ATtiny44  ATtiny84       9005   162  AT90USB82       PCINT2_vect          SIG_PIN_   CHANGE2       Pin Change Inter   rupt Request 2       ATmega3250  ATmega3290  ATmega3290P   ATmega6450  ATmega6490  ATmegal68   ATmega48  ATmega88  ATmega640  AT   mega1280  ATmegal281  ATmega2560  AT   mega2561  ATmega324P  ATmega164P  AT   mega644P  ATmega644          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       6 14  lt avr interrupt h gt   Interrupts    110                                                                Vector name Old vector   Description Applicable for device  name  PCINT3_vect SIG_PIN_  Pin Change Inter    ATmega3250  ATmega3290  ATmega3290P   CHANGE3 rupt Request 3 ATmega6450  ATmega6490  ATmega324P   ATmega164P  ATmega644P  ATmega644  PCINT_vect SIG_PIN_  ATtiny2313  ATtiny261  ATtiny461  AT
198. ample  malloc   and free    If someone is going to use  malloc    they will very likely be using free    or at least should be using free     In this  case  it makes more sense to aggregate those two functions in the same object module     The second case is when you want to have an Interrupt Service Routine  ISR  in your  library that you want to link in  The problem in this case is that the linker looks for  unresolved references and tries to resolve them with code in libraries  A reference is  the same as a function call  But with ISRs  there is no function call to initiate the ISR   The ISR is placed in the Interrupt Vector Table  IVT   hence no call  no reference   and no linking in of the ISR  In order to do this  you have to trick the linker in a way   Aggregate the ISR  with another function in the same object module  but have the other  function be something that is required for the user to call in order to use the ISR  like  perhaps an initialization function for the subsystem  or perhaps a function that enables  the ISR in the first place     9 7 4 Creating a Library    The librarian program is called ar  for  archiver   and is found in the GNU Binutils  project  This program will have been built for the AVR target and will therefore be  named avr ar        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 7 How to Build a Library 300       The job of the librarian program is simple  aggregate a list of object modules into  a single library  archiv
199. and how    Makefile can be configured     6 34 1        Project    This project will use the pulse width modulator  PWM  to ramp an LED on and off every  two seconds  An AT90S2313 processor will be used as the controller  The circuit for  this demonstration is shown in the schematic diagram  If you have a development kit   you should be able to use it  rather than build the circuit  for this project     Note     Meanwhile  the AT90S2313 became obsolete  Either use its successor  the  pin   compatible  ATtiny2313 for the project  or perhaps the ATmega8 or one of its  successors  ATmega48 88 168  which have become quite popular since the origi   nal demo project had been established  For all these more modern devices  it is no  longer necessary to use an external crystal for clocking as they ship with the inter   nal 1 MHz oscillator enabled  so       C2  and   1 can be omitted  Normally  for  this experiment  the external circuitry on  RESET        C3         be omitted as well   leaving only the AVR  the LED  the bypass capacitor C4  and perhaps R2  For the  ATmega8 48 88 168  use PB1  pin 15 at the DIP 28 package  to connect the LED  to  Additionally  this demo has been ported to many different other AVRs  The lo   cation of the respective OC pin varies between different AVRs  and it is mandated  by the AVR hardware        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 178                                             R1  SCK          1
200. and returns the quotient and re   mainder in a structure named 1div t that contains two long integer members named  quot and rem        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 77       6 10 4 16 char           long int __val  char x __s  int radix   Convert a long integer to a string     The function Itoa   converts the long integer value from va1 into an ASCII represen   tation that will be stored under s  The caller is responsible for providing sufficient  storage in s     Note     The minimal size of the buffer s depends on the choice of radix  For example   if the radix is 2  binary   you need to supply a buffer with a minimal length of 8    sizeof  long int    1 characters  i e  one character for each bit plus one for the  string terminator  Using a larger radix will require a smaller minimal buffer size     Warning     If the buffer is too small  you risk a buffer overflow     Conversion is done using the radix as base  which may be a number between 2   binary conversion  and up to 36  If radix is greater than 10  the next digit after   9  will be the letter  a      If radix is 10 and val is negative  a minus sign will be prepended     The ltoa   function returns the pointer passed as s     6 10 4 17 void   malloc  size t size     The malloc   function allocates size bytes of memory  If malloc   fails  a NULL  pointer is returned     Note that malloc   does not initialize the returned memory to zero bytes
201. ange of  possible values  Specifically  the enum type will be equivalent to the smallest integer  type which has enough room        fpack struct    Pack all structure members together without holes     9 11 2 Options for the assembler avr as  9 11 2 1 Machine specific assembler options    e    mmcu architecture  e  mncu MCU name  avr as understands the same    mmcu  options as avr gcc  By default  avr2 is assumed     but this can be altered by using the appropriate  arch pseudo instruction inside the  assembler source file     e    mmall opcodes    Turns off opcode checking for the actual MCU type  and allows any possible AVR  opcode to be assembled     e  mno skip bug    Don   t emit a warning when trying to skip    2 word instruction with a  CPSE SBIC SBIS SBRC SBRS instruction  Early AVR devices suffered from a  hardware bug where these instructions could not be properly skipped        e                        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 352       For RIMP  RCALL instructions  don t allow the target address to wrap around for de   vices that have more than 8 KB of memory        gstabs    Generate  stabs debugging symbols for assembler source lines  This enables avr gdb  to trace through assembler source files  This option must not be used when assembling  sources that have been generated by the C compiler  these files already contain the  appropriate line number information from the C source files         a cdhI
202. ar operations                                                                                                        Mnemonic Constraints Mnemonic Constraints  adc rr add rr  adiw             rr  andi      asr r   bclr I bld rl  brbc Llabel brbs Llabel  bset I bst rl   cbi LI cbr d l  com r cp Lr   cpc LI cpi                LI dec r  elpm tz eor rr   in rl inc r   ld re ldd rb   ldi d M 146 r label  lpm 52 Isl r   Isr r mov rr  movw rr mul rr  neg r or Lr   ori      out Lr  pop r push r   rol r ror r   sbc rr sbci       sbi LI sbic LI  sbiw      sbr       sbrc rl sbrs rl   ser d st e r   std b r sts label r  sub rr subi       swap r                Constraint characters may be prepended by a single constraint modifier  Contraints  without a modifier specify read only operands  Modifiers are                       Modifier Specifies     Write only operand  usually used for all  output operands      Read write operand  not supported by  inline assembler     amp  Register should be used for output only             Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 292       Output operands must be write only and the C expression result must be      lvalue   which means that the operands must be valid on the left side of assignments  Note   that the compiler will not check if the operands are of reasonable type for the kind of  operation used in the assembler instructions     Input operands are  you guessed it  read only  But what if you 
203. aracters inside the line buffer  the input loop will be entered  Charac   ters will be read from the UART  and processed accordingly  If the UART signalled a  framing error  FE bit set   typically caused by the terminal sending a line break con   dition  start condition held much longer than one character period   the function will  return an end of file condition using _FDEV_EOF  If there was a data overrun condi   tion on input  DOR bit set   an error condition will be returned as __FDEV_ERR                             Line editing characters are handled inside the loop  potentially modifying the buffer  status  If characters are attempted to be entered beyond the size of the line buffer  their  reception is refused  and a Na character is sent to the terminal  If a Vr or  n character is  seen  the variable rxp  receive pointer  is set to the beginning of the buffer  the loop is  left  and the first character of the buffer will be returned to the application   If no other  characters have been entered  this will just be the newline character  and the buffer is  marked as being exhausted immediately again      6 36 4 The source code    The source code is installed under       Sprefix share doc avr libc examples stdiodemo      where  prefix is a configuration option  For Unix systems  it is usually set to either                usr local     6 37 Example using the two wire interface  TWI     Some newer devices of the ATmega series contain builtin support for interfacing the  mi
204. arately if interrupts for this device are desired  While some devices  maintain their interrupt enable bit inside the device   s register set  external and timer  interrupts have system wide configuration registers     Example        Enable timer 1 overflow interrupts   timer_enable_int  _BV TOIE1           Do some work          Disable all timer interrupts   timer_enable_int  0      Note     Be careful when you use these functions  If you already have a different interrupt  enabled  you could inadvertantly disable it by enabling another intterupt     e static  inline void timer enable int  unsigned char ints       define enable external int mask   __EICR   mask       define INTERRUPT signame         define _ INTR  ATTRS used    Obsolete IO macros    Back in a time when AVR GCC and avr libc could not handle IO port access in the di   rect assignment form as they are handled now  all IO port access had to be done through       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 30  lt compat deprecated h gt   Deprecated items 170       specific macros that eventually resulted in inline assembly instructions performing the  desired action     These macros became obsolete  as reading and writing IO ports can be done by simply  using the IO port name in an expression  and all bit manipulation  including those on  IO ports  can be done using generic C bit manipulation operators     The macros in this group simulate the historical behaviour  While they are supposed t
205. as Rx s 230  memcpy RS File Reference 2e cmm em 255  231  8 26 1 Detailed Description            m o RR 231  memmem S File Reference  2 2  2     2 2         231  8 27 1 Detailed Description                  oo 231  memmeorve S File REIEFENGE   zm o o Rx x RR 231  8 28 1 Detailed Description  2                      231             File Referente 222222222294 A RU RORORA 232  8 29 1 Detaled Description       44 es s es o RR cx RR 232  memrchr ES File Reference 2                      232  5 30 1 Detaled                      222   22   222 2        232  memset  File Reference     o os ee om 4    232  8 21 1 Detaled Description 22222222522 eS ee be eee as 232       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS viii       8 32    8 33    8 34    8 40    8 41    8 42    8 43    8 44    8 45    8 46    parity b File Referenc     i 22    oea e RR ee Ra 232   321 Detaled DescHpEom   usos m s      Sa EUR X ER SUN 232  pemspace h File Reference   oso o ewe Bed        232  5 33 1 Detailed Description luo o s w RU w wo a 232  8 33 2 Define Documentation                       234  powerh Pile Reference s eo s mo      e one o S EO S Row oe x 239  8 34 1 Detaled DesschpHon    se cse    9X 9x RR 239  8 34 2 Define Documentation                       239  seibaud h File Ci 2 22 e 240  8 35 1 Detaled Description      2 c o  o ba S    240  setmp h File Reference    ou s s v oom 22 2  2 7  240  8 36 1 Detailed Description osa e oc sap eos sp h s s 240  sleap h File Refe
206. avr libc Reference Manual  1 5 1 20071029    Generated by Doxygen 1 5 2    Mon Oct 29 20 02 34 2007    CONTENTS i       Contents  1 AVR Libe 2  l l Introduction    ek A ro o n m m Re n o E a 2  1 2 General information about this library                   2  12 supported Devices 225222055524               OW RR Us 3  LA  avrebbe LICENSE 222525225252 oe RR XU s 7  2 avr libc Module Index 9  21 svr hbeMaodule   202       2      2   225   4      4 9  3 avr ibc Data Structure Index 10  21 ayr Hbe Data Structures     lt  saa s k Rx oem t Sono Rs 10  4             File Index 11   1              File List  co to loeo oom om e ee eS 11  5 avr libc Page Index 14  51 avr libe Related             2  2                      14  6 avr libc Module Documentation 15  61  lt              gt   Allocate space in the stack                  15  6 1 1 Detailed Description       e s 4 2 2 whee xS        15  6 1 2 Function Documentation 22 22 2222    oo s 15  6 2  lt asserth gt   Diagnostics o oe 0    o RES 16  6 21 Detailed Description 2                      16  6 2 2   Define Documentation  lt   lt r ee   a so derradan 16  6 3         Character Operations 222 2   2             17  6 3 1 Detailed Description                        17  6 3 2 Function Documentation       secos v s s s ks 17  64 Lemob SmE oepa danre        5 ERR RUE Q 19  6 4 44 Detailed Description                        19  64 2 Define Documentation                       20  6 5  lt inttypes h gt   Integer Type conversions            
207. avr5 atmega406 __AVR_ATmega406__  avr5 atmega64 __AVR_ATmega64__  avr5 atmega640   AVR_ATmega640__  avr5 atmega644   AVR ATmega644    avr5 atmega644p __AVR_ATmega644P__  avr5 atmega645 __AVR_ATmega645__  avr5 atmega6450   AVR ATmega6450    avr5 atmega649   AVR  ATmega649    avr5 atmega6490   _ AVR ATmega6490    avr5 at94k AVR_AT94K   avr6 atmega2560   _ AVR ATmega2560    avr6 atmega2561 __AVR_ATmega2561__                 1   avr25  architecture is new in GCC 4 2          morder1        morder2    Change the order of register assignment  The default is    124  r25  r18  r19  120  r21  r22  r23  r30  r31  r26  r27  128  129  r17  r16  r15  r14  r13   r12  r11  r10  r9  r8  r7  r6  r5  r4  r3  12  r0  r1    Order 1 uses    r18  r19  120  r21  122  123  r24  r25  r30  r31  r26  r27  128  129  r17  r16  r15  r14  r13   r12  r11  r10  r9  r8  r7  r6  r5  r4  r3  12  r0  r1    Order 2 uses    125  r24  123  122  121  r20  r19  r18  r30  r31  r26  r27  128  129  r17  r16  r15  r14  r13   r12  r11  r10  r9  r8  r7  r6  r5  r4  r3  r2  r1  rO    e    mint8    Assume int to be an 8 bit integer  Note that this is not really supported by  avr libc  so it should normally not be used  The default is to use 16 bit integers     e  mno interrupts    Generates code that changes the stack pointer without disabling interrupts  Normally   the state of the status register SREG is saved in a temporary register  interrupts are  disabled while changing the stack pointer  and SREG is restored          
208. bits_get address     define boot page fill address  data      boot page fill normal address  data    define boot page erase address  boot page erase normal address    define boot page write address  boot page write normal address    define boot  rww               boot rww  enable      define boot  lock bits set lock bits  boot lock bits set lock bits    define boot page  fill safe address  data     define boot page erase safe address     define boot page write safe address     define boot  rww  enable safe      define boot  lock bits set safe lock bits                    6 12 2 Define Documentation    6 12 2 1  define boot is spm interrupt    SPM REG  amp    uint8 t     BV SPMIE      Check if the SPM interrupt is enabled     6 12 2 2  define boot lock bits set lock bits  boot lock bits set lock bits        Set the bootloader lock bits   Parameters     lock bits A mask of which Boot Loader Lock Bits to set     Note     In this context  a  set bit    will be written to a zero value  Note also that only BLBxx  bits can be programmed by this command     For example  to disallow the SPM instruction from writing to the Boot Loader memory  section of flash  you would use this macro as such     boot lock bits set   BV  BLB11          Note     Like any lock bits  the Boot Loader Lock Bits  once set  cannot be cleared again  except by a chip erase which will in turn also erase the boot loader itself        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr bo
209. brary are written immediately after a    flag  So  for a libfoo a library   1foo needs to be provided   This will make the linker  search the library in a path known to the system     An alternative would be to specify the full path to the 1ibm a file at the same place  on the command line  i  e  affer all the object files          However  since this re   quires knowledge of where the build system will exactly find those library files  this is  deprecated for system libraries     Back to FAQ Index        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 308       9 9 4 How to permanently bind a variable to a register   This can be done with    register unsigned char counter asm  r3       Typically  it should be possible to use r2 through r15 that way   See C Names Used in Assembler Code for more details     Back to FAQ Index     9 9 5 How to modify MCUCR or WDTCR early     The method of early initialization  MCUCR  WDTCR or anything else  is different  and  more flexible  in the current version  Basically  write a small assembler file which  looks like this        begin xram S   include  lt avr io h gt      Section  initl  ax   progbits    idi r16  BV SRE    _BV SRW   out _SFR_IO_ADDR MCUCR    r16       end xram S    Assemble it  link the resulting xram  o with other files in your program  and this piece  of code will be inserted in initialization code  which is run right after reset  See the  linker script for comments about the
210. c by Doxygen    6 11  lt string h gt   Strings 82       6 10 5 2 charx __malloc_heap_start    malloc    tunable     6 10 5 3 size t  malloc margin    malloc   tunable    6 11  lt string h gt   Strings   6 11 1 Detailed Description   include  lt string h gt     The string functions perform string operations on NULL terminated strings     Note     If the strings you are working on resident in program space  flash   you will need to  use the string functions described in  lt avr pgmspace h gt   Program Space Utilities     Defines        define _FFS x     Functions    int ffs  int   attribute    const      int  51  long   attribute    const      int ffsll  long long  attribute    const     void    memccpy  void     const void     int  size t    void    memchr  const void     int  size t           PURE   int memcmp  const void     const void     size t  ATTR_PURE  void    memcpy  void     const void     size_t    void    memmem  const void     size t  const void     size_t           PURE  void    memmove  void     const void     size  t    void    memrchr  const void     int  size_t           PURE   void    memset  void     int  size t    int strcasecmp  const char     const char x  ATTR_PURE   char    strcasestr  const char     const char x  ATTR  PURE  char   strcat  char    const char      char    strchr  const char     int           PURE   char    strchrnul  const char     int           PURE                               Generated on Mon Oct 29 20 02 34 2007 for avr libc by Do
211. ce  Detailed Description  strupr S File Reference  Detailed Description   twi h File Reference    Detailed Description       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen      define         TWIH 1       8 87 twi h File Reference 259       TWSR values   Mnemonics    TW  MT  xxx   master transmitter  TW MR xxx   master receiver  TW  ST  xxx   slave transmitter    TW SR xxx   slave receiver     define TW START 0x08    define TW REP  START 0x10    define TW MT      ACK 0x18    define TW MT SLA NACK 0x20    define TW MT          ACK 0x28    define TW MT DATA NACK 0x30    define TW MT ARB LOST 0x38   fdefine TW MR ARB LOST 0x38   fdefine TW MR SLA ACK 0x40   fdefine TW MR SLA NACK 0x48    define TW MR DATA ACK 0x50    define TW MR DATA NACK 0x58   fdefine TW ST SLA        0xA8    define TW ST ARB LOST SLA ACK OxBO   define TW ST                 0xB8   fdefine TW ST DATA NACK 0xCO    define TW ST LAST DATA 0xC8    define TW SR  SLA ACK 0x60    define TW SR        LOST SLA ACK 0x68   define TW SR  GCALL         0x70   fdefine TW SR         LOST GCALL         0x78  fdefine TW SR  DATA ACK 0x80    define TW SR  DATA  NACK 0x88    define TW SR GCALL DATA ACK 0x90  fdefine TW SR  GCALL DATA          0x98   define TW SR  STOP OxAO    define TW NO INFO OxF8    define TW BUS ERROR 0x00    define TW STATUS     5      define TW STATUS  TWSR  amp  TW STATUS MASK                    R  W bit in SLA R W address field         define TW READ 1      define TW_WRITE 0       Generated
212. ce compiler  warnings  if they are used in modules  which are compiled in strict ANSI mode  To  avoid that  you can write     asm     instead of asm and volatile instead of  volatile  These are equivalent aliases        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 296       Another problem with reused macros arises if you are using labels       such  cases you may make use of the special pattern    which is replaced by a unique  number on each asm statement         following code had been taken from  avr include iomacros h      define loop_until_bit_is_clear port bit  N  __asm__ _ volatile     N   L_       sbic  0   1    n t  N   rjmp L     N     no outputs x  N   I    SFR IO ADDR port      I   bit     When used for the first time       may be translated to     1404  the next usage might  create     1405 or whatever  In any case  the labels became unique too     Another option is to use Unix assembler style numeric labels  They are explained in  How do I trace an assembler file in avr gdb   The above example would then look like      define loop until bit is clear port bit     asm   volatile       1     sbic  0   1    n t    rime lb      no outputs x    I    SFR IO ADDR port      I   bit     9 6 6 C Stub Functions    Macro definitions will include the same assembler code whenever they are referenced   This may not be acceptable for larger routines  In this case you may define a C stub  function  containing nothing other than y
213. ce is broken and never responds to a selection  e  g   since it is no longer present at all   this will cause an infinite loop  Thus the maximal  number of iterations made until the device is declared to be not responding at all  and  an error is returned  will be limited to MAX_ITER     Note  12     This is called master receiver mode  the bus master still supplies the SCL clock  but the  device slave drives the SDA line with the appropriate data  After 8 data bits  the master  responds with an ACK bit  SDA driven low  in order to request another data transfer  from the slave  or it can leave the SDA line high  NACK   indicating to the slave that  it is going to stop the transfer now  Assertion of ACK is handled by setting the TWEA  bit in TWCR when starting the current transfer     Note  13     The control word sent out in order to initiate the transfer of the next data packet is  initially set up to assert the TWEA bit  During the last loop iteration  TWEA is de   asserted so the client will get informed that no further transfer is desired     Note  14        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    7 avr libc Data Structure Documentation 212       Except in the case of lost arbitration  all bus transactions must properly be terminated  by the master initiating a stop condition     Note  15     Writing to the EEPROM device is simpler than reading  since only a master transmitter  mode transfer is needed  Note that the first packet after the SLA W se
214. chr   function scans the first len bytes of the memory area pointed to by src  for the character val  The first byte to match val  interpreted as an unsigned character   stops the operation     Returns     The memchr   function returns a pointer to the matching byte or NULL if the  character does not occur in the given memory area        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 85       6 11 3 6 int memcmp  const void    57  const void    52  size_t len    Compare memory areas           memcmp   function compares the first len bytes of the memory areas sl and 52    The comparision is performed using unsigned char operations    Returns   The memcmp   function returns an integer less than  equal to  or greater than zero  if the first len bytes of s1 is found  respectively  to be less than  to match  or be  greater than the first len bytes of s2    Note   Be sure to store the result in a 16 bit variable since you may get incorrect results if  you use an unsigned char or char due to truncation    Warning     This function is not  mint8 compatible  although if you only care about testing for  equality  this function should be safe to use     6 11 3 7 void    memcpy  void    dest  const void    src  size_t len    Copy a memory area    The memcpy   function copies len bytes from memory area src to memory area dest   The memory areas may not overlap  Use memmove   if the memory areas do overlap   Returns     The memcpy   function
215. const      Zdefine   ATTR PROGMEM      attribute    progmem      define _          PURE attribute    pure       define PROGMEM          PROGMEM    define PSTR s    const PROGMEM char    s      define _ LPM classic               define _ LPM_enhanced_  addr              Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33    pgmspace h File Reference 233        define _ LPM_word_classic__ addr     define _ LPM  word enhanced   addr    define       dword classic  addr     define _ LPM _ dword enhanced               define __LPM addr  LPM   classic  addr     define _ LPM  word addr   LPM word classic  addr     define _ LPM_dword addr  _ LPM  dword classic               define          read byte near address short  LPM  uint16 t  address short                         define pgm_read_word_near address_short    LPM  word  uint16    t  address short     define pgm_read_dword_near address_short    LPM  dword  uint16      t   address  short      define _ ELPM classic  addr     define  ELPM enhanced   addr     define _ ELPM word classic               define _ ELPM word enhanced   addr     define _ ELPM dword classic  addr    define ELPM dword enhanced               define  ELPM addr   ELPM   classic  addr    define ELPM_word addr   ELPM word classic  addr   define ELPM_dword addr  _ ELPM dword classic   addr    define          read  byte far address long  _ ELPM  uint32 t  address long                                  define pgm_read_word_far address_long  __ELPM_word 
216. created with no prologue or epilogue code  The user code is responsible for  preservation of the machine state including the SREG register  as well as placing a  reti   at the end of the interrupt routine     Use this attribute in the attributes parameter of the ISR macro     6 14 2 9  define ISR NOBLOCK      include  lt avr interrupt h gt     ISR runs with global interrupts initially enabled  The interrupt enable flag is activated  by the compiler as early as possible within the ISR to ensure minimal processing delay  for nested interrupts     This may be used to create nested ISRs  however care should be taken to avoid stack  overflows  or to avoid infinitely entering the ISR for those cases where the AVR hard   ware does not clear the respective interrupt flag before entering the ISR     Use this attribute in the attributes parameter of the ISR macro     6 14 2 10  define reti       include  lt avr interrupt h gt     Returns from an interrupt routine  enabling global interrupts  This should be the last  command executed before leaving an ISR defined with the ISR_NAKED attribute     This macro actually compiles into a single line of assembly  so there is no function call  overhead     6 14 2 11  define sei       include  lt avr interrupt h gt     Enables interrupts by setting the global interrupt mask  This function actually compiles  into a single line of assembly  so there is no function call overhead     6 14 2 12  define SIGNAL vector      include  lt avr interrupt h gt
217. crocontroller to a two wire bus  called TWI  This is essentially the same called I2C  by Philips  but that term is avoided in Atmel   s documentation due to patenting issues     For the original Philips documentation  see    http   www semiconductors philips com buses i2c index html    6 37 1 Introduction into TWI    The two wire interface consists of two signal lines named SDA  serial data  and SCL   serial clock   plus a ground line  of course   All devices participating in the bus are  connected together  using open drain driver circuitry  so the wires must be terminated       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 37 Example using the two wire interface  TWD 208       using appropriate pullup resistors         pullups must be small enough to recharge  the line capacity in short enough time compared to the desired maximal clock fre   quency  yet large enough so all drivers will not be overloaded  There are formulas in  the datasheet that help selecting the pullups     Devices can either act as a master to the bus  i       they initiate a transfer        as     slave  they only act when being called by a master   The bus is multi master capable   and a particular device implementation can act as either master or slave at different  times  Devices are addressed using a 7 bit address  coordinated by Philips  transfered  as the first byte after the so called start condition  The LSB of that byte is R  W  i  e   it determines whether the request to t
218. d    9 11 3 1 Selected linker options While there are no machine specific options for  avr ld  a number of the standard options might be of interest to AVR users           1            Locate the archive library named libname a  and use it to resolve currently  unresolved symbols from it  The library is searched along a path that con   sists of builtin pathname entries that have been specified at compile time  e  g    usr local avr lib on Unix systems   possibly extended by pathname entries  as specified by  L options  that must precede the  1 options on the command line         Lpath  Additional location to look for archive libraries requested by  1 options       defsym symbol expr  Define a global symbol symbol using expr as the value         Print    linker        to stdout       Map mapfile  Print a linker map to mapfile    c   GOper    Output a cross reference table to the map file  in case         is also present   or to  stdout         section start sectionname org    Start section sectionname at absolute address org        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 354          Tbss org       Tdata org     Ttext org    Start the bss  data  or text section at org  respectively           T scriptfile    Use scriptfile as the linker script  replacing the default linker script De   fault linker scripts are stored in    system specific location  e  g  under   usr local avr lib ldscripts on Unix systems   and consist of the AVR
219. dding 0x800000  the to real SRAM address so that the linker knows that the address is in the SRAM  memory space  Thus  if you want the  data section to start at 0x1100  pass 0x801100  at the address to the linker   offset explained     Note     When using malloc    in the application  which could even happen inside library  calls   additional adjustments are required        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 3 Memory Sections 272       9 3 3             5 Section    Uninitialized global or static variables end up      the  bss section     9 3 4         eeprom Section    This is where eeprom variables are stored     9 3 5         noinit Section    This sections is a part of the  bss section  What makes the  noinit section special is that  variables which are defined as such     int foo __attribute__   section    noinit         will not be initialized to zero during startup as would normal  bss data     Only uninitialized variables can be placed in the  noinit section  Thus  the following  code will cause avr gcc to issue an error     int bar __attribute__   section    noinit       Oxaa     It is possible to tell the linker explicitly where to place the  noinit section by adding   W1  section start  noinit 0x802000 to the avr gcc command line  at the linking stage  For example  suppose you wish to place the  noinit section at  SRAM address 0x2000           5 avr gcc      Wl   section start  noinit 0x802000    Note     Because of the Harvard archi
220. de   export LDFLAGS   L      libusb win32 device bin  libusb_version lib gcc         Configure      configure N    prefix  installdir      datadir  installdir N    sysconfdir  installdir bin N    enable doc N    disable versioned doc N  2 gt  amp 1   tee Spackage configure log        Make    make  k all install 2 gt  amp 1   tee Spackage make log        Convert line endings in avrdude config file to Windows line endings         Delete backup copy of avrdude config file in install directory if exists        Insight GDB        Open source code pacakge and patch as necessary       Configure and build in a directory outside of the source code tree       Set PATH  in order         MikTex executables gt        usr local bin       usr bin       bin       mingw bin      c  cygwin bin       lt install directory  gt  bin       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 343         Configure    CFLAGS  D_ USF_MINGW_ACCESS N   LDFLAGS   static         Sarchivedir configure N    prefix  installdir      target avr N    with gmp  usr local N    with mpfr  usr local N    enable doc N  2 gt  amp 1   tee insight configure log        Make    make all install 2 gt  amp 1   tee Spackage make log      SRecord        Open source code package       Configure and build at the top of the source code tree       Set PATH  in order          MikTex executables gt        usr local bin       usr bin       bin       mingw bin      c  cygwi
221. der to not  corrupt the ongoing transfer from the active master  In this example  upon detecting a  lost arbitration condition  the entire transfer is going to be restarted  This will cause a  new start condition to be initiated  which will normally be delayed until the currently  active master has released the bus        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 37 Example using the two wire interface  TWI  211       Note  10     Next  the device slave is going to be reselected  using a so called repeated start con   dition which is meant to guarantee that the bus arbitration will remain at the current  master  using the same slave address  SLA   but this time with read intent  R    W bit  set to 1  in order to request the device slave to start transfering data from the slave to  the master in the next packet     Note  11     If the EEPROM device is still busy writing one or more cells after a previous write  request  it will simply leave its bus interface drivers at high impedance  and does not  respond to a selection in any way at all  The master selecting the device will see the  high level at SDA after transfering the SLA R W packet as a NACK to its selection  request  Thus  the select process is simply started over  effectively causing a repeated  start condition   until the device will eventually respond  This polling procedure is  recommended in the 24Cxx datasheet in order to minimize the busy wait time when  writing  Note that in case a devi
222. displays  This is  where the second parameter can be used  the reference to the stream itself  instead of  keeping the state Inside a private variable of the function  it can be kept inside a private  object that is attached to the stream itself  A reference to that private obJect can be at   tached to the stream  e g  inside the function 1cd  init    that then also needs to be  passed a reference to the stream  using fdev_set_udata                   be accessed  inside 1cd_putchar    using fdev_get_udata       6 36 3 7 uart h Public interface definition for the RS 232 UART driver  much like  in Icd h except there is now also a character input function available     As      RS 232 input is line buffered in this example  the macro RX_BUF SIZE deter   mines the size of that buffer        6 36 3 8 uart c This implements an stdio compatible RS 232 driver using       AVR   s standard UART  or USART in asynchronous operation mode   Both  char   acter output as well as character input operations are implemented  Character output  takes care of converting the internal newline  n into its external representation carriage  return line feed    r n      Character input is organized as a line buffered operation that allows to minimally edit  the current line until it is  sent  to the application when either a carriage return   r   or newline   n  character is received from the terminal  The line editing functions  implemented are         b  back space  or N1 7 7  delete  deletes the previ
223. dout are connected to a stream that  will perform UART IO  while stderr is arranged to output its data to the LCD text  display     Finally  a main loop follows that accepts simple  commands  entered via the RS 232  connection  and performs a few simple actions based on the commands     First  a prompt is sent out using printf P     which takes a program space string    The string is read into an internal buffer as one line of input  using fgets     While it  would be also possible to use get s     which implicitly reads from stdin   gets     has no control that the user s input does not overflow the input buffer provided so it  should never be used at all     If fgets    fails to read anything  the main loop is left  Of course  normally the main  loop of a microcontroller application is supposed to never finish  but again  for demon   strational purposes  this explains the error handling of stdio  fgets    will return  NULL in case of an input error or end of file condition on input  Both these condi   tions are in the domain of the function that is used to establish the stream  uart_   putchar    in this case  In short  this function returns EOF in case of a serial line   break  condition  extended start condition  has been recognized on the serial line   Common PC terminal programs allow to assert this condition as some kind of out of   band signalling on an RS 232 connection     When leaving the main loop  a goodbye message is sent to standard error output  1     to  the 
224. dows distributions of the toolchain and is the recommended  method of including this file     The compiler knows the processor type and through the single header file above  it can  Pull in and include the correct individual IO header file  This has the advantage that you  only have to specify one generic header file  and you can easily port your application  to another processor type without having to change every file to include the new IO  header file     The AVR toolchain tries to adhere to the exact names of the registers and names of  the bits found in the AVR datasheet  There may be some descrepencies between the  register names found in the IAR IO header files and the AVR GCC IO header files     9 8 3 Interrupt Service Routines  ISRs     As mentioned above  the C language Standard  strangely  does not specify a standard  way of declaring and defining an ISR  Hence  every compiler seems to have their own  special way of doing so     TAR declares an ISR like so      pragma vector TIMERO_OVF_vect    interrupt void MotorPWMBottom           code       In AVR GCC  you declare an ISR like so     ISR PCINT1_vect         code          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 8 Porting From IAR to AVR GCC 303       AVR GCC uses the ISR macro to define an ISR  This macro requries the header file      include  lt avr interrupt h gt     The names of the various interrupt vectors are found in the individual processor IO  header files that you must include 
225. dress after the register bank on an ATmega8 processor     The next available address in the  data segment is also location 0x60  so the application  has no initialized data     The  bss segment  where uninitialized data is stored  starts at location 0x60     The next available address in the  bss segment is location 0x63  so the application uses  3 bytes of uninitialized data     The  eeprom segment  where EEPROM variables are stored  starts at location 0x0     The next available address in the  eeprom segment is also location 0x0  so there aren t  any EEPROM variables        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 189       6 34 6 Generating Intel Hex Files    We have a binary of the application  but how do we get it into the processor  Most  if  not all  programmers will not accept a GNU executable as an input file  so we need to  do a little more processing  The next step is to extract portions of the binary and save  the information into  hex files  The GNU utility that does this is called avr objcopy     The ROM contents can be pulled from our project   s binary and put into the file  demo hex using the following command     5 avr objcopy  j  text  j  data     ihex demo elf demo hex    The resulting demo   hex file contains     000000012C085C084C083C082C081C080C07FC050  000100025C07DC07CC07BC07AC079C078C077C065   1000200076C075C074C011241FBECFE5DAEODEBF1A  10003000CDBF10E0A0E6B0E0E4E1F1E002C0059041   100040000D92A036B107D9F
226. e   Returns     The strchr_P   function returns a pointer to the matched character or NULL if the  character is not found     6 16 4 10 PGM P strchrnul P  PGM P s  int c    The strchrnul P   function is like strchr  P   except that if c is not found in s  then  it returns a pointer to the null byte at the end of s  rather than NULL   Glibc  GNU  extension      Returns     The strchrnul  P   function returns a pointer to the matched character  or a pointer  to the null byte at the end of s  i e   ststrlen s   if the character is not found     6 16 4 11 int strcmp P  const char    57         P 52    The stremp_P   function is similar to stremp   except that 52 is pointer to a string in  program space    Returns     The strcmp      function returns an integer less than  equal to  or greater than zero  if s1 is found  respectively  to be less than  to match  or be greater than 52      consequence of the ordering used by strcmp  P   is that if s1 is an initial substring  of 52  then 51 is considered to be  less than  52     6 16 4 12 char x strcpy_P  char    dest         P src     The strcpy       function is similar to strcpy   except that src is a pointer to a string in  program space     Returns     The strcpy  P   function returns a pointer to the destination string dest        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 134       6 16 4 13 size_t strcspn P  const char   s  PGM P reject    The strcspn_P 
227. e   except it waits for eeprom and spm operations to complete  before writing the page     6 12 2 11 define boot rww           SPM REG  amp   uint8 t  BV      COMMON ASB      Check if the RWW section is busy     6 12 2 12  define boot rww enable   boot rww enable      Enable the Read While Write memory section     6 12 2 13  define boot rww enable safe      Value    do      boot spm busy wait    N  eeprom busy wait        boot_rww_enable    X     while  0     Same as boot rww enable   except waits for eeprom and spm operations to complete  before enabling the RWW mameory     6 12 2 14  define boot spm busyO        REG  amp   uint8 t  BV SPMEN    Check if the SPM instruction is busy        6 12 2 15              boot spm busy  wait   do  while boot_spm_busy       Wait while the SPM instruction is busy     6 12 2 16              boot          interrupt disable      SPM  REG  amp    uint8_t  _   BV SPMIE      Disable the SPM interrupt        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 13  lt avr eeprom h gt   EEPROM handling 99       6 12 2 17  define_boot_spm_interrupt_enable    _SPM_REG     uint8_t _   BV SPMIE      Enable the SPM interrupt     6 12 2 18              BOOTLOADER SECTION attribute _   section     boot                       Used     declare    function or variable to be placed into    new section called  boot   loader  This section and its contents can then be relocated to any address  such as the  bootloader NRWW area  at link time     6 1
228. e  130  memcpy_P S  230  memmem   avr_string  84  memmem S  230  memmem_P       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    376       avr_pgmspace  130  memmove   avr_string  84  memmove S  230  memrchr   avr_string  85  memrchr S  231  memrchr_P   avr_pgmspace  130  memrchr_P S  231  memset   avr_string  85  memset S  231  modf   avr_math  35    NAN  avr_math  32  NONATOMIC_BLOCK  util_atomic  154  NONATOMIC_FORCEOFF  util_atomic  154  NONATOMIC_RESTORESTATE  util_atomic  154          outb   deprecated_items  170  outp   deprecated_items  170    parity h  231  parity_even_bit  util_parity  161  PGM_P  avr_pgmspace  126  pgm_read_byte  avr_pgmspace  126  pgm_read_byte_far  avr_pgmspace  126  pgm_read_byte_near  avr_pgmspace  126  pgm_read_dword  avr_pgmspace  127  pgm_read_dword_far  avr_pgmspace  127  pgm_read_dword_near    avr_pgmspace  127  pgm_read_word  avr_pgmspace  127  pgm_read_word_far  avr_pgmspace  127  pgm_read_word_near  avr_pgmspace  128  PGM_VOID_P  avr_pgmspace  128  pgmspace h  231  ELPM_classic__  233    ELPM_dword_enhanced__  234    ELPM enhanced   234  ELPM  word classic   234    ELPM  word enhanced   235  LPM  classic  235  LPM  dword classic   236    LPM  dword enhanced   236    LPM enhanced   237  LPM  word classic   237    LPM  word enhanced    237  pow  avr math  36  power h  238  clock prescale set  238  PRId16  avr inttypes  22  PRId32  avr_inttypes  22  PRId8  avr_inttypes  22  PRIdFAST16  avr_inttypes  22  PRIdFAST32 
229. e  and create an index for the linker to use  The name that  you create for the library filename must follow a specific pattern  lib lt name gt  a  The   lt name gt  part is the unique part of the filename that you create  It makes it easier if the   lt name gt  part relates to what the library is about  This  lt name gt  part must be prefixed  by  lib   and it must          a file extension of  a  for  archive   The reason for the special  form of the filename is for how the library gets used by the toolchain  as we will see  later on     Note     The filename is case sensitive  Use a lowercase  lib  prefix  and a lowercase   a   as the file extension     The command line is fairly simple     avr as rcs  lt library name gt   lt list of object modules gt     The r command switch tells the program to insert the object modules into the archive  with replacement  The c command line switch tells the program to create the archive   And the s command line switch tells the program to write an object file index into the  archive  or update an existing one  This last switch is very important as it helps the  linker to find what it needs to do its job     Note     The command line switches are case sensitive  There are uppercase switches that  have completely different actions    MFile and the WinAVR distribution contain a Makefile Template that includes the  necessary command lines to build a library  You will have to manually modify the  template to switch it over to build a library 
230. e F CPU 100000001     Functions     void  delay us  double _ us   e void delay ms  double ms   8 9 delay basic h File Reference  8 9 11 Detailed Description  Defines        define         DELAY BASIC H 1       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 10    eeprom h File Reference 223       Functions    void _delay_loop_1  uint8_t __count   void _delay_loop_2  uintl6 t  count        8 10  eeprom h File Reference    8 10 1 Detailed Description    avr libc declarations     define EEMEM   attribute    section   eeprom        define eeprom is ready      define eeprom busy  wait   do    while   eeprom_is_ready      uint8 t eeprom read byte  const uint8 t  addr    uint16 t eeprom read word  const uint16_t   addr    void eeprom read block  void   pointer ram  const void xpointer eeprom   size t n    void eeprom write byte  uint8 t   addr  uint8 t value    void eeprom write word  uint16 t             uint16 t value    void eeprom  write block  const void xpointer ram  void xpointer eeprom   size t n     Defines    define EEPROM H 1   define need size t    define XCALL  rcall     define   EEPROM REG LOCATIONS  1CIDIE   define  8    2         STRI EXP    define  STRI EXP   EXP    define _REG_LOCATION_SUFFIX _STR2 __EEPROM_REG_   LOCATIONS      define CR  TAB   n t     IAR C compatibility defines    e  define _EEPUT addr  val  eeprom write byte   uint8 t    addr    uint8      t  val       define _EEGET var  addr   var    eeprom read byte   uint8 t               
231. e PRIXLEASTI6  x    define PRIxFAST16  x    define PRIX16  X    define PRIXLEASTI6  X    define PRIXFASTIO  X    define PRIo32  lo    define PRIOLEAST32  lo    define PRIoFAST32  lo    define PRIu32  lu    define PRIULEAST32  lu    define PRIuFAST32  lu    define PRIx32  Ix    define PRIXLEAST32  Ix    define PRIxFAST32  Ix    define PRIX32  IX    define PRIXLEAST32          define PRIXFAST32  IX    define PRIoPTR PRIo16   define PRIuPTR PRIu16   define PRIxPTR PRIx16   define PRIXPTR PRIX16   define SCNd16  d    define SCNdLEAST16  d    define SCNdFASTI6  d    define SCNi16  i     define SCNiLEAST16  i    define SCNiFAST 16  i    define SCNd32  Id    define SCNdLEAST32  Id    define SCNdFAST32  Id    define SCNi32  li     define SCNiLEAST32  li    define SCNiFAST32  li    define SCNdPTR SCNd16   define SCNiPTR SCNi16   define SCNo16  o    define SCNoLEASTI6  o   ftdefine SCNoFASTI6  o    define SCNul6  u    define SCNuLEAST16  u    define SCNuFAST16  u    define SCNx16  x    define SCNxLEAST16  x    define SCNxFAST16  x    define SCNo32        define SCNoLEAST32  lo    define SCNoFAST32  lo    define SCNu32  lu    define SCNuLEAST32  lu    define SCNuFAST32  lu        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 18 io h File Reference 228        define SCNx32  Ix    define SCNxLEAST32  Ix    define SCNxFAST32  Ix    define SCNoPTR SCNo16   define SCNuPTR SCNu16   define SCNxPTR SCNx16    Typedefs  Far pointers for memory access  gt 64K      typedef int3
232. e address space  This means that any compiler for a Harvard       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 4 Data in Program Space 276       architecture processor  like the AVR  has to use other means to operate with separate  address spaces     Some compilers use non standard C language keywords  or they extend the standard  syntax in ways that are non standard  The AVR toolset takes a different approach     GCC has a special keyword    attribute that is used to attach different at   tributes to things such as function declarations  variables  and types  This keyword is  followed by an attribute specification in double parentheses  In AVR         there is a  special attribute called progmem  This attribute is use on data declarations  and tells  the compiler to place the data in the Program Memory  Flash            AVR Libc provides a simple macro PROGMEM that is defined as the attribute syn   tax of        with the progmem attribute  This macro was created as a convenience  to the end user  as we will see below  The PROGMEM macro is defined in the    avr pgmspace h  system header file        It is difficult to modify GCC to create new extensions to the C language syntax  so  instead  avr libc has created macros to retrieve the data from the Program Space  These  macros are also found in the  lt avr pgmspace  h gt  system header file     9 4 2 A Note On const    Many users bring up the idea of using C s keyword const as a means of declaring  data t
233. e are different         read    macros to read different sizes of data at the address given     9 4 4 Storing and Retrieving Strings      the Program Space    Now that you can successfully store and retrieve simple data from Program Space you  want to store and retrive strings from Program Space  And specifically you want to  store and array of strings to Program Space  So you start off with your array  like so     char xstring table           String 10   String 2    Stiri 3     String 4     String S                 then you add your                macro to             of the declaration     char  string_table   PROGMEM                I     String 2    String 3      String 4      Sting  5         Right  WRONG     Unfortunately  with GCC attributes  they affect only the declaration that they are at   tached to  So in this case  we successfully put the string_table variable  the array       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 4 Data in Program Space 279       itself  in the Program Space  This DOES NOT put the actual strings themselves into  Program Space  At this point  the strings are still in the Data Space  which is probably  not what you want     In order to put the strings in Program Space  you have to have explicit declarations for  each string  and put each string in Program Space     char string_1   PROGMEM    String 1    char string_2   PROGMEM    String 2    char string_3   PROGMEM    String 3    char string_4   PROGMEM    String 4    c
234. e end since they are to be used to resolve global symbols  that are still unresolved at this point     Specific linker flags can be passed from the C compiler command line using the  W1  compiler option  see above  This option requires that there be no spaces in the appended  linker option  while some of the linker options above  like  Map or  def sym  would  require a space  In these situations  the space can be replaced by an equal sign as  well  For example  the following command line can be used to compile foo   c into an  executable  and also produce a link map that contains a cross reference list in the file  foo map       avr gcc  O  o foo out  Wl  Map foo map  Wl   cref foo c       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 12 Using the avrdude program 355       Alternatively  a comma as a placeholder will be replaced by a space before passing the  option to the linker  So for a device with external SRAM  the following command line  would cause the linker to place the data segment at address 0x2000 in the SRAM     5 avr gcc  mmcu atmegal28     foo out  Wl  Tdata 0x802000    See the explanation of the data section for why 0x800000 needs to be added to the ac   tual value  Note that unless a  minit stack option has been given when compiling  the C source file that contains the function main     the stack will still remain in inter   nal RAM  through the symbol __stack that is provided by the run time startup code   This is probably a good idea an
235. e exacerbated  when the application is an embedded system  For example  the C language Standard   strangely  does not specify a standard for declaring and defining Interrupt Service Rou   tines  ISRs   Different compilers have different ways of defining registers  some of  which use non standard language constructs     This chapter describes some methods and pointers on porting an AVR application built  with the        compiler to the GNU toolchain  AVR          Note that this may not be  an exhaustive list     9 8 2 Registers  IO header files contain identifiers for all the register names and bit names for a par   ticular processor  IAR has individual header files for each processor and they must be    included when registers are being used in the code  For example      include  lt iom169 h gt        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 8 Porting From IAR to AVR GCC 302       Note     IAR does not always use the same register names or bit names that are used in the  AVR datasheet     AVR        also has individual IO header files for each processor  However  the actual  processor type is specified as a command line flag to the compiler   Using the  mmcu    lt processor gt  flag   This is usually done in the Makefile  This allows you to specify  only a single header file for any processor type      include  lt avr io h gt     Note     The forward slash in the  lt avr io h gt  file name that is used to separate subdirecto   ries can be used on Win
236. e for this instruction  and the right hand  side of the expression is a constant value known at compile time      The advantage of using the memory mapped paradigm in C programs is that it makes  the programs more portable to other C compilers for the AVR platform  Some people  might also feel that this is more readable  For example  the following two statements  would be equivalent        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 19  lt avr sfr_defs h gt   Special function registers 143       outb DDRD  inb DDRD   amp   LCDBITS    DDRD  amp    LCDBITS     The generated code is identical for both  Without optimization  the compiler strictly  generates code following the memory mapped paradigm  while with optimization  turned on  code is generated using the  faster and smaller  in out MCU instructions     Note that special care must be taken when accessing some of the 16 bit timer IO reg   isters where access from both the main program and within an interrupt context can  happen  See Why do some 16 bit timer registers sometimes get trashed      Porting programs that use sbi cbi    As described above  access to the AVR single bit set and clear instructions are provided  via the standard C bit manipulation commands  The sbi and cbi commands are no  longer directly supported  sbi  sfr bit  can be replaced by sfr    _BV  bit       ie  sbi PORTB  PB1   is now PORTB             1      This actually is more flexible than having sbi directly  as the optimizer 
237. e pgm_read_word_far address_long  __ELPM_word  uint32_   t  address_long     define pgm_read_dword_far address_long    ELPM dword  uint32      t  address long      define          read  byte address short         read  byte near address short    define          read  word address short         read word  near address short    define        read  dword address short           read dword  near address short    define PGM  P const prog char       define PGM  VOID P const prog void       Typedefs    typedef void PROGMEM prog  void  typedef char PROGMEM prog char  typedef unsigned char PROGMEM prog uchar  typedef int8 t PROGMEM prog int8 t  typedef uint8 t PROGMEM prog uint8 t  typedef int16 t PROGMEM prog int16 t  typedef uint16 t PROGMEM prog uintl6 t  typedef int32 t PROGMEM prog int32 t  typedef uint32 t PROGMEM prog uint32 t  typedef int  4 t PROGMEM prog int64 t  typedef uint  4 t PROGMEM prog uint64 t    Functions    PGM  VOID P memchr     PGM  VOID P s  int val  size t len  ATTR    CONST     int memcmp     const void     PGM  VOID     size t           PURE   void    memcpy  P  void            VOID     size_t    PGM  VOID    memrchr P  PGM  VOID P s  int val  size t len  ATTR    CONST     int strcasecmp_P  const char     PGM_P  ATTR  PURE   char    strcat_P  char     PGM_P    PGM  P strchr P         P s  int val           CONST   PGM _P strchrnul_P            s  int val  _ ATTR_CONST   int stremp_P  const char     PGM_P  __ATTR_PURE   char    strepy_P  char x  PGM_P    size
238. e the stan   dard string functions described in  lt string h gt   Strings    If possible  put your constant tables in the lower 64 KB and use pgm_read_byte_   near   or pgm_read_word_near   instead of pgm_read_byte_far   or pgm_read_   word_far   since it is more efficient that way  and you can still use the upper 64K  for executable code  All functions that are suffixed with a _P require their ar   guments to be in the lower 64 KB of the flash ROM  as they do not use ELPM  instructions  This is normally not a big concern as the linker setup arranges any  program space constants declared using the macros from this header file so they  are placed right after the interrupt vectors  and in front of any executable code   However  it can become a problem if there are too many of these constants  or for  bootloaders on devices with more than 64 KB of ROM  All these functions will not  work in that situation     Defines       define PROGMEM   ATTR  PROGMEM         define PSTR s    const PROGMEM char    s         define          read byte near address short  LPM  uint16 t  address short         define        read word near address short    LPM  word  uint16    t  address short         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16     lt avr pemspace h gt   Program Space Utilities 126        define pgm_read_dword_near address_short    LPM  dword  uint16    t  address short     define          read  byte far address long  ELPM  uint32 t  address long       defin
239. e this function  This function will convert  accented letters into random characters     6 3 2 15 int tolower  int _ c     Converts the letter c to lower case  if possible     6 3 2 16 int toupper  int        Converts the letter c to upper case  if possible     64  lt errno h gt   System Errors    6 4 1 Detailed Description     include   errno h      Some functions in the library set the global variable errno when an error occurs  The  file   lt errno h gt   provides symbolic names for various error codes     Warning     The errno global variable is not safe to use in a threaded or multi task system  A  race condition can occur if a task is interrupted between the call which sets error  and when the task examines errno  If another task changes errno during this  time  the result will be incorrect for the interrupted task        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 20       Defines       define EDOM 33      define ERANGE 34    6 4 2 Define Documentation    6 4 2 1  define EDOM 33    Domain error     6 4 2 2  define ERANGE 34    Range error     6 5  lt inttypes h gt   Integer Type conversions    6 5 1 Detailed Description     include  lt inttypes h gt     This header file includes the exact width integer definitions from  lt stdint  h gt   and  extends them with additional facilities provided by the implementation     Currently  the extensions include two additional integer types that could hold a  far
240. e two arguments  the first a character to write to the  device  and the second a pointer to FILE  and shall return 0 if the output was successful   and a nonzero value if the character could not be sent to the device     If the get function pointer is provided  the stream is opened with read intent  The  function passed as get shall take a pointer to FILE as its single argument  and return  one character from the device  passed as an int type  If an error occurs when trying  to read from the device  it shall return _FDEV_ERR  If an end of file condition was  reached while reading from the device  FDEV EOF shall be returned                             If both functions are provided  the stream is opened with read and write intent     The first stream opened with read intent is assigned to st din  and the first one opened  with write intent is assigned to both  stdout and stderr     fdevopen   uses calloc    und thus malloc    in order to allocate the storage for the new  stream     Note     If the macro _ STDIO FDEVOPEN              12 is declared before including   lt stdio h gt   a function prototype for fdevopen   will be chosen that is backwards  compatible with avr libc version 1 2 and before  This is solely intented for pro   viding a simple migration path without the need to immediately change all source  code  Do not use for new code     6 9 3 4 int feof  FILE   stream        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard 
241. ease under  http   sources redhat com binutils      As gas comes from a Unix origin  its pseudo op and overall assembler syntax is slightly  different than the one being used by other assemblers  Numeric constants follow the C  notation  prefix      for hexadecimal constants   expressions use a C like syntax     Some common pseudo ops include       byte allocates single byte constants  e ascii allocates a non terminated string of characters      asciz allocates a VO terminated string of characters  C string       data switches to the  data section  initialized RAM variables       text switches to the  text section  code and ROM constants       set declares a symbol as a constant expression  identical to  equ         global  or  globl  declares a public symbol that is visible to the linker  e  g   function entry point  global variable        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 286           extern declares a symbol to be externally defined  this is effectively a comment  only  as gas treats all undefined symbols it encounters as globally undefined any   way    Note that  org is available      gas as well  but is a fairly pointless pseudo op in an as   sembler environment that uses relocatable object files  as it is the linker that determines  the final position of some object in ROM or RAM     Along with the architecture independent standard operators  there are some          specific operators available which are unfo
242. ect    ISR attributes       define ISR BLOCK       define ISR NOBLOCK       define ISR_NAKED        define ISR_ALIASOF target_vector        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 17 inttypes h File Reference 226       8 17    inttypes h File Reference    8 17 1 Detailed Description    Defines    macros for printf and scanf format specifiers    For C    these are only included if _ STDC_LIMIT_MACROS is defined before  including  lt inttypes h gt       define PRId8         define PRIGLEASTS8  d    define PRIdFASTS  d    define PRIi8  i     define PRIILEASTS  i    define           5      i    define PRId16  d    define PRIGLEAST16  d    define PRIGFAST 16  d    define PRIi16  i     define PRILEAST16  i    define PRIFASTI6  i    define PRId32        define PRIGLEAST32        define PRIGFAST32  Id    define PRIi32  li     define PR iLEAST32  li    define PRIiFAST32  li    define PRIdPTR PRId16   define              PRH16   define PRI08  o     define PRIOLEASTS  o    define PRIoFASTS  o    define PRIu8  u     define PRIULEASTS  u    define PRIUFASTS  u    define PRIx8  x     define PRIXLEASTS  x    define PRIXFASTS  x    define PRIX8  X    define PRIXLEASTS  X    define PRIXFASTS  X    define PRIo16  o    define PRIOLEASTI6  o    define PRIOFASTI6  o    define PRIu16  u    define PRIULEAST16  u    define PRIUFASTI6  u    define PRIx16  x        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 17    inttypes h File Reference        defin
243. ed     Back to FAQ Index     9 9 8 Shouldn t I initialize all my variables     Global and static variables are guaranteed to be initialized to 0 by the C standard   avr gcc does this by placing the appropriate code into section  init4  see The  initN  Sections   With respect to the standard  this sentence is somewhat simplified  because  the standard allows for machines where the actual bit pattern used differs from all bits  being 0   but for the AVR target  in general  all integer type variables are set to 0  all  pointers to a NULL pointer  and all floating point variables to 0 0     As long as these variables are not initialized  1i  e  they don t have an equal sign and  an initialization expression to the right within the definition of the variable   they go  into the  bss section of the file  This section simply records the size of the variable   but otherwise doesn t consume space  neither within the object file nor within flash  memory   Of course  being a variable  it will consume space in the target s SRAM      In contrast  global and static variables that have an initializer go into the  data section  of the file  This will cause them to consume space in the object file  in order to record  the initializing value   and in the flash ROM of the target device  The latter is needed  since the flash ROM is the only way that the compiler can tell the target device the  value this variable is going to be initialized to        Generated on Mon Oct 29 20 02 34 2007 for avr 
244. ed in order to change it  The macros within this header file handle the required  sequence automatically before changing any value  Interrupts will be disabled during  the manipulation     Note     Depending on the fuse configuration of the particular device  further restrictions  might apply  in particular it might be disallowed to turn off the watchdog timer     Note that for newer devices  ATmega88 and newer  effectively any AVR that has the op   tion to also generate interrupts   the watchdog timer remains active even after a system  reset  except a power on condition   using the fastest prescaler value  approximately  15 ms   It is therefore required to turn off the watchdog early during program startup   the datasheet recommends a sequence like the following      include  lt stdint h gt    include  lt avr wdt h gt     uint8_t mcusr_mirror     void get_mcusr void       attribute    naked        attribute    section   init3       void get mcusr  void      mcusr_mirror   MCUSR   MCUSR   0   wdt_disable          Saving the value of MCUSR in mcusr_mirror is only needed if the application  later wants to examine the reset source  but clearing in particular the watchdog reset  flag before disabling the watchdog is required  according to the datasheet        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 22  lt avr wdt h gt   Watchdog timer handling 150       Defines     define wdt reset          volatile__   wdr     define wdt_disable      define wdt_enable
245. efine ISR_ALIAS vector  target vector      include  lt avr interrupt h gt     Aliases a given vector to another one in the same manner as the   5   ALIASOF at   tribute for the ISR   macro  Unlike the ISR_ALIASOF attribute macro however  this is  compatible for all versions of GCC rather than just GCC version 4 2 onwards     Note   This macro creates a trampoline function for the aliased macro  This will result in     two cycle penalty for the aliased vector compared to the ISR the vector is aliased  to  due to the JMP RJMP opcode used    Deprecated    For new code  the use of ISR      ISR_ALIASOF       is recommended     Example     ISR INTO                PORTB   42        ISR_ALIAS INTI_vect  INTO_vect      6 14 2 6  define ISR_ALIASOF target_vector      include  lt avr interrupt h gt     The ISR is linked to another ISR  specified by the vect parameter  This is compatible  with GCC 4 2 and greater only     Use this attribute in the attributes parameter of the ISR macro     6 14 2 7  define ISR BLOCK      include  lt avr interrupt h gt     Identical to an ISR with no attributes specified  Global interrupts are initially disabled  by the AVR hardware when entering the ISR  without the compiler modifying this state     Use this attribute in the attributes parameter of the ISR macro        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 123       6 14 2   define ISR NAKED      include  lt avr interrupt h gt     ISR is 
246. ega640  ATmegal280   ATmegal281  ATmega2560  ATmega2561   ATmega324P  ATmegal64P  ATmega644P   ATmega644  USARTO   SIG   USARTO Data   AT90CANI28  AT90CAN32  AT90CAN64   UDRE vect UARTO   Register Empty ATmegal28  ATmegal62  ATmegal65         DATA megal65P  ATmegal69  ATmegal69P  AT   mega325  ATmega329  ATmega329P  AT   mega64  ATmega645  ATmega649  AT   mega640  ATmegal280  ATmegal281  AT   mega2560  ATmega2561  ATmega324P  AT   megal64P  ATmega644P  ATmega644  USARTI   SIG   USARTI  Rx   ATmegal62  RXC  vect USARTI   Complete  RECV  USARTI   SIG   USARTI  Rx   AT90CANI28  AT90CAN32  AT90CAN64        vect UARTI   Complete ATmegal28    ATmega64  ATmega640   RECV ATmegal280  ATmegal281  AT   mega2560  ATmega2561  ATmega324P   ATmega164P  ATmega644P  AT   mega644      9        162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646  USARTI   SIG   USARTI  Tx   ATmegal62         vect USARTI   Complete  TRANS  USARTI   SIG   USARTI  Tx   AT90CANI28  AT90CAN32  AT90CAN64   TX vect UARTI   Complete ATmegal28    ATmega64  ATmega640   TRANS ATmegal280  ATmegal281  AT   mega2560  ATmega2561  ATmega324P   ATmega164P  ATmega644P  AT   mega644  AT90USB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646  USARTI   SIG   USARTI  Data   AT90CANI28  AT90CAN32  AT90CAN64   UDRE vect UARTI   Register Empty ATmegal28  ATmegal62  ATmega64  AT   DATA mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P   ATmega644  AT9
247. egister usage  definitions        9 6 3 Input and Output Operands    Each input and output operand is described by a constraint string followed by a C  expression in parantheses  AVR GCC 3 3 knows the following constraint characters     Note     The most up to date and detailed information on contraints for the avr can be found  in the gcc manual    The x register is r27 r26  the y register is r29 r28  and the z register is     31226530       Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 290                                                                               Constraint Used for Range  a Simple upper registers r16 to r23  b Base pointer registers     2  pairs  d Upper register rl6tor31  e Pointer register pairs X  y  Z  q Stack pointer register SPH SPL  r Any register r0 to r31  t Temporary register r0  W Special upper register r24  r26  r28  r30  pairs  x Pointer register pair X x  127 126   y Pointer register pair Y y  129 r28   7  Pointer register pair Z z  r31 130   G Floating point constant 0 0  I 6 bit positive integer 0 to 63  constant  J 6 bit negative integer  63 to 0  constant  K Integer constant 2  L Integer constant 0  1 Lower registers rO to r15  M 8 bit integer constant 0 to 255  N Integer constant  1  O Integer constant 8  16  24  P Integer constant 1  Q  GCC  gt   4 2 x  A  memory address based  on Y or Z pointer with  displacement   R  GCC  gt   4 3 x  Integer  6 to 5  constant                    The
248. embler code string  A  good example is a simple statement to disable interrupts     asm volatile  cli            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 289       9 6 2 Assembler Code    You can use the same assembler instruction mnemonics as you d use with any other         assembler  And you can write as many assembler statements into one code string  as you like and your flash memory is able to hold     Note     The available assembler directives vary from one assembler to another     To make it more readable  you should put each statement on a seperate line     asm volatile   nopNnNt                                        nop n t   40            linefeed        tab characters will make the assembler listing generated by the com   piler more readable  It may look a bit odd for the first time  but that s the way the  compiler creates it s own assembler code     You may also make use of some special registers                                   Symbol Register   _ SREG   Status register at address Ox3F             Stack pointer high byte at address 0x3E   ASP        Stack pointer low byte at address 0x3D   __tmp_reg__ Register   0  used for temporary storage  zero_reg Register rl  always zero          Register rO may be freely used by your assembler code and need not be restored at  the end of your code  It   s a good idea to use tmp  reg and  zero reg  instead of rO or r1  just in case a new compiler version changes the r
249. en    9 9 Frequently Asked Questions 321       9 9 17 Which  O flag to use     There s    common misconception that larger numbers behind the    O option might auto   matically cause  better  optimization  First  there s no universal definition for  better    with optimization often being a speed vs  code size tradeoff  See the detailed discus   sion for which option affects which part of the code generation     A test case was run on an ATmega128 to judge the effect of compiling the library itself  using different optimization levels  The following table lists the results  The test case  consisted of around 2 KB of strings to sort  Test  1 used qsort   using the standard  library stremp    test  2 used a function that sorted the strings by their size  thus had  two calls to strlen   per invocation      When comparing the resulting code size  it should be noted that a floating point version  of fvprintf   was linked into the binary  in order to print out the time elapsed  which  is entirely not affected by the different optimization levels  and added about 2 5 KB to  the code                    Optimization Size of  text Time for test  1 Time for test  2  flags    03 6898 903 us 19 7 ms    02 6666 972 us 20 1 ms    Os 6618 955 us 20 1 ms    Os 6474 972 us 20 1 ms   mcall prologues                       The difference between 955 us and 972 us was just a single timer tick  so take this  with a grain of salt      So generally  it seems  Os  mcall prologues is the most universal
250. enhanced core     If too many  those that don t fit are passed on the stack        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 318       Return values  8 bit in r24  not r25    16 bit in r25 r24  up to 32 bits in r22 r25  up to  64 bits in r18 r25  8 bit return values are zero sign extended to 16 bits by the caller   unsigned char is more efficient than signed char  just clr r25   Argu   ments to functions with variable argument lists  printf etc   are all passed on stack  and  char is extended to int     Warning     There was no such alignment before 2000 07 01  including the old patches for  gcc 2 95 2  Check your old assembler subroutines  and adjust them accordingly     Back to FAQ Index     9 9 15 How do I put an array of strings completely in ROM     There are times when you may need an array of strings which will never be modified   In this case  you don t want to waste ram storing the constant strings  The most obvious   and incorrect  thing to do is this      include  lt avr pgmspace h gt     PGM_P array 2  PROGMEM       Foo     Bar           int main  void       char       32    strcpy P  buf  array 1     return 0     The result is not what you want though  What you end up with is the array stored in  ROM  while the individual strings end up in RAM  in the  data section      To work around this  you need to do something like this      include   avr pgmspace h      const char foo   PROGMEM    Foo    const char bar  
251. entical to the contents of the old region  even in case a new region had  to be allocated     It is acceptable to pass pt r as NULL  in which case realloc   will behave identical to  malloc          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 79       If the new memory cannot be allocated  realloc   returns NULL  and the region at pt r  will not be changed     6 10 4 24 void srand  unsigned int __seed     Pseudo random number generator seeding  see rand       6 10 4 25 void srandom  unsigned long __seed     Pseudo random number generator seeding  see random       6 10 4 26 double strtod  const char   __nptr  char xx __endptr     The strtod   function converts the initial portion of the string pointed to by nptr to  double representation     The expected form of the string is an optional plus         or minus sign           followed by a sequence of digits optionally containing a decimal point character  op   tionally followed by an exponent  An exponent consists of an   E    or  e   followed  by an optional plus or minus sign  followed by a sequence of digits        Leading white space characters in the string are skipped   The strtod   function returns the converted value  if any     If endptr is not NULL  a pointer to the character after the last character used in the  conversion is stored in the location referenced by endpt        If no conversion is performed  zero is returned and the value of npt r is stored i
252. enting 35      If endptr is not NULL  strtol   stores the address of the first invalid character in  xendptr  If there were no digits at all  however  strtol   stores the original value of           in endptr   Thus  if xnptr is not   NO  but xxendptr is 710         return  the  entire string was valid      The strtol   function returns the result of the conversion  unless the value would under   flow or overflow  If no conversion could be performed  0 is returned  If an overflow or  underflow occurs  errno is set to ERANGE and the function return value is clamped  to LONG  MIN or LONG MAX  respectively     6 10 4 28   unsigned long strtoul  const char x   nptr  char          endptr  int     base     The strtoul   function converts the string in npt r to an unsigned long value  The con   version is done according to the given base  which must be between 2 and 36 inclusive   or be the special value 0     The string may begin with an arbitrary amount of white space  as determined by iss   pace    followed by a single optional         or           sign  If base is zero or 16  the string  may then include a  0x  prefix  and the number will be read in base 16  otherwise  a  zero base is taken as 10  decimal  unless the next character is     0     in which case it is  taken as 8  octal      The remainder of the string is converted to an unsigned long value in the obvious  manner  stopping at the first character which is not a valid digit in the given base    In bases above 10  the 
253. er     6 36 3 6 Icd c The implementation of the higher level LCD driver  This driver  builds on top of the HD44780 low level LCD controller driver  and offers a character  IO interface suitable for direct use by the standard IO facilities  Where the low level  HD44780 driver deals with setting up controller SRAM addresses  writing data to the  controller   s SRAM  and controlling display functions like clearing the display  or mov   ing the cursor  this high level driver allows to just write a character to the LCD  in the  assumption this will somehow show up on the display     Control characters can be handled at this level  and used to perform specific actions  on the LCD  Currently  there is only one control character that is being dealt with  a  newline character   n  is taken as an indication to clear the display and set the cursor  into its initial position upon reception of the next character  so a  new line  of text  can be displayed  Therefore  a received newline character is remembered until more  characters have been sent by the application  and will only then cause the display to be  cleared before continuing  This provides a convenient abstraction where full lines of  text can be sent to the driver  and will remain visible at the LCD until the next line is  to be displayed     Further control characters could be implemented  e  g  using a set of escape sequences   That way  it would be possible to implement self scrolling display lines etc     The public function
254. er by modifying  the contents of the freed memory to contain pointers chaining the pieces together  That  way  no additional memory is reqired to maintain this list except for a variable that  keeps track of the lowest memory segment available for reallocation  Since both  a  chain pointer and the size of the chunk need to be recorded in each chunk  the minimum  chunk size on the freelist is four bytes     When allocating memory  first the freelist is walked to see if it could satisfy the request   If there s a chunk available on the freelist that will fit the request exactly  it will be  taken  disconnected from the freelist  and returned to the caller  If no exact match could  be found  the closest match that would just satisfy the request will be used  The chunk  will normally be split up into one to be returned to the caller  and another  smaller   one that will remain on the freelist  In case this chunk was only up to two bytes larger  than the request  the request will simply be altered internally to also account for these  additional bytes since no separate freelist entry could be split off in that case     If nothing could be found on the freelist  heap extension is attempted  This is where    malloc  margin will be considered if the heap is operating below the stack  or  where   malloc heap end will be verified otherwise     If the remaining memory is insufficient to satisfy the request  NULL will eventually be  returned to the caller     When calling free    a new f
255. erase  address         while  0     Same as boot_page_erase   except it waits for eeprom and spm operations to complete  before erasing the page     6 12 2 7  define boot_page_fill address  data  boot page fill normal address   data        Fill the bootloader temporary page buffer for flash address with data word     Note     The address is a byte address  The data is a word  The AVR writes data to the  buffer a word at a time  but addresses the buffer per byte  So  increment your  address by 2 between calls  and send 2 data bytes in a word format  The LSB of  the data is written to the lower address  the MSB of the data is written to the higher  address     6 12 2 8 ftdefine boot page fill safe address  data     Value    do      boot spm busy wait    X  eeprom busy wait    N  boot page fill address  data   N     while  0     Same as boot page fill   except it waits for eeprom and spm operations to complete  before filling the page     6 12 2 9  define boot page write address  _ boot page write normal address        Write the bootloader temporary page buffer to flash page that contains address     Note     address is a byte address in flash  not a word address        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr boot h gt   Bootloader Support Utilities 98       6 12 2 10  define boot_page_write_safe address     Value    do      boot spm busy wait        eeprom_busy_wait        boot_page_write  address   X     while  0     Same as boot page writ
256. erates push pops for the call clobbered  registers  This way also a specific calling convention could be used for the eep   rom routines e g  by passing values in __tmp_reg__  eeprom addresses in X and  memory addresses      Z registers  Method is optimized for code size    Presently supported are two locations of the EEPROM register set   Ox1F 0x20 0x21 and 0x1C 0x1D 0x1E  see _ EEPROM REG LOCATIONS     As these functions modify IO registers  they are known to be non reentrant  If any  of these functions are used from both  standard and interrupt context  the applica   tions must ensure proper protection  e g  by disabling interrupts before accessing  them      libc declarations    uint8 t eeprom_read_byte  const uint8 t  addr    uint16 t eeprom read           const uint16_t   addr    void eeprom read block  void   pointer ram  const void xpointer eeprom   size t n    void eeprom write byte  uint8 t   addr  uint8 t value    void eeprom write word  uint16 t             uint16 t value    void eeprom  write block  const void xpointer ram  void xpointer eeprom   size t n     define EEMEM   attribute    section   eeprom        define eeprom is ready      define              busy  wait   do    while   eeprom_is_ready       IAR C compatibility defines        define  EEPUT addr  val  eeprom write byte   uint8 t                 uint8      t  val        define EEGET var  addr   var    eeprom read byte   uint8 t x  addr      Defines        define _ EEPROM REG LOCATIONS   1CIDIE    6 13
257. ersion     Conversions are introduced with the character    Possible options can follow the        a   indicating that the conversion should be performed but the conversion result  is to be discarded  no parameters will be processed from ap     e the character h indicating that the argument is a pointer to short int  rather  than int         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 68       e the character 1 indicating that the argument is a pointer to long int  rather  than int  for integer type conversions   or a pointer to double  for floating  point conversions      In addition  a maximal field width may be specified as a nonzero positive decimal  integer  which will restrict the conversion to at most this many characters from the  input stream  This field width is limited to at most 127 characters which is also the  default value  except for the c conversion that defaults to 1      The following conversion flags are supported           Matches a literal   character  This is not a conversion        d Matches an optionally signed decimal integer  the next pointer must be a  pointer to int        i Matches an optionally signed integer  the next pointer must be a pointer to  int  The integer is read in base 16 if it begins with Ox or OX  in base 8 if it  begins with 0  and in base 10 otherwise  Only characters that correspond to the  base are used        o Matches an octal integer  the next pointer must be a 
258. et by representing a logical   in the respec   tive bit position  When working with interrupt handlers  this interrupt flag bit usually  gets cleared automatically in the course of processing the interrupt  sometimes by just  calling the handler at all  sometimes  e  g  for the U SJART  by reading a particular  hardware register that will normally happen anyway when processing the interrupt     From the hardware s point of view  an interrupt is asserted as long as the respective bit  is set  while global interrupts are enabled  Thus  it is essential to have the bit cleared  before interrupts get re enabled again  which usually happens when returning from an  interrupt handler      Only few subsystems require an explicit action to clear the interrupt request when using  interrupt handlers   The notable exception is the TWI interface  where clearing the  interrupt indicates to proceed with the TWI bus hardware handshake  so it s never done       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 326       automatically      However  if no normal interrupt handlers are to be used  or in order to make extra  sure any pending interrupt gets cleared before re activating global interrupts  e  g   an external edge triggered one   it can be necessary to explicitly clear the respective  hardware interrupt bit by software  This is usually done by writing a logical 1 into this  bit position  This seems to be illogical at first  the bit positio
259. etailed Description    24546 64 6 ee S OK 3 3 RR 255  strpbrk S File Reference    coss o RARE 256  5 74 1 Detaled Description      soo RR RR s  amp  256           P S File Reference 222 292 x6 3 9 RR xx RR OR 256  6 75 1 Detaled Description   uu od m    bee as 256  sutchro File Reference o o oop s 24 045 Rt eek Re 256  8 76 1 Detaled Description                        256  strehe PS File Reference  lt   lt a ado q ss oum ko 5  258       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS xi       8 77 1 Detailed Description 22   2                   258   8 59 sinevo File BEeteren  B s o oom s s S pus SE a X o 258  8 76 1 Detaled Description 222222225954           258   8 79 strsep S File Reference            a e waq RR          258  8 79 1 Detailed Description                     2 m Rs 258     90 strsep P S File Reference   uuo omo Rem xo go 25558  258  8 90 1 Detailed Description  lt   se cs ees apee SUR 4 S 8  258   881 stspn S File Refeten  e  lt   eo co emeret eeta 2      258  591 1 Detaled Description xoc ox ER Eee 258   592 strspn P S Pile Reference   uso n xo so oem RR      X o e 258  8 82 1 Detailed Description               258   5 83 strsteS Pile Reference    u u cead w eR ot w kup w a a ERG s 258  8 83 1 Detailed Description   gt e a s 6485 5 222524    258   8 84 s  ste PS Pile Referente   uuu cum          q W QUQ we SW 258  8 84 1 Detailed Description   oos RR 258   8 85 strtok rS File Reference 2                        258  885 1 Detaled De
260. eturn a 0 if the bit is clear   and non zero if the bit is set     6 19 2 4  define loop_until_bit_is_clear sfr  bit  do     while  bit is set sfr  bit       include  lt avr io h gt     Wait until bit bit in IO register s fr is clear     6 19 2 5  define loop until bit is set sfr  bit  do     while  bit_is_clear sfr  bit       include  lt avr io h gt     Wait until bit bit in IO register s fr is set        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 20  lt avr sleep h gt   Power Management and Sleep Modes 145       6 20  lt avr sleep h gt   Power Management and Sleep Modes    6 20 1 Detailed Description     include  lt avr sleep h gt              Use of the SLEEP instruction can allow an application to reduce its power comsump   tion considerably  AVR devices can be put into different sleep modes  Refer to the  datasheet for the details relating to the device you are using        There are several macros provided in this header file to actually put the device into  sleep mode  The simplest way is to optionally set the desired sleep mode using set_     sleep_mode     it usually defaults to idle mode where the CPU is put on sleep but  all peripheral clocks are still running   and then call sleep_mode     Unless it is the  purpose to lock the CPU hard  until a hardware reset   interrupts need to be enabled at  this point  This macro automatically takes care to enable the sleep mode in the CPU  before going to sleep  and disable it again afterwards     As t
261. eturns strlen src    MIN siz  strlen initial dst    If retval  gt    siz  truncation occurred     6 11 3 21 size_t strlcpy  char    dst  const char    src  size_t siz    Copy a string    Copy src to string dst of size siz  At most siz 1 characters will be copied  Always  NULL terminates  unless siz    0     Returns     The strlcpy   function returns strlen src   If retval  gt   siz  truncation occurred     6 11 3 22 size_t strlen  const char x src    Calculate the length of a string    The strlen   function calculates the length of the string src  not including the terminat   ing     0    character    Returns     The strlen   function returns the number of characters in src     6 11 3 23 char x strlwr  char x s   Convert a string to lower case     The strlwr   function will convert a string to lower case  Only the upper case alphabetic  characters  A    Z  are converted  Non alphabetic characters will not be changed     Returns     The strlwr   function returns a pointer to the converted string     6 11 3 24 int strncasecmp  const char    s1  const char    52  size t len   Compare two strings ignoring case     The strncasecmp   function is similar to strcasecmp    except it only compares the first  len characters of s1        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 90       Returns     The strncasecmp   function returns an integer less than  equal to  or greater than  Zero if s1  or the first 1en bytes thereof  is found 
262. exp  double  value int      exp     The frexp   function breaks a floating point number into a normalized fraction and an  integral power of 2  It stores the integer in the int object pointed to by exp     The frexp   function returns the value x  such that x is a double with magnitude in the  interval  1 2  1  or zero  and value equals x times 2 raised to the power   exp  If  value is zero  both parts of the result are zero        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 6  lt math h gt   Mathematics 36       6 6 3 18 double hypot  double x  double y     The hypot   function returns  sqrt  X x               This is the length of the hypotenuse of  a right triangle with sides of length x and y  or the distance of the point  x  y  from the  origin  Using this function instead of the direct formula is wise  since the error is much  smaller  No underflow with small x and y  No overflow if result is in range     6 6 3 19 _ ATTR CONST int isfinite  double x     The isfinite   function returns a nonzero value if x is finite  not plus or minus infinity   and not NaN     6 6 3 20 int isinf  double _ x     The function isinf   returns 1 if the argument x is either positive or negative infinity   otherwise 0     6 6 3 21 int isnan  double x     The function isnan   returns 1 if the argument x represents a  not a number   NaN   object  otherwise 0     6 6 3 22 double Idexp  double _ x  int          The Idexp   function multiplies a floating point number by an i
263. face to enable or  disable on board peripherals to reduce power  See the table below     Note     Not all AVR devices have a Power Reduction Register  for example the AT   megal28   On those devices without a Power Reduction Register  these macros  are not available    Not all AVR devices contain the same peripherals  for example  the LCD inter   face   or they will be named differently  for example  USART and USARTO    Please consult your device   s datasheet  or the header file  to find out which macros  are applicable to your device        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 17  lt avr power h gt   Power Reduction Management    139          Power Macro    Description    Applicable for device       power_adc_enable      Enable the Analog to Digital  Converter module     ATmega640  ATmega1280   ATmegal281  ATmega2560   ATmega2561  AT90USB646   AT90USB647  AT90USB 1286   AT90USB 1287  AT90PWM 1   AT90PWM2  AT90PWM2B   AT90PWM3  AT90PWM3B   AT90PWM216   AT90PWM316  ATmega165   ATmega165P  ATmega325   ATmega3250  ATmega645   ATmega6450  ATmega169   ATmegal69P  ATmega329   ATmega3290  ATmega649   ATmega6490  ATmega164P   ATmega324P  ATmega644   ATmega48  ATmega88   ATmegal68  ATtiny24   ATtiny44  ATtiny84  ATtiny25   ATtiny45  ATtiny85   ATtiny261  ATtiny461   ATtiny861       power_adc_disable      Disable the Analog to Digital  Converter module     ATmega640  ATmega1280   ATmegal281  ATmega2560   ATmega2561      9005  646   AT90USB647  AT9OUSB 128
264. ference 249       8 45 strcat_P S File Reference  8 45 1 Detailed Description    Defines        define dest_hi r25     define dest_lo r24      define src_hi r23      define src_lo r22    8 46 strchr S File Reference  8 46 1 Detailed Description   8 47 strchr P S File Reference  8 47 1 Detailed Description   8 48 strchrnul S File Reference  8 48 1 Detailed Description   8 49 strchrnul P S File Reference  8 49 1 Detailed Description   8 50 strcmp S File Reference  8 50 1 Detailed Description   8 51 strcmp P S File Reference  8 51 4 Detailed Description   8 52 sSstrcpy S File Reference  8 52 1 Detailed Description    Defines        define dest hi r25      define dest lo r24       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 53 strcpy_P S File Reference 250           define src_hi r23       define src_lo r22  8 53 strcpy_P S File Reference  8 531 Detailed Description  Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src lo r22  8 54 strcspn S File Reference    8 54 1 Detailed Description    8 55 strcspn_P S File Reference    8 55 1 Detailed Description    8 56 string h File Reference  8 56 1 Detailed Description  Defines         define STRING H 1       define need NULL       define need size t       define            PURE attribute    pure         define _FFS x        Functions    int ffs  int  attribute    const      int  51  long  __attribute__  const      int ffsll  long long   attribute    const     void    me
265. fers hardware TWI support is the  ATmega8 which comes with 512 bytes of EEPROM  which is equivalent to an 24  04  device  The ATmegal28 already comes with twice as much EEPROM as the 24C16  would offer  One exception might be to use an externally connected EEPROM device  that is removable  e  g  SDRAM PC memory comes with an integrated TWI EEPROM  that carries the RAM configuration information     6 37 3 The Source Code    The source code is installed under       Sprefix share doc avr libc examples twitest twitest c     where  prefix is a configuration option  For Unix systems  it is usually set to either       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 37 Example using the two wire interface  TWI  209        usror  usr local     Note  1     The header file  lt util twi h gt  contains some macro definitions for symbolic con   stants used in the TWI status register  These definitions match the names used in the  Atmel datasheet except that all names have been prefixed with TW      Note  2     The clock is used in timer calculations done by the compiler  for the UART baud rate  and the TWI clock rate     Note  3     The address assigned for the 24       EEPROM consists of 1010 in the upper four bits   The following three bits are normally available as slave sub addresses  allowing to  operate more than one device of the same type on a single bus  where the actual sub   address used for each device is configured by hardware strapping  However  since the  
266. fic names useable for interrupt function definitions as docu   mented here     Finally  the following macros are defined        RAMEND  A constant describing the last on chip RAM location       XRAMEND    A constant describing the last possible location in RAM  This is equal to RA   MEND for devices that do not allow for external RAM        E2END  A constant describing the address of the last EEPROM cell        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pgmspace h gt   Program    Space Utilities 125         FLASHEND    A constant describing the last byte address in flash ROM        SPM_PAGESIZE    For devices with bootloader support  the flash pagesize  in bytes  to be used for    the SPM instruction     6 16  lt avr pgmspace h gt   Program Space Utilities    6 16 1 Detailed Description     include  lt avr io h gt    include  lt avr pgmspace h gt     The functions in this module provide interfaces for a program to access data stored in    program space  flash memory  of the d  device must support either the LPM or      Note     evice  In order to use these functions  the target  ELPM instructions        These functions are an attempt to provide some compatibility with header files  that come with IAR C  to make porting applications between different compilers  easier  This is not 100  compatibility though  GCC does not have full support for  multiple address spaces yet     If you are working with strings which are completely based in ram  us
267. fine PRIOLEAST32  lo     octal printf format for uint_least32_t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 26       6 5 2 29  define PRIOLEASTS  o     octal printf format for uint_least8_t    6 5 2 30  define PRIoPTR PRIo16    octal printf format for uintptr_t    6 5 2 31  define PRIu16         decimal printf format for uint16_t    6 5 2 32  define PRIu32           decimal printf format for uint32_t    6 5 2 33  define PRIu8  u     decimal printf format for uint8_t    6 5 2 34  define PRIUFASTI6         decimal printf format for uint_fast16_t    6 5 2 35  define PRIUFAST32           decimal printf format for        fast32 t    6 5 2 36  define PRIUFASTS         decimal printf format for uint_fast8_t    6 5 2 37  define PRIULEAST16         decimal printf format for uint_least16_t    6 5 2 38  define PRIULEAST32           decimal printf format for        least32 t    6 5 2 39  define PRIULEASTS  u     decimal printf format for        least8 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 27       6 5 2 40  define PRIuPTR PRIu16    decimal printf format for uintptr_t    6 5 2 41  define PRIX16  X     uppercase hexadecimal printf format for uint16_t    6 5 2 42  define PRIx16         hexadecimal printf format for uint16_t    6 5 2 43  define PRIX32  IX     uppercase hexadecimal printf format for uint32_t    6 5 2 44  define PRIx32 
268. fine set_bits_macro port mask    port      mask       int main  void       set_bits_func_wrong  PORTB  Oxaa    set_bits_func_correct   amp PORTB  0  55    set bits macro  PORTB  0    0      return  0      The first function will generate object code which is not even close to what is intended   The major problem arises when the function is called  When the compiler sees this call   it will actually pass the value of the PORTB register  using an IN instruction   instead  of passing the address of PORTB  e g  memory mapped io addr of 0x38  io port 0x18  for the mega128   This is seen clearly when looking at the disassembly of the call     set bits func wrong  PORTB                10a  6a ea ldi r22             170  106  88           r24  0  18   24  10    Oe 94 65 00     11             So  the function  once called  only sees the value of the port register and knows nothing  about which port it came from  At this point  whatever object code is generated for  the function by the compiler is irrelevant  The interested reader can examine the full  disassembly to see that the function   s body is completely fubar     The second function shows how to pass  by reference  the memory mapped address of  the io port to the function so that you can read and write to it in the function  Here s  the object code generated for the function call     set_bits_func_correct   amp PORTB  0x55      112  65   5 141 r22  0x55 j  85  114  88 e3 141 r24  0  38   56  116  90 e0 141 r25  0  00 270  118  
269. ga324P  ATmega644P  ATmega644  ATmega640   ATmegal280  ATmegal281  ATmega2560  ATmega2561  ATmega8HVA  AT   megal6HVA  ATmega406  AT90PWM1  AT90PWM2  AT90PWM2B  AT90PWM3   AT90PWM3B  AT90PWM216   AT90PWM316     9005  82      9005  162   AT90USB646  AT90USB647  AT90USB 1286  AT90USB 1287            48     6 22 2 11  define WDTO_500MS 5    See WDTO_15MS    6 22 2 12  define WDTO_60MS 2    WDTO_15MS    6 22 2 13  define WDTO_8S 9    See WDTO_15MS Note  This is only available on the ATtiny2313  ATtiny24  AT   tiny44  ATtiny84  ATtiny25  ATtiny45  ATtiny85  ATtiny261  ATtiny461  ATtiny861   ATmega48  ATmega88  ATmegal68  ATmega48P  ATmega88P  ATmegal68P  AT   mega328P  ATmegal64P  ATmega324P  ATmega644P  ATmega644  ATmega640   ATmegal280  ATmegal281  ATmega2560  ATmega2561  ATmega8HVA  AT   megal6HVA  ATmega406  ATOOPWM1  AT90PWM2  AT90PWM2B  AT90PWM3   AT90PWM3B  AT90PWM216                    16     9005  82      9005  162   AT90USB646  AT90USB647      9005  1286      9005  1287            48     6 23  lt util atomic h gt  Atomicly and Non Atomically Executed  Code Blocks    6 23 1 Detailed Description   include   util atomic h      Note     The macros in this header file require the ISO IEC 9899 1999   ISO C99   feature  of for loop variables that are declared inside the for loop itself  For that reason  this  header file can only be used if the standard level of the compiler  option    std   is  set to either c99 or gnu99     The macros in this header file deal with code blocks
270. gen    13 Supported Devices 3       13 Supported Devices  The following is a list of AVR devices currently supported by the library  Note that  actual support for some newer devices depends on the ability of the compiler assembler    to support these devices at library compile time     megaAVR Devices     atmega103    atmega128    atmega1280    atmega1281    atmega16    atmegal61    atmega162    atmega 163    atmega164p    atmega165    atmega165p    atmegal68    atmegal68p    atmega2560    atmega2561    atmega32    atmega323    atmega324p    atmega325    atmega325p    atmega3250    atmega3250p       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    13 Supported Devices       atmega328p    atmega48    atmega48p    atmega64    atmega640    atmega644    atmega644p    atmega645    atmega6450    atmega8    atmega88    atmega88p    atmega8515    atmega8535    tinyAVR Devices     attiny11  1     attiny12  1     attiny 13    attiny15  1     attiny22    attiny24    attiny25    attiny26    attiny261    attiny28  1     attiny2313       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    13 Supported Devices       attiny43u    attiny44    attiny45    attiny461    attiny48    attiny84    attiny85    attiny861    CAN AVR Devices        at90can32    at90can64     at90can128    LCD AVR Devices     atmega 169    atmega169p    atmega329    atmega329p    atmega3290    atmega3290p    atmega649    atmega6490    Lighting AVR Devices     e at90pwml       Generated on Mon
271. gen    6 14  lt avr interrupt h gt   Interrupts    111                                                          Vector name Old vector   Description Applicable for device  name  SPM_  SIG_SPM_  Store Program   AT90PWM3  AT90PWM2  AT90PWMI   READY vect READY Memory Read AT90CAN128  AT90CAN32  AT90CAN64   ATmegal28  ATmegal65  ATmegal65P   ATmegal69  ATmegal69P  ATmega325   ATmega3250  ATmega329  ATmega329P   ATmega3290  ATmega3290P  AT   mega406  ATmega64  ATmega645  AT   mega6450  ATmega649  ATmega6490   ATmegal68  ATmega48  ATmega88  AT   mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P   ATmega644  AT90USB162  AT90USB82   AT90USB1287  AT90USB1286   AT90USB647  AT90USB646  TIM0_  SIG_  Timer Counter ATtiny13  ATtiny24  ATtiny44  ATtiny84   COMPA_vect OUTPUT_  Compare Match   ATtiny45  ATtiny25  ATtiny85                       A  TIMO_  SIG_  Timer Counter ATtiny13  ATtiny24  ATtiny44  ATtiny84   COMPB_vect OUTPUT_  Compare Match   ATtiny45  ATtiny25  ATtiny85                         TIMO_OVF_  SIG_  Timer Counter0           13  ATtiny24  ATtiny44  ATtiny84   vect OVERFLOWO   Overflow ATtiny45  ATtiny25  ATtiny85             SIG_INPUT   Timer Counter1 ATtiny24  ATtiny44  ATtiny84  CAPT_vect CAPTURE1 Capture Event             SIG_  Timer Counter1 ATtiny24  ATtiny44  ATtiny84  ATtiny45   COMPA_vect OUTPUT_  Compare Match   ATtiny25  ATtiny85  COMPAREIA   A             SIG_  Timer Counter1 ATtiny24  ATtiny44  ATtiny84  ATtiny45   COM
272. generated  assembler code  Used for debugging avr gcc           msize    Dump the address  size  and relative cost of each statement into comments in the gen   erated assembler code  Used for debugging avr gcc           mdeb    Generate lots of debugging information to stderr        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 350       9 11 1 2 Selected general compiler options        following general gcc options  might be of some interest to AVR users          On    Optimization level n  Increasing n is meant to optimize more  an optimization level of  0 means no optimization at all  which is the default if no    O option is present  The  special option    Os is meant to turn on all    O2 optimizations that are not expected to  increase code size     Note that at    O3  gcc attempts to inline all  simple  functions  For the AVR target   this will normally constitute a large pessimization due to the code increasement  The  only other optimization turned on with  03 is  frename registers  which could  rather be enabled manually instead        A simple  O option is equivalent to  01     Note also that turning off all optimizations will prevent some warnings from being  issued since the generation of those warnings depends on code analysis steps that are  only performed when optimizing  unreachable code  unused variables      See also the appropriate FAQ entry for issues regarding debugging optimized code        Wa assembler options
273. geting specifically the AVR  or something that is AVR  specific about GCC  The term  GCC  is usually used to refer to something generic  about GCC  or about GCC as a whole     GCC is different from most other compilers  GCC focuses on translating a high level  language to the target assembly only  AVR GCC has three available compilers for the  AVR  C language  C    and Ada  The compiler itself does not assemble or link the  final code     GCC is also known as a  driver  program  in that it knows about  and drives other  programs seamlessly to create the final output  The assembler  and the linker are part  of another open source project called GNU Binutils  GCC knows how to drive the  GNU assembler  gas  to assemble the output of the compiler  GCC knows how to drive  the GNU linker  Id  to link all of the object modules into a final executable     The two projects  GCC and Binutils  are very much interrelated and many of the same  volunteers work on both open source projects     When GCC is built for the AVR target  the actual program names are prefixed with   avr    So the actual executable name for AVR GCC is  avr gcc  The name  avr gcc   is used in documentation and discussion when referring to the program itself and not  just the whole AVR GCC system     See the GCC Web Site and GCC User Manual for more information about GCC     9 1 4 GNU Binutils    The name GNU Binutils stands for  Binary Utilities   It contains the GNU assembler   gas   and the GNU linker  ld   but als
274. gnu org onlinedocs     9 7 How to Build a Library  9 7 1 Introduction    So you keep reusing the same functions that you created over and over  Tired of cut and  paste going from one project to the next  Would you like to reduce your maintenance  overhead  Then you re ready to create your own library  Code reuse is a very laudable  goal  With some upfront investment  you can save time and energy on future projects  by having ready to go libraries  This chapter describes some background information   design considerations  and practical knowledge that you will need to create and use  your own libraries     9 7 2 How the Linker Works    The compiler compiles a single high level language file  C language  for example  into  a single object module file  The linker  Id  can only work with object modules to link  them together  Object modules are the smallest unit that the linker works with     Typically  on the linker command line  you will specify a set of object modules  that  has been previously compiled  and then a list of libraries  including the Standard C  Library  The linker takes the set of object modules that you specify on the command  line and links them together  Afterwards there will probably be a set of  undefined       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 7 How to Build a Library 299       references   A reference is essentially a function call  An undefined reference is a  function call  with no defined function to match the call     
275. gt   Character Operations  6 31 Detailed Description  These functions perform various operations on characters      include  lt ctype h gt     Character classification routines    These functions perform character classification  They return true or false status de   pending whether the character passed to the function falls into the function s classifi   cation  i e  isdigit   returns true if its argument is any value    0    though  9   inclusive      int isalnum  int c   ATTR_CONST   int isalpha  int c  ATTR_CONST   int isascii  int c  ATTR CONST  int isblank  int     ATTR  CONST  intiscntrl  int c  ATTR CONST  int isdigit  int      ATTR  CONST  int isgraph  int     ATTR CONST  int islower  int c            CONST _  intisprint  int      ATTR  CONST  int ispunct  int     ATTR  CONST  int isspace  int      ATTR  CONST  int isupper  int c  ATTR CONST  intisxdigit  int     ATTR  CONST                                        Character convertion routines       If c is not an unsigned char value  or EOF  the behaviour of these functions is undefined        inttoascii  int  c   ATTR  CONST     int tolower  int     ATTR  CONST     int toupper  int     ATTR CONST             6 3 2 Function Documentation    6 3 2 1 intisalnum  int  c     Checks for an alphanumeric character  It is equivalent to  isalpha c      isdigit c          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    63  lt ctype h gt   Character Operations 18       6 3 2 2 int isalpha  int        Checks for
276. gt   General utilities 76       6 10 4 12 void free  void    ptr     The free   function causes the allocated memory referenced by pt r to be made avail   able for future allocations  If pt r is NULL  no action occurs     6 10 4 13 charx itoa  int        char x  s int radix   Convert an integer to a string     The function itoa   converts the integer value from va1 into an ASCII representation  that will be stored under s  The caller is responsible for providing sufficient storage in  s     Note     The minimal size of the buffer s depends on the choice of radix  For example  if  the radix is 2  binary   you need to supply a buffer with a minimal length of 8    sizeof  int    1 characters  i e  one character for each bit plus one for the string  terminator  Using a larger radix will require a smaller minimal buffer size     Warning   If the buffer is too small  you risk a buffer overflow   Conversion is done using the radix as base  which may be a number between 2     binary conversion  and up to 36  If radix is greater than 10  the next digit after   9  will be the letter  a      If radix is 10 and val is negative  a minus sign will be prepended     The itoa   function returns the pointer passed as s     6 10 4 14 long labs  long       The labs   function computes the absolute value of the long integer i     Note     The abs   and labs   functions        builtins of gcc     6 10 4 15 Idiv_tldiv  long __num  long  denom            Idiv   function computes the value num denom 
277. h  224  INTMAX_C   avr_stdint  45  INTMAX MAX   avr_stdint  45  INTMAX_MIN   avr_stdint  45  intmax_t   avr_stdint  49  INTPTR_MAX   avr_stdint  45  INTPTR_MIN   avr_stdint  45  intptr_t   avr_stdint  49  inttypes h  225  io h  227  isalnum   ctype  16  isalpha   ctype  16  isascli   ctype  17  isblank   ctype  17  iscntrl       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    375       ctype  17  isdigit  ctype  17  isfinite  avr_math  35  isgraph  ctype  17  isinf  avr_math  35  islower  ctype  17  isnan  avr_math  35  isprint  ctype  17  ispunct  ctype  17  ISR  avr_interrupts  120  ISR_ALIAS  avr_interrupts  120  ISR_ALIASOF  avr_interrupts  121  ISR_BLOCK  avr_interrupts  121  ISR_NAKED  avr_interrupts  121  ISR_NOBLOCK  avr_interrupts  122  isspace  ctype  17  isupper  ctype  17  isxdigit  ctype  18  itoa  avr_stdlib  75    labs   avr_stdlib  75  ldexp   avr math  35  Idiv   avr_stdlib  75  Idiv_t  212   quot  212    rem  212  log   avr_math  35  log10   avr_math  35  longjmp   setjmp  38  loop_until_bit_is_clear   avr_sfr  143  loop_until_bit_is_set   avr_sfr  143  Itoa   avr_stdlib  75    M_PI   avr_math  32  M_SQRT2   avr_math  32  malloc   avr_stdlib  76  math h  227  memccpy   avr string  83  memcopy S  228  memchr   avr string  83  memchr S  229  memchr P   avr pgmspace  130  memchr PS  229  memcmp   avr_string  83  memcmp S  229  memcmp P   avr pgmspace  130  memcemp PS  229  memcpy   avr string  84  memcopy S  229  memcpy_P   avr_pgmspac
278. h gt   Compatibility with  IAR EWB 3 x  171    lt ctype h gt   Character Operations  16    lt errno h gt   System Errors  18    lt inttypes h gt   Integer Type conversions   19    lt math h gt   Mathematics  31    lt setjmp h gt   Non local goto  37    lt stdint h gt   Standard Integer Types  39    lt stdio h gt   Standard IO facilities  51    lt stdlib h gt   General utilities  70    lt string h gt   Strings  81    lt util atomic h gt  Atomicly and Non   Atomically Executed Code  Blocks  151    lt util crc16 h gt   CRC Computations  155    version    Deprecated     lt util delay h  gt   Convenience functions  for busy wait delay loops  158   lt util delay_basic h gt   Basic busy wait  delay loops  159   lt util parity h gt   Parity bit generation  160   lt util setbaud h gt   Helper macros for  baud rate calculations  161   lt util twi h gt   TWI bit mask definitions   163  _BV  avr_sfr  142  _EEGET  avr_eeprom  100  _EEPUT  avr_eeprom  100  _FDEV_EOF  avr_stdio  56  _FDEV_ERR  avr_stdio  56  _FDEV_SETUP_READ  avr_stdio  56  _FDEV_SETUP_RW  avr_stdio  56  _FDEV_SETUP_WRITE  avr_stdio  56  _FFS  avr_string  82  AVR_LIBC_DATE  avr_version  147  AVR_LIBC_DATE_STRING__  avr_version  147  AVR_LIBC_MAJOR  avr_version  147  AVR         MINOR  avr version  147    AVR        REVISION    avr version  147    AVR LIBC VERSION STRING    avr version  147    AVR        VERSION    avr version  147    EEPROM REG LOCATIONS                  INDEX    364       avr_eeprom  99  ELPM classic  pgms
279. h is less elegant but could be applied to all compiler versions     Empty interruptservice routines In rare circumstances  in interrupt vector does not  need any code to be implemented at all  The vector must be declared anyway  so when  the interrupt triggers it won t execute the BADISR vect code  which by default restarts  the application      This could for example be the case for interrupts that are solely enabled for the purpose  of getting the controller out of sleep_mode       A handler for such an interrupt vector can be declared using the EMPTY                         macro     EMPTY INTERRUPT         vect      Note     There is no body to this macro     Manually defined ISRs In some circumstances  the compiler generated prologue  and epilogue of the ISR might not be optimal for the job  and a manually defined ISR  could be considered particularly to speedup the interrupt handling        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 105       One solution to this could be to implement the entire ISR as manual assembly code in  a separate  assembly  file  See Combining C and assembly source files for an example  of how to implement it that way     Another solution is to still implement the ISR in C language but take over the com   piler s job of generating the prologue and epilogue  This can be done using the ISR_   NAKED attribute to the ISRO macro  Note that the compiler does not generate any   thing as pro
280. har string_5   PROGMEM    String 5      Then use the new symbols in your table  like so     PGM_P string_table   PROGMEM        string_1    string_2    string_3    string_4    string_5        Now this has the effect of putting string_table in Program Space  where  string_table is      array of pointers to characters  strings   where each pointer  is a pointer to the Program Space  where each string is also stored     The PGM_P type above is also a macro that defined as a pointer to a character in the  Program Space     Retrieving the strings are a different matter  You probably don t want to pull the string  out of Program Space  byte by byte  using the pgm_read_byte    macro  There are  other functions declared in the  lt avr pgmspace h gt  header file that work with strings  that are stored in the Program Space     For example if you want to copy the string from Program Space to a buffer in RAM   like an automatic variable inside a function  that is allocated on the stack   you can do  this     void foo void      char buffer 10      for  unsigned char i   0      lt  5  itt      strcpy_P  buffer                     read word  amp  string table i            Display buffer      LCD        return        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs 280                 the string_table array is stored in Program Space  so we access it normally   as if were stored      Data Space  then take the address of the location we want
281. hat matches one of  the characters in accept  or NULL if no such character is found  The terminating  zero is not considered as a part of string  if one or both args are empty  the result  will NULL     6 16 4223        P strrchr P         P s  int val   Locate character in string     The strrchr_P   function returns a pointer to the last occurrence of the character val  in the flash string s     Returns     The strrchr       function returns a pointer to the matched character or NULL if the  character is not found        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 17  lt avr power h gt   Power Reduction Management 137       6 16 4 24 char    strsep_P  char      sp            delim   Parse a string into tokens     The strsep_P   function locates  in the string referenced by   sp  the first occurrence of  any character in the string delim  or the terminating     0    character  and replaces it  with a   0   The location of the next character after the delimiter character  or NULL   if the end of the string was reached  is stored in   sp  An  empty  field  i e  one  caused by two adjacent delimiter characters  can be detected by comparing the location  referenced by the pointer returned in        to 7 07  This function is similar to strsep    except that delim is a pointer to a string in program space     Returns     The strsep_P   function returns a pointer to the original value of         If        is  initially NULL  strsep P   returns NULL     6 16 4 
282. he application will auto   matically scale to new target softclock or master CPU frequencies without having to  manually re calculate hardcoded constants        6 35 3 2 Part 2  Variable definitions The int flags structure demonstrates a  way to allocate bit variables in memory  Each of the interrupt service routines just sets  one bit within that structure  and the application   s main loop then monitors the bits in  order to act appropriately     Like all variables that are used to communicate values between an interrupt service  routine and the main application  it is declared volatile     The variable ee_pwm is not a variable in the classical C sense that could be used as an  lvalue or within an expression to obtain its value  Instead  the      attribute    section   eeprom        marks it as belonging to the EEPROM section  This section is merely used as a place   holder so the compiler can arrange for each individual variable s location in EEPROM   The compiler will also keep track of initial values assigned  and usually the Makefile  is arranged to extract these initial values into a separate load file  Largedemo     eeprom x in this case  that can be used to initialize the EEPROM     The actual EEPROM IO must be performed manually     Similarly  the variable mcucsr is kept in the  noinit section in order to prevent it from  being cleared upon application startup        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project 
283. he compiler to use the symbol name clock rather than value   This makes sense only for external or static variables  because local variables do not  have symbolic names in the assembler code  However  local variables may be held in  registers     With AVR GCC you can specify the use of a specific register     void Count  void          register unsigned char counter asm  r3       some code     asm volatile  clr r3       more code          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 7 How to Build a Library 298       The assembler instruction   clr r3   will clear the variable counter  AVR GCC will  not completely reserve the specified register  If the optimizer recognizes that the            able will not be referenced any longer  the register may be re used  But the compiler  is not able to check wether this register usage conflicts with any predefined register  If  you reserve too many registers in this way  the compiler may even run out of registers  during code generation     In order to change the name of a function  you need a prototype declaration  because  the compiler will not accept the asm keyword in the function definition     extern long Calc void  asm   CALCULATE       Calling the function Calc    will create assembler instructions to call the function  CALCULATE        9 6 8 Links    For a more thorough discussion of inline assembly usage  see the gcc user  manual  The latest version of the gcc manual is always available here   http   gcc 
284. he global CPU state  Thus  it is usually necessary  to save at least the state of the flag bits in SREG   Note that this serves as an example          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs 285          here only since actually  all the following instructions would not modify SREG either   but that s not commonly the case      Also  it must be made sure that registers used inside the interrupt routine do not conflict  with those used outside  In the case of a RAM less device like the AT90S1200  this can  only be done by agreeing on a set of registers to be used exclusively inside the interrupt  routine  there would not be any other chance to  save  a register anywhere     If the interrupt routine is to be linked together with C modules  care must be taken  to follow the register usage guidelines imposed by the C compiler  Also  any register  modified inside the interrupt sevice needs to be saved  usually on the stack     Note  10     As explained in Interrupts  a global  catch all  interrupt handler that gets all unassigned  interrupt vectors can be installed using the name __vector_default  This must  be  global  and obviously  should end in a reti instruction   By default  a jump to  location 0 would be implied instead      9 5 4 Pseudo ops and operators  The available pseudo ops in the assembler are described in the GNU assembler  gas     manual  The manual can be found online as part of the current binutils rel
285. he number of characters in src        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 135       6 16 4 17 int strncasecmp_P  const char    s1         P s2  size_t n   Compare two strings ignoring case   The strncasecmp_P   function is similar to strcasecmp_P    except it only compares the  first n characters of 51   Parameters   sl A pointer to a string in the devices SRAM     s2 A pointer to a string in the devices Flash     n The maximum number of bytes to compare     Returns     The strncasecmp_P   function returns an integer less than  equal to  or greater  than zero if s1  or the first n bytes thereof  is found  respectively  to be less  than  to match  or be greater than s2  A consequence of the ordering used by  strncasecmp_P   is that if s1 is an initial substring of 52  then 51 is considered to  be  less than  s2     6 16 4 18 char x strncat P  char x dest         P src  size_t len    Concatenate two strings    The strncat_P   function is similar to strncat    except that the src string must be located  in program space  flash     Returns     The strncat_P   function returns a pointer to the resulting string dest     6 16 4 19 int strncmp P  const char   81         P 52  size_t n     The strncmp_P   function is similar to stremp_P   except it only compares the first  at  most  n characters of 51 and 52     Returns     The strncmp_P   function returns an integer less than  equal to  or greater than 
286. he slave is to read or write data during the next  cycles   There is also an option to have devices using 10 bit addresses but that is not  covered by this example      6 37 2        TWI example project    The ATmega TWI hardware supports both  master and slave operation  This example  will only demonstrate how to use an AVR microcontroller as TWI master  The imple   mentation is kept simple in order to concentrate on the steps that are required to talk to  a TWI slave  so all processing is done in polled mode  waiting for the TWI interface to  indicate that the next processing step is due  by setting the TWINT interrupt bit   If it  is desired to have the entire TWI communication happen in  background   all this can  be implemented in an interrupt controlled way  where only the start condition needs to  be triggered from outside the interrupt routine     There is a variety of slave devices available that can be connected to a TWI bus  For the  purpose of this example  an EEPROM device out of the industry standard 24Cxx series  has been chosen  where xx can be one of 01  02  04  08  or 16  which are available from  various vendors  The choice was almost arbitrary  mainly triggered by the fact that an  EEPROM device is being talked to in both directions  reading and writing the slave  device  so the example will demonstrate the details of both     Usually  there is probably not much need to add more EEPROM to an ATmega system  that way  the smallest possible AVR device that of
287. he strcasecmp_P   function compares the two strings 51 and s2  ignoring the case of  the characters    Parameters     sl A pointer to a string in the devices SRAM     s2 A pointer to a string in the devices Flash     Returns     The strcasecmp_P   function returns an integer less than  equal to  or greater than  zero if s1 is found  respectively  to be less than  to match  or be greater than s2   A consequence of the ordering used by strcasecmp      is that if s1 is an initial  substring of s2  then s1 is considered to be  less than  s2     6 16 4 7 char x strcasestr P  const char    s1         P 52     This funtion is similar to strcasestr   except that s2 is pointer to a string in program  space     6 16 4 8 char x strcat P  char   dest  PGM P src    The strcat_P   function is similar to strcat   except that the src string must be located  in program space  flash     Returns     The strcat   function returns a pointer to the resulting string dest        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pgmspace h gt   Program Space Utilities 133       6 16 4 9           strchr P         P s  int val   Locate character in program space string     The strchr_P   function locates the first occurrence of va1  converted to a char  in the  string pointed to by s in program space  The terminating null character is considered  to be part of the string     The strchr P   function is similar to strchr   except that s is pointer to a string in  program spac
288. his combined macro might cause race conditions in some situations  the individual  steps of manipulating the sleep enable  SE  bit  and actually issuing the SLEEP in   struction are provided in the macros sleep_enable    sleep_disable    and  sleep cpu    This also allows for test and sleep scenarios that take care of not  missing the interrupt that will awake the device from sleep                       Example      include  lt avr interrupt h gt    include  lt avr sleep h gt     cli      if  some_condition     sleep_enable     sei     sleep cpu     sleep disable           sei       This sequence ensures an atomic test of some_condition with interrupts being dis   abled  If the condition is met  sleep mode will be prepared  and the SLEEP instruction  will be scheduled immediately after an SEI instruction  As the intruction right after  the SEI is guaranteed to be executed before an interrupt could trigger  it is sure the  device will really be put to sleep                    Sleep Functions       void set sleep mode  uint8 t mode     void sleep mode  void        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 20  lt avr sleep h gt   Power Management and Sleep Modes 146          void sleep_enable  void      void sleep_disable  void      void sleep_cpu  void     Sleep Modes  Note     Some of these modes are not available on all devices  See the datasheet for target  device for the available sleep modes      define SLEEP_MODE_IDLE 0   define SLEEP_MODE_ADC _BV
289. ibc from cvs  you will have to run the  bootstrap script before using either of the build methods described below     To build and install avr libc     gunzip  c avr libc   version   tar gz   tar xf     cd avr libc  lt version gt      configure   prefix  PREFIX   build    config guess     host avr  make   make install         Xr Xr ox or    9 10 7 AVRDUDE    Note     It has been ported to windows  via MinGW or cygwin   Linux and Solaris  Other  Unix systems should be trivial to port to        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 334       avrdude is part of the FreeBSD ports system  To install it  simply do the following       cd  usr ports devel avrdude    make install    Note     Installation into the default location usually requires root permissions  However   running the program only requires access permissions to the appropriate ppi  4   device     Building and installing on other systems should use the configure system  as such     gunzip     avrdude  lt version gt  tar gz   tar xf    cd avrdude  lt version gt    mkdir obj avr   cd obj avr      configure   prefix S  PREFIX   make   make install         XY X Xr X d WH    9 10 8      for the AVR target  GDB also uses the configure system  so to build and install     bunzip2  c gdb   version   tar bz2   tar xf    cd gdb   version     mkdir obj avr   cd obj avr      configure   prefix  PREFIX   target avr  make   make install         4   X o X X d 
290. il_setbaud  BAUD_TOL  163  UBRR_VALUE  163  UBRRH_VALUE  163  UBRRL_VALUE  163  USE_2X  163  util_twi  TW_BUS_ERROR  165  TW_MR_ARB_LOST  165  TW      DATA         165  TW      DATA  NACK  165  TW MR  SLA ACK  165  TW MR  SLA NACK  165  TW MT ARB LOST  165  TW  MT DATA  ACK  165  TW  MT DATA  NACK  165  TW  MT SLA         165  TW MT SLA           165  TW  NO INFO  165  TW  READ  166  TW REP START  166  TW SR ARB LOST GCALL    ACK  166  TW SR ARB LOST SLA ACK   166  TW SR DATA  ACK  166  TW  SR  DATA  NACK  166  TW SR GCALL ACK  166  TW SR GCALL DATA ACK  166  TW SR GCALL DATA  NACK   166  TW SR SLA ACK  166  TW SR STOP  166  TW ST ARB LOST SLA ACK   167  TW ST DATA         167  TW ST          NACK  167  TW ST LAST DATA  167  TW ST SLA          167  TW  START  167  TW  STATUS  167  TW STATUS MASK  167  TW WRITE  167                   utoa  avr stdlib  80    vfprintf   avr  stdio  63  vfprintf P   avr  stdio  66  vfscanf   avr stdio  66  vfscanf P   avr  stdio  69  vprintf   avr stdio  69  vscanf   avr  stdio  69  vsnprintf   avr stdio  69  vsnprintf P   avr stdio  69  vsprintf   avr stdio  69  vsprintf P   avr  stdio  69    wdt h  259   _        write  259  wdt disable   avr watchdog  149  wdt enable   avr watchdog  149  wdt reset   avr watchdog  149  WDTO_120MS   avr_watchdog  150  WDTO 15MS   avr watchdog  150  WDTO 15   avr watchdog  150  WDTO 250MS   avr watchdog  150  WDTO 2S   avr watchdog  150  WDTO 30MS   avr watchdog  150  WDTO  45   avr watchdog  150       Generated 
291. ill be called with the new request size  the existing data will be       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 3 Memory Sections 271       copied over  and free   will be called on the old region     933 Memory Sections    Remarks   Need to list all the sections which are available to the avr   Weak Bindings    FIXME  need to discuss the  weak directive     The following describes the various sections available     9 3 1         text Section    The  text section contains the actual machine instructions which make up your program   This section is further subdivided by the  initN and  finiN sections dicussed below     Note     The avr size program  part of binutils   coming from a Unix background   doesn t account for the  data initialization space added to the  text section  so in  order to know how much flash the final program will consume  one needs to add  the values for both   text and  data  but not  bss   while the amount of pre allocated  SRAM is the sum of  data and  bss     9 3 2         data Section    This section contains static data which was defined in your code  Things like the fol   lowing would end up in  data     char err_str      Your program has died    horrible death       struct point pt     1  1       It is possible to tell the linker the SRAM address of the beginning of the  data section   This is accomplished by adding  W1  Tdata  addr to the avr gcc command  used to the link your program  Not that addr must be offset by a
292. ill usually be able to get your problem resolved  You can subscribe to the  list at http   lists nongnu org mailman listinfo avr gcc list    Before posting to the list  you might want to try reading the Frequently Asked Ques   tions chapter of this document     Note     If you think you   ve found a bug  or have a suggestion for an improvement  ei   ther in this documentation or in the library itself  please use the bug tracker at  https   savannah nongnu org bugs  group avr libc to ensure  the issue won   t be forgotten     12 General information about this library    In general  it has been the goal to stick as best as possible to established standards  while implementing this library  Commonly  this refers to the C library as described by  the ANSI X3 159 1989 and ISO IEC 9899 1990   ANSI C   standard  as well as parts  of their successor ISO IEC 9899 1999   C99    Some additions have been inspired by  other standards like IEEE Std 1003 1 1988   POSIX 1    while other extensions are  purely AVR specific  like the entire program space string interface      Unless otherwise noted  functions of this library are not guaranteed to be reentrant  In  particular  any functions that store local state are known to be non reentrant  as well  as functions that manipulate IO registers like the EEPROM access routines  If these  functions are used within both standard and interrupt contexts undefined behaviour will  result        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxy
293. inct memory areas  this is the safest way to avoid a  stack heap collision        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 2 Memory Areas and Using malloc   268       9 2 3 Tunables for malloc      There are a number of variables that can be tuned to adapt the behavior of malloc    to the expected requirements and constraints of the application  Any changes to these  tunables should be made before the very first call to malloc    Note that some library  functions might also use dynamic memory  notably those from the  lt stdio h gt   Stan   dard IO facilities   so make sure the changes will be done early enough in the startup  sequence     The variables malloc heap start and  malloc heap end can be used  to restrict the malloc   function to a certain memory region  These variables are stati   cally initialized to point to     heap  start and heap end  respectively  where    heap start is filled in by the linker to point just beyond  bss         heap  end  is set to 0 which makes malloc   assume the heap is below the stack     If the heap is going to be moved to external RAM  _ malloc heap        must be  adjusted accordingly  This can either be done at run time  by writing directly to this  variable  or it can be done automatically at link time  by adjusting the value of the  symbol heap end     The following example shows a linker command to relocate the entire  data and  bss  segments  and the heap to location 0x1100 in external RAM  The heap will e
294. ine fdev set udata stream  u  do    stream   gt  udata   u    while 0     This macro inserts a pointer to user defined data into a FILE stream object     The user data can be useful for tracking state in the put and get functions supplied to  the fdevopen   function     6 9 2 10  define FDEV_SETUP_STREAM put  get  rwflag   Initializer for a user supplied stdio stream     This macro acts similar to fdev_setup_stream    but it is to be used as the initializer of  a variable of type FILE     The remaining arguments are to be used as explained in fdev_setup_stream       6 9 2 11  define fdev_setup_stream stream  put  get  rwflag   Setup a user supplied buffer as an stdio stream     This macro takes a user supplied buffer st ream  and sets it up as a stream that is valid  for stdio operations  similar to one that has been obtained dynamically from fdevopen     The buffer to setup must be of type FILE     The arguments put and get are identical to those that need to be passed to fdevopen       The rwflag argument can take one of the values FDEV SETUP READ  _FDEV_   SETUP WRITE  or __FDEV_SETUP_RW  for read  write  or read write intent  respec   tively        Note     No assignments to the standard streams will be performed by fdev_setup_stream     If standard streams are to be used  these need to be assigned by the user  See also  under Running stdio without malloc       6 9 2 12  define FILE struct file       FILE is the opaque structure that is passed around between the various s
295. init4 defines the code which takes care of copying  the contents of  data from the flash to SRAM  For all other devices  this code as well  as the code to zero out the  bss section is loaded from libgcc a      init5    Unused  User definable   1016   Unused for C programs  but used for constructors in C   programs    init7   Unused  User definable     init8        Unused  User definable   init9     Jumps into main          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 3 Memory Sections 274       9 3 7         finiN Sections    These sections are used to define the exit code executed after return from main   or a  call to exit    These all are subparts of the  text section     The  finiN sections are executed in descending order from 9 to 0     finit9     Unused  User definable  This is effectively where   exit   starts      fini8   Unused  User definable     fini7   Unused  User definable     fini6     Unused for C programs  but used for destructors in C   programs     fini5   Unused  User definable     fini4   Unused  User definable     fini3   Unused  User definable     fini2   Unused  User definable     finil   Unused  User definable     fini     Goes into an infinite loop after program termination and completion of any exit    code  execution of code in the  fini9   gt   finil sections      9 3 8 Using Sections in Assembler Code    Example        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 4 Data in Program Space 275        incl
296. instead of an application     See the GNU Binutils manual for more information on the ar program     9 7 5 Using a Library   To use a library  use the    1 switch on your linker command line  The string immedi   ately following the     1 is the unique part of the library filename that the linker will link  in  For example  if you use       im    this will expand to the library filename     libm a       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 8 Porting From IAR to AVR GCC 301       which happens to be the math library included in avr libc     If you use this on your linker command line    lgrinutt flt  then the linker will look for a library called     libprint                This is why naming your library is so important when you create it     The linker will search libraries in the order that they appear on the command line   Whichever function is found first that matches the undefined reference  it will be linked  in     There are also command line switches that tell GCC which directory to look in   L   for the libraries that are specified to be linke in with    1     See the GNU Binutils manual for more information on the GNU linker  18  program     9 8 Porting From        to AVR GCC  9 8 1 Introduction    C language was designed to be a portable language  There two main types of port   ing activities  porting an application to a different platform  OS and or processor    and porting to a different compiler  Porting to a different compiler can b
297. ion of channel 0 is just changing from up to down  Likewise  an  overflow interrupt will be generated whenever the countdown reached BOTTOM  value  0   where the counter will again alter its counting direction to upwards  This informa   tion is needed in order to know whether the current counter value of TCNTO is to be  evaluated from bottom or top     Further  ioinit    activates the pin change interrupt PCINTO on any edge of PB4   Finally  PB1  OCOB  will be activated as an output pin  and global interrupts are being  enabled     In the ATtiny45 setup  the C code contains an ISR for PCINTO  At each pin change  interrupt  it will first be analyzed whether the interrupt was caused by a rising or a  falling edge  In case of the rising edge  timer 1 will be started with a prescaler of 16  after clearing the current timer value  Then  at the falling edge  the current timer value  will be recorded  and timer 1 stopped   the pin change interrupt will be suspended  and  the upper layer will be notified that the incoming PWM measurement data is available     Function main    first initializes the hardware by calling ioinit     and then waits  until some incoming PWM value is available  If it is  the output PWM will be adjusted  by computing the relative value of the incoming PWM  Finally  the pin change interrupt  is re enabled  and the CPU is put to sleep     6 33 2 2 project h      order for the interrupt service routines to be as fast as possi   ble  some of the CPU registers are
298. irst  resolving all  include   define etc   directives  The resulting program text will then be passed on to the assembler                 As the C preprocessor strips all C style comments  preprocessed assembly source files  can have both  C style                     as well as assembly style          comments     At the top  the IO register definition      avr io h and the project declaration file  project  hare included  The remainder of the file is conditionally assembled only if  the target MCU type is an ATtiny13  so it will be completely ignored for the ATtiny45  option     Next are the two interrupt service routines for timer 0 compare A match  timer 0 hits  TOP  as OCROA is set to 255  and timer 0 overflow  timer 0 hits BOTTOM   As dis   cussed above  these are kept as short as possible  They only save SREG  as the flags  will be modified by the INC instruction   increment the counter_hi variable which  forms the high part of the current time counter  the low part is formed by querying  TCNTO directly   and clear or set the variable flags  respectively  in order to note  the current counting direction  The RETI instruction terminates these interrupt service  routines  Total cycle count is 8 CPU cycles  so together with the 4 CPU cycles needed  for interrupt setup  and the 2 cycles for the RJMP from the interrupt vector to the han   dler  these routines will require 14 out of each 256 CPU cycles  or about 5 96 of the  overall CPU time           The pin change interrup
299. is fed into PB4  It will generate a pin change interrupt  there on eache edge of the incoming signal     The outgoing PWM is generated through OCOB of timer channel 0  PB 1   For demon   stration purposes  a LED should be connected to that pin  like  one of the LEDs of an  5    500             controllers run on their internal calibrated RC oscillators  1 2       on the             Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 333 Combining C and assembly source files 175       tiny13  and 1 0 MHz on the ATtiny45     6 33 2 A code walkthrough    6 33 2 11 asmdemo c After the usual include files  two variables are defined  The  first one  pwm_incoming is used to communicate the most recent pulse width de   tected by the incoming PWM decoder up to the main loop     The second variable actually only constitutes of a single bit  intbits pwm_   received  This bit will be set whenever the incoming PWM decoder has updated  pwm_incoming     Both variables are marked volatile to ensure their readers will always pick up an up   dated value  as both variables will be set by interrupt service routines     The function ioinit    initializes the microcontroller peripheral devices  In partic   ular  it starts timer 0 to generate the outgoing PWM signal on OCOB  Setting OCROA  to 255  which is the TOP value of timer 0  is used to generate a timer 0 overflow A  interrupt on the ATtiny13  This interrupt is used to inform the incoming PWM decoder  that the counting direct
300. is instructions  without the SFR    IO_REG_P test  if you know that the register is in the I O space  as with SREG  for  example   If it isn t  the assembler will complain  I O address out of range 0   0x3f    so this should be fairly safe           If you do not define ___ SFR  OFFSET  so it will be 0x20 by default   all special register  addresses are defined as memory addresses  so SREG is Ox5f   and  if code size and  speed are not important  and you don t like the ugly  if above  you can always use  lds sts to access them  But  this will not work if SFR OFFSET    0x20  so use a  different macro  defined only if     SFR  OFFSET    0x20  for safety                 sts _SFR_ADDR SPMCR   r24    In C programs  all    combinations of  SFR    5   COMPAT and SFR OFFSET         supported   the SFR  ADDR  SPMCR  macro        be used to get the address of the  SPMCR register  0x57 or 0x68 depending on device            Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 19  lt avr sfr_defs h gt   Special function registers 142       6 19  lt avr sfr_defs h gt   Special function registers  6 19 1 Detailed Description    When working with microcontrollers  many of the tasks usually consist of controlling  the peripherals that are connected to the device  respectively programming the subsys   tems that are contained in the controller  which by itself communicate with the circuitry  connected to the controller      The AVR series of microcontrollers offers two different 
301. ite_extended address        Value           __asm__ __volatile__     movw r30   A3 n t    sts  1   C3 n t    sts  0   2NnNt    spm n t      su    i SFR_MEM_ADDR __SPM_REG      i  SFR_MEM_ADDR RAMPZ           e    r    uint8 t   BOOT PAGE WRITE                       uint32_t address    130    EI    8 5 2 11  define boot page write normal address        Value           __asm__ __volatile__     movw r30   2 n t    sts  0   1 n t    spm n t      su    i SFR_MEM_ADDR __SPM_REG                 r    uint8 t  BOOT PAGE WRITE     r    uint16_t  address    E30    32    8 5 2 12  define boot rww enable      Value       asm    volatile       sts  0   1 n t         spmNn Nc    i    SFR MEM ADDR  5     REG      r    uint8 t   BOOT RWW ENABLE     coU E PEE V                       e                  Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 6       16    File Reference 221       8 5 2 13  define    Value           asm     boot_rww_enable_alternate           volatile       sts  0    spm n t        word Oxffff n t      nop  n t        i   _SFR_MEM_ADDR __SPM_REG       uint8_t __BOOT_RWW_ENABLE              1NnNt                8 6       16    File Reference    8 6 1 Detailed Description    Functions       Static     static     static     static    inline    uint16_t _crc16_update  uint16_t __crc  uint8_t _ data        inline    uint16_t_crc_xmodem_update  uint16 t  crc uint8 t  data        inline    uint16_t crc ccitt update  uint16 t     crc  uint8 t     data        i
302. jects are provided to illustrate several aspects of using the open   source utilities for the AVR controller series  It should be kept in mind that these de   mos serve mainly educational purposes  and are normally not directly suitable for use  in any production environment  Usually  they have been kept as simple as sufficient to  demonstrate one particular feature     The simple project is somewhat like the  Hello world   application for a microcon   troller  about the most simple project that can be done  It is explained in good detail        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 32 Demo projects 173       to allow the reader to understand the basic concepts behind using the tools on an AVR  microcontroller     The more sophisticated demo project builds on top of that simple project  and adds  some controls to it  It touches a number of avr libc s basic concepts on its way     A comprehensive example on using the standard IO facilities intends to explain that  complex topic  using a practical microcontroller peripheral setup with one RS 232 con   nection  and an HD44780 compatible industry standard LCD display     The Example using the two wire interface  TWI  project explains the use of the two   wire hardware interface  also known as  I2C   that is present on many AVR controllers     Finally  the Combining C and assembly source files demo shows how C and assem   bly language source files can collaborate within one project  While the overall p
303. l  As this timer channel is required to run the out   going PWM signal generation  the incoming PWM decoding had to be adjusted to the  constraints set by the outgoing PWM     As PWM generation toggles the counting direction of timer 0 between up and down  after each 256 timer cycles  the current time cannot be deduced by reading TCNTO  only  but the current counting direction of the timer needs to be considered as well   This requires servicing interrupts whenever the timer hits TOP  255  and BOTTOM  0   to learn about each change of the counting direction  For PWM generation  it is usually  desired to run it at the highest possible speed so filtering the PWM frequency from the  modulated output signal is made easy  Thus  the PWM timer runs at full CPU speed   This causes the overflow and compare match interrupts to be triggered each 256 CPU  clocks  so they must run with the minimal number of processor cycles possible in order  to not impose a too high CPU load by these interrupt service routines  This is the main  reason to implement the entire interrupt handling in fine tuned assembly code rather  than in C     In order to verify parts of the algorithm  and the underlying hardware  the demo has  been set up in a way so the pin compatible but more expensive ATtiny45  or its siblings  ATtiny25 and ATtiny85  could be used as well  In that case  no separate assembly code  is required  as two timer channels are avaible     6 33 1 Hardware setup    The incoming PWM pulse train 
304. l not be crashed  For default version the width field  and the  pad to left    symbol minus   option will work in this case     e The hh length modifier is ignored  char argument is promouted to int    More exactly  this realization does not check the number of h symbols     e But the 11 length modifier will to abort the output  as this realization does  not operate Long long arguments       The variable width or precision field  an asterisk    symbol  is not realized  and will to abort the output     6 9 3 33 int vfprintf_P  FILE    stream  const char x fmt  va list          Variant of vfprintf    that uses a fmt string that resides in program memory     6 9 3 34 int vfscanf  FILE    __stream  const char x _ fmt  va_list        Formatted input  This function is the heart of the scanf family of functions     Characters are read from st ream and processed in a way described by fmt  Conver   sion results will be assigned to the parameters passed via ap     The format string fmt is scanned for conversion specifications  Anything that doesn   t  comprise a conversion specification is taken as text that is matched literally against  the input  White space in the format string will match any white space in the data   including none   all other characters match only itself  Processing is aborted as soon as  the data and format string no longer match  or there is an error or end of file condition  on stream     Most conversions skip leading white space before starting the actual conv
305. l used registers  r18 r27  r30 r31      May be allocated by gcc for local data  You may use them freely in assembler  subroutines  Calling C subroutines can clobber any of them   the caller is re   sponsible for saving and restoring     Call saved registers  r2 r17  r28 r29      May be allocated by gcc for local data  Calling C subroutines leaves them un   changed  Assembler subroutines are responsible for saving and restoring these  registers  if changed  r29 r28  Y pointer  is used as a frame pointer  points to  local data on stack  if necessary     Fixed registers  r0  r1      Never allocated by gcc for local data  but often used for fixed purposes     rO   temporary register  can be clobbered by any C code  except interrupt handlers  which save it   may be used to remember something for a while within one piece of  assembler code    rl   assumed to be always zero in any C code  may be used to remember something for  a while within one piece of assembler code  but must then be cleared after use          r1   This includes any use of the     mul s u   instructions  which return their  result in rl r0  Interrupt handlers save and clear rl on entry  and restore r1 on exit  in  case it was non zero      Function call conventions     Arguments   allocated left to right  r25 to r8  All arguments are aligned to start in  even numbered registers  odd sized arguments  including char  have one free  register above them   This allows making better use of the movw instruction on  the 
306. lection is always  considered to be the EEPROM address for the next operation   This packet is exactly  the same as the one above sent before starting to read the device   In case a master  transmitter mode transfer is going to send more than one data packet  all following  packets will be considered data bytes to write at the indicated address  The internal  address pointer will be incremented after each write operation     Note  16     24Cxx devices can become write protected by strapping their  WC pin to logic high    Leaving it unconnected is explicitly allowed  and constitutes logic low level  i  e  no  write protection   In case of a write protected device  all data transfer attempts will be  NACKed by the device  Note that some devices might not implement this     7  avr libc Data Structure Documentation    7 1 div t Struct Reference  7 1 1 Detailed Description    Result type for function div       Data Fields    int quot    int rem    7 1 2 Field Documentation    7 1 21 int div t  quot    The Quotient        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    7 2 ldiv t Struct Reference    213       7 1 2 0 intdiv t  rem    The Remainder     The documentation for this struct was generated from the following file       stdlib h    7 2 1div_t Struct Reference  7 2  Detailed Description    Result type for function ldiv       Data Fields       long quot     long rem    7 2 2 Field Documentation  7 2 2 1 long Idiv_t  quot    The Quotient     7 2 2 2 long Idiv_
307. ler operators are available     Why are interrupts re enabled in the middle of writing the stack pointer        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 307       28  Why are there five different linker scripts   29  How to add a raw binary image to linker output     30  How do I perform a software reset of the AVR     9 9 2 My program doesn   t recognize a variable updated within an interrupt rou   tine    When using the optimizer  in a loop like the following one     uint8_t flag     ISR SOME_vect     flag   1        while  flag    0            the compiler will typically access  1      only once  and optimize further accesses com   pletely away  since its code path analysis shows that nothing inside the loop could  change the value of flag anyway  To tell the compiler that this variable could be  changed outside the scope of its code path analysis  e  g  from within an interrupt  routine   the variable needs to be declared like     volatile uint8_t flag     Back to FAQ Index     9 9 3 I get  undefined reference to     for functions like  sin       In order to access the mathematical functions that are declared in  lt math h gt   the  linker needs to be told to also link the mathematical library  1ibm a     Typically  system libraries like 1ibm a are given to the final C compiler command  line that performs the linking step by adding a flag    1m at the end   That is  the initial  lib and the filename suffix from the li
308. letter   A  in either upper or lower case represents 10    B     represents 11  and so forth  with     2    representing 35      If endptr is not NULL  strtoul   stores the address of the first invalid character in  xendptr  If there were      digits at all  however  strtoul   stores the original value of           in endptr   Thus  if npt r is not   NO  but xxendptr is 710         return  the  entire string was valid      The strtoul   function return either the result of the conversion or  if there was a lead   ing minus sign  the negation of the result of the conversion  unless the original  non   negated  value would overflow  in the latter case  strtoul   returns ULONG MAX  and  errno is set to ERANGE  If no conversion could be performed  0 is returned     6 10 4 29 char   ultoa  unsigned long int __val  char x  s int radix   Convert an unsigned long integer to a string     The function ultoa   converts the unsigned long integer value from val into an ASCII  representation that will be stored under s  The caller is responsible for providing suf        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 81       ficient storage in s     Note     The minimal size of the buffer s depends on the choice of radix  For example  if  the radix is 2  binary   you need to supply a buffer with a minimal length of 8    sizeof  unsigned long int      characters  i e  one character for each bit plus one  for the string terminator  U
309. libc by Doxygen    9 9 Frequently Asked Questions 311       Now if some programmer  wants to make doubly sure  their variables really get a 0  at program startup  and adds an initializer just containing 0 on the right hand side   they waste space  While this waste of space applies to virtually any platform C is  implemented on  it   s usually not noticeable on larger machines like PCs  while the  waste of flash ROM storage can be very painful on a small microcontroller like the  AVR     So in general  variables should only be explicitly initialized if the initial value is non   Zero     Note     Recent versions of GCC are now smart enough to detect this situation  and revert  variables that are explicitly initialized to 0 to the  bss section  Still  other compilers  might not do that optimization  and as the C standard guarantees the initialization   it is safe to rely on it     Back to FAQ Index     9 9 9 Why do some 16 bit timer registers sometimes get trashed     Some of the timer related 16 bit IO registers use a temporary register  called TEMP in  the Atmel datasheet  to guarantee an atomic access to the register despite the fact that  two separate 8 bit IO transfers are required to actually move the data  Typically  this  includes access to the current timer counter value register  TCNTn   the input capture  register  ICRn   and write access to the output compare registers  OCRnM   Refer to  the actual datasheet for each device s set of registers that involves the TEMP 
310. lic functions are available to  initialize the controller into 4 bit mode  to wait for the controller s busy bit to be clear   and to read or write one byte from or to the controller     As there are two different forms of controller IO  one to send a command or receive  the controller status  RS signal clear   and one to send or receive data to from the  controller s SRAM  RS asserted   macros are provided that build on the mentioned  function primitives     Finally  macros are provided for all the controller commands to allow them to be used  symbolically  The HD44780 datasheet explains these basic functions of the controller  in more detail     6 36 3 4 hd44780 c This is the implementation of the low level HD44780 LCD  controller driver     On top  a few preprocessor glueing tricks are used to establish symbolic access to  the hardware port pins the LCD controller is attached to  based on the application s  definitions made in defines h     The hd44780_pulse_e   function asserts a short pulse to the controller s E  en   able  pin  Since reading back the data asserted by the LCD controller needs to be  performed while E is active  this function reads and returns the input data if the param   eter readback is true  When called with a compile time constant parameter that is  false  the compiler will completely eliminate the unused readback operation  as well as  the return value as part of its optimizations     As the controller is used in 4 bit interface mode  all byte IO to
311. ll be needed  Among other things  the LCD4Linux project page  describes many things around these displays  including common pinouts     Modules      Combining C and assembly source files      A simple project     A more sophisticated project     Using the standard IO facilities     Example using the two wire interface  TWI        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 333 Combining C and assembly source files 174       633 Combining C and assembly source files    For time  or space critical applications  it can often be desirable to combine C code   for easy maintenance  and assembly code  for maximal speed or minimal code size   together  This demo provides an example of how to do that     The objective of the demo is to decode radio controlled model PWM signals  and          trol an output PWM based on the current input signal s value  The incoming PWM  pulses follow a standard encoding scheme where a pulse width of 920 microseconds  denotes one end of the scale  represented as 0   pulse width on output   and 2120  microseconds mark the other end  100   output PWM   Normally  multiple channels  would be encoded that way in subsequent pulses  followed by a larger gap  so the en   tire frame will repeat each 14 through 20 ms  but this is ignored for the purpose of the  demo  so only a single input PWM channel is assumed     The basic challenge is to use the cheapest controller available for the task  an ATtiny13  that has only a single timer channe
312. ll fail and the stream will remain unchanged           6 9 3 32 int vfprintf  FILE    stream  const char           va_list          vfprintf is the central facility of the print f family of functions  It outputs values  to stream under control of a format string passed in fmt  The actual values to print  are passed as a variable argument list ap     vfprintf returns the number of characters written to stream  or EOF in case of  an error  Currently  this will only happen if st ream has not been opened with write  intent        The format string is composed of zero or more directives  ordinary characters  not      which are copied unchanged to the output stream  and conversion specifications   each of which results in fetching zero or more subsequent arguments  Each conversion  specification is introduced by the   character  The arguments must properly correspond   after type promotion  with the conversion specifier  After the    the following appear  in sequence        Zero or more of the following flags         The value should be converted to an  alternate form   For c  d  i  s  and  u conversions  this option has no effect  For o conversions  the precision of  the number is increased to force the first character of the output string to  a zero  except if a zero value is printed with an explicit precision of zero    For x and X conversions  a non zero result has the string             or    OX    for  X conversions  prepended to it        Generated on Mon Oct 29 20 02 34 200
313. lo r22      define len hi r21      define len lo r20    8 67 strncat    5 File Reference  8 67 1 Detailed Description    Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src lo r22      define len hi r21      define len lo r20       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 68 strncmp S File Reference 254       8 68 strncmp S File Reference  8 68 1 Detailed Description    Defines     define s1 hi r25   define s1 lo r24   define s2_hi r23   define s2_lo r22   define len_hi r21   define len_lo r20   define ret_hi r25   define ret_lo 124    8 69 strncmp P S File Reference  8 69 1 Detailed Description    Defines     define 51 hi r25   define s1 lo r24   define 52 hi r23   define s2 lo 122   define len hi r21   define len lo r20   define ret hi r25   define ret lo 124    8 70 strncpy S File Reference  8 70 1 Detailed Description    Defines        define dest hi r25      define dest lo r24      define src  hi r23      define src lo r22      define len hi r21      define len lo r20       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 71 strncpy_P S File Reference    255       8 71 strncpy_P S File Reference  8 711 Detailed Description    Defines        define dest_hi r25      define dest_lo r24      define src_hi r23      define src_lo r22      define len_hi r21      define len_lo r20    8 72 strnlen S File Reference  8 72 1 Detailed Description    Defines        define src  hi r25      define 
314. logue or epilogue  so the final reti   must be provided by the actual im   plementation  SREG must be manually saved if the ISR code modifies it  and the  compiler implied assumption of __zero_reg__ always being 0 could be wrong  e   g  When interrupting right after of a MUL instruction         ISR TIMER1_OVF_vect  ISR_NAKED       PORTB    _BV 0      results in SBI which does not affect SREG  reti            Choosing the vector  Interrupt vector names        interrupt is chosen by supplying  one of the symbols in following table     There are currently two different styles present for naming the vectors  One form uses  names starting with SIG_  followed by a relatively verbose but arbitrarily chosen name  describing the interrupt vector  This has been the only available style in avr libc up to  version 1 2 x     Starting with avr libc version 1 4 0  a second style of interrupt vector names has been  added  where a short phrase for the vector description is followed by _vect  The  short phrase matches the vector name as described in the datasheet of the respective  device  and in Atmel s XML files   with spaces replaced by an underscore and other  non alphanumeric characters dropped  Using the suffix _vect is intented to improve  portability to other C compilers available for the AVR that use a similar naming con   vention     The historical naming style might become deprecated in a future release  so it is not  recommended for new projects     Note     The ISR   macro cannot 
315. lt     Returns     The strcat   function returns a pointer to the resulting string dest     6 11 3 15 char x strchr  const char   src  int val   Locate character in string     The strchr   function returns a pointer to the first occurrence of the character val in  the string src     Here  character  means  byte    these functions do not work with wide or multi byte  characters     Returns     The strchr   function returns a pointer to the matched character or NULL if the  character is not found     6 11 3 16 char x strchrnul  const char    s  int c     The strchrnul   function is like strchr   except that if c is not found in s  then it returns  a pointer to the null byte at the end of s  rather than NULL   Glibc  GNU extension      Returns     The strchrnul   function returns a pointer to the matched character  or a pointer to  the null byte at the end of s  i e   s tstrlen s   if the character is not found        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 88       6 11 3 17 int strcmp  const char x 81  const char    52   Compare two strings     The strcmp   function compares the two strings s1 and s2     Returns     The stremp   function returns an integer less than  equal to  or greater than zero  if s1 is found  respectively  to be less than  to match  or be greater than s2  A  consequence of the ordering used by strcmp   is that if s1 is an initial substring of  S2  then 51 is considered to be  less than  52     6 11 3
316. lways contains two digits  if the value is zero   the exponent is  00      If flags has the DTOSTRE ALWAYS SIGN bit set  a space character will be placed  into the leading position for positive numbers     If   1ags has the DTOSTRE PLUS SIGN bit set  a plus sign will be used instead of  a space character in this case        The dtostre   function returns the pointer to the converted string s     6 10 4 10 char   dtostrf  double _ val  signed char     width  unsigned char     prec  char x     s     The dtostrf   function converts the double value passed in va1 into an ASCII repre   sentationthat will be stored under s  The caller is responsible for providing sufficient  storage in s     Conversion is done in the format     d ddd   The minimum field width of the  output string  including the         and the possible sign for negative values  is given in  width  and prec determines the number of digits after the decimal sign  width is  signed value  negative for left adjustment     The dtostrf   function returns the pointer to the converted string s     6 10 4 11 void exit  int     status     The exit   function terminates the application  Since there is no environment to re   turn to  status is ignored  and code execution will eventually reach an infinite loop   thereby effectively halting all code processing     In a C   context  global destructors will be called before halting execution        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h 
317. macros    15    16    17    19    20    32    38    40    52    71    82    93    99    102    124    125    137    142    140    145    147       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    3 avr libc Data Structure Index 10        lt avr wdt h gt   Watchdog timer handling 149     lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 152      util crc16 h    CRC Computations 156   lt util delay h gt   Convenience functions for busy wait delay loops 159   lt util delay_basic h gt   Basic busy wait delay loops 160   lt util parity h gt   Parity bit generation 161   lt util setbaud h gt   Helper macros for baud rate calculations 162   lt util twi h gt   TWI bit mask definitions 164   lt compat deprecated h gt   Deprecated items 169   lt compat ina90 h gt   Compatibility with IAR EWB 3 x 172  Demo projects 172  Combining C and assembly source files 174  A simple project 177  A more sophisticated project 192  Using the standard IO facilities 200  Example using the two wire interface  TWI  207    3 avr libc Data Structure Index    3 1 avr libc Data Structures  Here are the data structures with brief descriptions   div t 212    Idiv t 213       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       4 avr libc File Index 11   4 avr libc File Index   41 avr libc File List   Here is a list of all documented files with brief descriptions   assert h 213  atoi S 214  atol S 214  atomic h 214  boot h 215        16    221  ctype h 221  dela
318. many volunteers  All of these projects could  always use more help from other people who are willing to volunteer some of their time   There are many different ways to help  for people with varying skill levels  abilities   and available time     You can help to answer questions in mailing lists such as the avr gcc list  or on forums  at the AVR Freaks website  This helps many people new to the open source AVR tools     If you think you found a bug in any of the tools  it is always a big help to submit a good  bug report to the proper project  A good bug report always helps other volunteers to  analyze the problem and to get it fixed for future versions of the software     You can also help to fix bugs in various software projects  or to add desirable new  features     Volunteers are always welcome         9 2 Memory Areas and Using malloc    9 21 Introduction    Many of the devices that are possible targets of avr libc have a minimal amount of  RAM  The smallest parts supported by the C environment come with 128 bytes of  RAM  This needs to be shared between initialized and uninitialized variables  sections   data and  bss   the dynamic memory allocator  and the stack that is used for calling  subroutines and storing local  automatic  variables     Also  unlike larger architectures  there is no hardware supported memory management  which could help in separating the mentioned RAM regions from being overwritten by  each other     The standard RAM layout is to place  data vari
319. mccpy  void     const void     int  size t    void    memchr  const void     int  size t           PURE   int memcmp  const void     const void     size t  ATTR_PURE             Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 56    string h File Reference 251       void    memcpy  void     const void     size_t    void    memmem  const void     size_t  const void     size_t           PURE  void    memmove  void     const void     size_t    void    memrchr  const void     int  size_t           PURE   void   memset  void    int  size_t    char    strcat  char     const char       char    strchr  const char     int  ATTR_ PURE   char    strchrnul  const char     int           PURE   int strcmp  const char     const char x  ATTR  PURE   char    strcpy  char     const char       int strcasecmp  const char     const char x  ATTR_PURE   char    strcasestr  const char     const char     ATTR  PURE  size t strcspn  const char   s  const char  reject ___ ATTR_PURE  size_t strlcat  char     const char     size_t    size t strlcpy  char     const char     size t    size t strlen  const char x  ATTR  PURE   char    strlwr  char       char    strncat  char     const char     size_t    int strncmp  const char     const char     size t  ATTR  PURE  char    strncpy  char     const char     size_t    int strncasecmp  const char     const char     size t  ATTR  PURE  size  t strnlen  const char     size_t           PURE   char    strpbrk  const char   s  const char xaccept  A
320. med  but instead any string that aims to issue a  CR LF sequence must use   r n  explicitly     For convenience  the first call to fdevopen   that opens a stream for reading  will cause the resulting stream to be aliased to stdin  Likewise  the first call to  fdevopen    that opens a stream for writing will cause the resulting stream to be  aliased to both  stdout  and stderr  Thus  if the open was done with both  read  and write intent  all three standard streams will be identical  Note that these aliases are  indistinguishable from each other  thus calling fclose    on such a stream will also  effectively close all of its aliases  note 3      It is possible to tie additional user data to a stream  using fdev_set_udata    The back   end put and get functions can then extract this user data using fdev_get_udata    and act  appropriately  For example  a single put function could be used to talk to two different  UARTs that way  or the put and get functions could keep internal state between calls  there     Format strings in flash ROM All the printf and scanf family functions come  in two flavours  the standard name  where the format string is expected to be in SRAM   as well as a version with the suffix  _P  where the format string is expected to reside  in the flash ROM  The macro PSTR  explained in  lt avr pgmspace h gt   Program Space  Utilities  becomes very handy for declaring these format strings     Running stdio without malloc   By default  fdevopen   requires malloc  
321. memory if desired  the counter would wrap  around and start back from 0 when reaching the end of the device      Note  8     When reading the EEPROM  a first device selection must be made with write intent   R    W bit set to 0 indicating a write operation  in order to transfer the EEPROM ad   dress to start reading from  This is called master transmitter mode  Each completion  of a particular step in TWI communication is indicated by an asserted TWINT bit in  TWCR   An interrupt would be generated if allowed   After performing any actions  that are needed for the next communication step  the interrupt condition must be man   ually cleared by setting the TWINT bit  Unlike with many other interrupt sources  this  would even be required when using a true interrupt routine  since as soon as TWINT is  re asserted  the next bus transaction will start     Note  9     Since the TWI bus is multi master capable  there is potential for a bus contention when  one master starts to access the bus  Normally  the TWI bus interface unit will detect this  situation  and will not initiate a start condition while the bus is busy  However  in case  two masters were starting at exactly the same time  the way bus arbitration works  there  is always a chance that one master could lose arbitration of the bus during any transmit  operation  A master that has lost arbitration is required by the protocol to immediately  cease talking on the bus  in particular it must not initiate a stop condition in or
322. mns file   Turn on the assembler listing  The sub options are       c omit false conditionals      d omit debugging directives     h include high level source      1 include assembly      m include macro expansions     n omit forms processing     s include symbols       file set the name of the listing file    The various sub options can be combined into a single  a option list    file must be the  last one in that case     9 11 2 2 Examples for assembler options passed through the C compiler Re   member that assembler options can be passed from the C compiler frontend using  Wa   see above   so in order to include the C source code into the assembler listing in  file foo 1st  when compiling foo  c  the following compiler command line can be  used       avr gcc  c  0 foo c     foo o  Wa  ahls foo lst    In order to pass an assembler file through the C preprocessor first  and have the assem   bler generate line number debugging information for it  the following command can be  used     5 avr gcc  c  x assembler with cpp  o foo o foo S  Wa   gstabs       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 11 Using the GNU tools 353       Note that on Unix systems that have case distinguishing file systems  specifying a file  name with the suffix  S  upper case letter S  will make the compiler automatically  assume  x assembler with cpp  while using  s would pass the file directly to  the assembler  no preprocessing done         9 11 3 Controlling the linker avr l
323. my link command  Relink the application using the following command to generate  demo  map  a portion of which is shown below        avr gcc  g  mmcu atmega8  Wl  Map demo map  o demo elf demo o    Some points of interest in the demo  map file are      rela plt     rela plt      text 0x00000000      vectors     vectors 0x00000000  0x00000000  0x00000000   x   vectors    x   progmem gccx         progmemx   0x00000026  0x00000026       trampolines    trampolines 0x00000026  x   trampolinesx     0x00000026     jumptables      jumptablesx      lowtext        lowtextx    0x00000026    0  114    0  26    0  0     home joerg src avr libc avr lib avr4 atmega8 crtm8 o    vectors    vector default      ALIGN  0x2     trampolines start      linker stubs      trampolines end          ctors  start         The  text segment  where program instructions are stored  starts at location 0  0        fini2      fini2      finil      finil      finiO    finiO 0x00000112  xi  finio   0x00000114   data 0x00800060  0x00800060  x   data    data 0x00800060   data 0x00800060   data 0x00800060   data 0x00800060   data 0x00800060    0x2    0x0    0  0  0  0  0  0  0  0  0  0     usr local lib gcc avr 4 2 2 avr4 libgcc a _exit o    etext      load address 0x00000114  PROVIDE   data start        demo o   home joerg src avr libc avr lib avr4 atmega8 crtm8 o   home joerg src avr libc avr lib avr4 exit o   usr local lib gcc avr 4 2 2 avr4 libgcc a _exit o    usr local lib gcc avr 4 2 2 avr4 libgcc a _copy_data
324. n                            6 14  lt avr interrupt h gt   Interrupts 107  Vector name Old vector   Description Applicable for device  name  EEPROM_  SIG_  ATtiny2313  READY vect EEPROM    READY   SIG EE    READY  EE RDY vect   SIG   EEPROM Ready     9052333   AT90S4433  AT90S4434                   AT90S8535  ATmegal6  ATmegal6l   READY ATmegal62  ATmegal63  ATmega32   ATmega323  ATmega8  ATmega8515  AT   mega8535  ATtiny12  ATtiny13  ATtiny15   ATtiny26  ATtiny24  ATtiny44  ATtiny84   ATtiny45  ATtiny25  ATtiny85  ATtiny261   ATtiny461  ATtiny861  EE_READY_    SIG_  EEPROM Ready AT90PWM3  AT90PWM2  AT90PWMI   vect EEPROM_  AT90CAN128  AT90CAN32  AT90CANGA   READY ATmegal03   ATmegal28  ATmegal65   ATmegal65P  ATmegal69  ATmegal69P   ATmega325  ATmega3250  ATmega329   ATmega329P  ATmega3290  ATmega3290P   ATmega406    ATmega64  ATmega645   ATmega6450  ATmega649  ATmega6490   ATmegal68  ATmega48  ATmega88  AT   mega640   ATmegal280  ATmegal281   ATmega2560  ATmega2561  AT   mega324P  ATmegal64P  ATmega644P   ATmega644  AT90USB162      9005  82   AT90USB 1287  AT90USB 1286   AT90USB647  AT90USB646  EXT INTO   SIG   External Interrupt   ATtiny24  ATtiny44  ATtiny84  vect INTERRUPTO   Request 0  INTO vect SIG   External Interrupt   AT90S1200  419052313  AT90S2323   INTERRUPTO   0     9052333   AT90S2343  AT90S4414   AT90S4433  419054434  419058515   AT90S8535  AT90PWM3  AT90PWM2                 AT90PWMI  AT90CAN128  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6          
325. n already carries a logical  1 when reading it  so why does writing a logical   to it clear the interrupt bit     The solution is simple  writing a logical   to it requires only a single OUT instruction   and it is clear that only this single interrupt request bit will be cleared  There is no need  to perform a read modify write cycle  like  an SBI instruction   since all bits in these  control registers are interrupt bits  and writing a logical 0 to the remaining bits  as it  is done by the simple OUT instruction  will not alter them  so there is no risk of any  race condition that might accidentally clear another interrupt request bit  So instead of  writing   TIFR    _BV TOVO      wrong  x    simply use    TIFR   _BV TOVO      Back to FAQ Index     9 9 26 Why have  programmed  fuses the bit value 0   Basically  fuses are just a bit in a special EEPROM area  For technical reasons  erased    E E PROM cells have all bits set to the value 1  so unprogrammed fuses also have a  logical 1  Conversely  programmed fuse cells read out as bit value 0     Back to FAQ Index    9 9 27 Which AVR specific assembler operators are available    See Pseudo ops and operators    Back to FAQ Index    9 9 28 Why are interrupts re enabled in the middle of writing the stack pointer     When setting up space for local variables on the stack  the compiler generates code like  this        prologue  frame size 20          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently A
326. n bin       lt install directory  gt  bin      Configure      configure N    prefix  installdir N    infodir  installdir info      mandir  installdir man    2 gt  amp 1   tee Spackage configure log      Make  make all install 2 gt  amp 1   tee Spackage make log  Build the tools below in Cygwin       AVaRICE        Open source code package        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 344           Configure and build in a directory outside of the source code tree       Set PATH  in order         lt MikTex executables  gt    usr local bin             usr bin      bin      lt install directory  gt  bin      Set location of LibUSB headers and libraries    export CPPFLAGS  I startdir libusb win32 device bin  libusb_version include  export CFLAGS  I startdir libusb win32 device bin  libusb_version include  export LDFLAGS   static  L startdir libusb win32 device bin  1ibusb version lib gc        Configure       Sarchivedir configure N    prefix  installdir N    datadir  installdir doc N    mandir  installdir man N    infodir  installdir info N  2 gt  amp 1   tee avarice configure log        Make    make all install 2 gt  amp 1   tee avarice make log      SimulAVR        Open source code package       Configure and build in a directory outside of the source code tree       Set PATH  in order         lt MikTex executables  gt    usr local bin             usr bin       bin       lt install directory  gt  bin    
327. n how to handle interrupt code  Since the C language tries to stay away  from machine dependent details  each compiler writer is forced to design their method  of support     In the AVR GCC environment  the vector table is predefined to point to interrupt rou   tines with predetermined names  By using the appropriate name  your routine will be  called when the corresponding interrupt occurs  The device library provides a set of  default interrupt routines  which will get used if you don t define your own     Patching into the vector table is only one part of the problem  The compiler uses  by  convention  a set of registers when it s normally executing compiler generated code   It s important that these registers  as well as the status register  get saved and restored   The extra code needed to do this is enabled by tagging the interrupt function with          attribute    signal          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 103       These details seem to make interrupt routines a little messy  but all these details are  handled by the Interrupt API  An interrupt routine is defined with ISR    This macro  register and mark the routine as an interrupt handler for the specified peripheral  The  following is an example definition of a handler for the ADC interrupt      include  lt avr interrupt h gt     ISR ADC_vect           user code here         Refer to the chapter explaining assembler programming for an e
328. n the  location referenced by endpt           If the correct value would cause overflow  plus or minus HUGE_VAL is returned  ac   cording to the sign of the value   and ERANGE is stored in errno  If the correct value  would cause underflow  zero is returned and ERANGE is stored in errno     FIXME  HUGE VAL needs to be defined somewhere  The bit pattern is Ox7fffffff  but  what number would this be                 6 10 4 27 long strtol  const char    __nptr  char      __endptr  int __base            strtol   function converts the string in nptr to a long value  The conversion is  done according to the given base  which must be between 2 and 36 inclusive  or be the  special value 0     The string may begin with an arbitrary amount of white space  as determined by iss   pace    followed by a single optional          or          sign  If base is zero or 16  the string  may then include a  0x  prefix  and the number will be read in base 16  otherwise  a  zero base is taken as 10  decimal  unless the next character is     0      in which case it is  taken as 8  octal         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 80       The remainder of the string is converted to a long value in the obvious manner  stopping  at the first character which is not a valid digit in the given base   In bases above 10  the  letter    A    in either upper or lower case represents 10    B    represents 11  and so forth   with   2    repres
329. n to your code to then  disable the watchdog after a reset  e g   after a soft reset       include  lt avr wdt h gt        Function Pototype  void wdt_init void  __attribute__  naked   __attribute__  section   init3            Function Implementation  void wdt_init  void      MCUSR   0   wdt_disable       return     Back to FAQ Index     9 10 Building and Installing the GNU Tool Chain    This chapter shows how to build and install  from source code  a complete develop   ment environment for the AVR processors using the GNU toolset  There are two main  sections  one for Linux  FreeBSD  and other Unix like operating systems  and another  section for Windows     9 10 1 Building and Installing under Linux  FreeBSD  and Others    The default behaviour for most of these tools is to install every thing under the   usr ilocal directory  In order to keep the AVR tools separate from the base  system  it is usually better to install everything into  usr local avr  If the   usr local avr directory does not exist  you should create it before trying to  install anything  You will need root access to install there  If you don t have root  access to the system  you can alternatively install in your home directory  for exam   ple  in SHOME 10cal avr  Where you install is a completely arbitrary decision  but  should be consistent for all the tools                    You specify the installation directory by using the  prefix dir option with the  configure script  It is important to install all
330. ncepts of an AVR microcontroller     6 35 1 Hardware setup    The demo is set up in    way so it can be run on the ATmega16 that ships with the  STK500 development kit  The only external part needed is a potentiometer attached to  the ADC  It is connected to a 10        ribbon cable for port     both ends of the poten   tiometer to pins 9  GND  and 10  VCO   and the wiper to pin 1  port A0   A bypass  capacitor from pin 1 to pin 9  like 47       is recommendable        Figure 2  Setup of the STK500    The coloured patch cables are used to provide various interconnections  As there are  only four of them in the STK500  there are two options to connect them for this demo   The second option for the yellow green cable is shown in parenthesis in the table   Alternatively  the  squid  cable from the JTAG ICE kit can be used if available        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project    194                                                          Port Header Color Function Connect to   DO 1 brown RxD RXD of the  RS 232  header        2 grey TxD TXD of the  RS 232  header   D2 3 black button SWO  pin 1    down  switches  header    D3 4 red button  up  SWI  pin 2  switches  header    D4 5 green button SW2  pin 3    ADC  switches  header    D5 6 blue LED LEDO  pin 1  LEDs header    D6 7  green  clock out LED 1  pin 2  LEDs header    D7 8 white 1 second LED          3   flash LEDs header    GND 9 unused   VCC 10 unused        
331. nd it by combining a skip instruction together with a relative Jump  r jmp   instruction  which will need one additional word of ROM     Another side effect of optimzation is that variable usage is restricted to the area of code  where it is actually used  So if a variable was placed in a register at the beginning of  some function  this same register can be re used later on if the compiler notices that the  first variable is no longer used inside that function  even though the variable is still in  lexical scope  When trying to examine the variable in avr   gdb  the displayed result  will then look garbled     So in order to avoid these side effects  optimization can be turned off while debugging   However  some of these optimizations might also have the side effect of uncovering  bugs that would otherwise not be obvious  so it must be noted that turning off opti   mization can easily change the bug pattern  In most cases  you are better off leaving  optimizations enabled while debugging     Back to FAQ Index     9 9 12 How do trace an assembler file in avr gdb     When using the  g compiler option  avr gcc only generates line number and other  debug information for C  and C    files that pass the compiler  Functions that don   t  have line number information will be completely skipped by a single step command  in gdb  This includes functions linked from a standard library  but by default also  functions defined in an assembler source file  since the    g compiler switch doe
332. ne INT64_MIN CINT64_MAX   ILL      define UINT64_MAX  __CONCAT INT64_MAX  U    2ULL   1ULL     Limits of minimum width integer types     define INT_LEAST8_MAX INT8_MAX   define INT_LEAST8_MIN INT8_MIN    define UINT_LEAST8_MAX UINT8_MAX   define INT_LEAST16_MAX INT16_MAX   define INT_LEAST16_MIN INT16_MIN   define UINT_LEAST16_MAX UINT16_MAX   define INT_LEAST32_MAX INT32_MAX   define INT_LEAST32_MIN INT32_MIN   define UINT_LEAST32_MAX UINT32_MAX   define INT_LEAST64_MAX INT64_MAX   define INT_LEAST64_MIN INT64_MIN   define UINT_LEAST64_MAX UINT64_MAX          Limits of fastest minimum width integer types     define INT_FAST8_MAX INT8_MAX   define INT_FAST8_MIN INT8_MIN    define UINT_FAST8_MAX UINT8 MAX   define INT_FAST16_MAX INT16_MAX   define INT_FAST16_MIN INT16_MIN   define UINT_FAST16_MAX UINT16_MAX   define INT FAST32 MAX INT32 MAX   define INT FAST32 MIN INT32 MIN   define         FAST32 MAX UINT32          define INT FAST64 MAX INT64          define INT FAST64 MIN INT64 MIN   define UINT FAST64 MAX UINT64              Limits of integer types capable of holding object pointers        define INTPTR MAX INTI6 MAX      define INTPTR MIN INT16 MIN     define UINTPTR MAX UINTI6 MAX    Limits of greatest width integer types       define INTMAX MAX INT64 MAX      define INTMAX MIN INT64 MIN       define UINTMAX MAX UINT64 MAX    Limits of other integer types    C   implementations should define these macros only when __ STDC  LIMIT    MACROS is defined before  lt stdint h g
333. ne NONATOMIC FORCEOFF    6 23 2 Define Documentation    6 23 2 1  define ATOMIC BLOCK type     Creates a block of code that is guaranteed to be executed atomically  Upon entering the  block the Global Interrupt Status flag in SREG is disabled  and re enabled upon exiting  the block from any exit path     Two possible macro parameters are permitted  ATOMIC RESTORESTATE and  ATOMIC FORCEON     6 23 2 2  ftdefine ATOMIC FORCEON       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 23  lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 155       This is a possible parameter for ATOMIC_BLOCK  When used  it will cause the  ATOMIC_BLOCK to force the state of the SREG register on exit  enabling the Global  Interrupt Status flag bit  This saves on flash space as the previous value of the SREG  register does not need to be saved at the start of the block     Care should be taken that ATOMIC_FORCEON is only used when it is known that  interrupts are enabled before the block   s execution or when the side effects of enabling  global interrupts at the block   s completion are known and understood     6 23 2 3  define ATOMIC RESTORESTATE    This is a possible parameter for ATOMIC_BLOCK  When used  it will cause the  ATOMIC_BLOCK to restore the previous state of the SREG register  saved before  the Global Interrupt Status flag bit was disabled  The net effect of this is to make  the ATOMIC_BLOCK   s contents guaranteed atomic  without changing the state
334. need the same operand  for input and output  As stated above  read write operands are not supported in inline  assembler code  But there is another solution  For input operators it is possible to use  a single digit in the constraint string  Using digit n tells the compiler to use the same  register as for the n th operand  starting with zero  Here is an example     asm volatile  swap  0      r   value     0   value       This statement will swap the nibbles of an 8 bit variable named value  Constraint  0   tells the compiler  to use the same input register as for the first operand  Note however   that this doesn t automatically imply the reverse case  The compiler may choose the  same registers for input and output  even if not told to do so  This is not a problem in  most cases  but may be fatal if the output operator is modified by the assembler code  before the input operator is used  In the situation where your code depends on different  registers used for input and output operands  you must add the  amp  constraint modifier to  your output operand  The following example demonstrates this problem     asm volatile  in  0  1    n t    out  1   2    n t      amp r   input    I    SFR IO ADDR port     r   output         In this example an input value is read from a port and then an output value is written to  the same port  If the compiler would have choosen the same register for input and out   put  then the output value would have been destroyed on the first assembler inst
335. nerated     srec    elf     j      echo empty 5068 not generated             echo empty    not generated      eeprom   c           eeprom   change section lma  exit 0     eeprom   change section 1ma  exit 0    hange section lma    exit 0                     eeprom 0  O     eeprom 0  O     eeprom 0  O      Every thing below here is used by avr libc s build system and    by the casual user     FIG2DEV  EXTRA CLEAN FILES    dox  eps png pdf  eps    PRG  eps  png    PRG  png  pdf    PRG   pdf    eps    fig   5  FIG2DEV     pdf    fig   5  FIG2DEV     png    fig   5  FIG2DEV      L eps     L pdf     L png    fig2dev    hex   bin   srec      lt  Se      lt  Se      lt        6 34 8 Reference to the source code    The source code is installed under       Sprefix share doc avr libc examples demo      ihex   lt   8      srec   lt   8      binary   lt          can be ignored    where  prefix is a configuration option  For Unix systems  it is usually set to either   usr or  usr local     6 35    more sophisticated project    This project extends the basic idea of the simple project to control a LED with a PWM  output  but adds methods to adjust the LED brightness  It employs a lot of the basic  concepts of avr libc to achieve that goal        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 35    more sophisticated project 193       Understanding this project assumes the simple project has been understood in full  as  well as being acquainted with the basic hardware co
336. next data packet following the device selection only allows for 8 bits that are used as  an EEPROM address  devices that require more than 8 address bits  24C04 and above    steal  subaddress bits and use them for the EEPROM cell address bits 9 to 11 as re   quired  This example simply assumes all subaddress bits are 0 for the smaller devices   so the EO  E1  and E2 inputs of the 24Cxx must be grounded     Note  4     For slow clocks  enable the 2 x U S ART clock multiplier  to improve the baud rate  error  This will allow a 9600 Bd communication using the standard 1 MHz calibrated  RC oscillator  See also the Baud rate tables in the datasheets     Note  5     The datasheet explains why a minimum TWBR value of 10 should be maintained when  running in master mode  Thus  for system clocks below 3 6 MHz  we cannot run the  bus at the intented clock rate of 100 kHz but have to slow down accordingly        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 37 Example using the two wire interface  TWD 210       Note  6     This function is used by the standard output facilities that are utilized in this example  for debugging and demonstration purposes     Note  7     In order to shorten the data to be sent over the TWI bus  the 24Cxx EEPROMS support  multiple data bytes transfered within a single request  maintaining an internal address  counter that is updated after each data byte transfered successfully  When reading  data  one request can read the entire device 
337. nline    uint8 t crc ibutton update  uint8 t _ crc  uint8 t     data        8 7 ctype h File Reference    8 7 1 Detailed Description    Defines         define  CTYPEH 1      define   ATTR  CONST _ attribute    const       Functions    Character classification routines    These functions perform character classification  They return true or false status  depending whether the character passed to the function falls into the function s  classification  i e  isdigit   returns true if its argument is any value  0  though 9        inclusive         intisalnum  int  c            CONST          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 8 delay h File Reference 222       int isalpha  int c  ATTR_CONST__  int isascii  int c   ATTR  CONST  int isblank  int     ATTR  CONST    intiscntrl  int     ATTR  CONST  intisdigit  int _     ATTR  CONST   intisgraph  int              CONST    int islower  int c           CONST    int isprint  int               CONST  int ispunct  int      ATTR CONST __  int isspace  int      ATTR CONST __  int isupper  int      _ ATTR_CONST__  intisxdigit  int       ATTR_CONST__                Character convertion routines       If c is not an unsigned char value  or EOF  the behaviour of these functions is    undefined         inttoascii  int      ATTR  CONST  e int tolower  int     ATTR CONST    e int toupper  int c   ATTR CONST __       8 8 delay h File Reference  8 8 1 Detailed Description  Defines        define UTIL DELAY H 1      defin
338. nt h gt   Standard Integer Types 48       6 8 2 45  define UINT8_C value    uint8_t  _CONCAT  value  U      define a constant of type uint8_t    6 8 2 46  define UINT8_MAX  _CONCAT INT8_MAX  U     2U  10     largest value an uint8_t can hold     6 8 2 47  define UINT_FAST16_MAX UINT16 MAX    largest value an uint_fast16_t can hold     6 8 2 48  define UINT FAST32 MAX UINT32 MAX    largest value an uint  fast32 t can hold     6 8 2 49  define UINT FAST64 MAX UINT64 MAX    largest value an uint_fast64_t can hold     6 8 2 50  define UINT FAST8 MAX UINT8 MAX    largest value an uint fast8 t can hold     6 8 2 51  define UINT LEASTI16 MAX UINTI6           largest value an uint least16 t can hold     6 8 2 52  define UNT LEAST32 MAX UINT32           largest value an uint least32 t can hold     6 8 2 53  define UNT LEAST64 MAX UINT64 MAX    largest value an uint least64 t can hold     6 8 2 54  define UINT LEAST8 MAX UINT8 MAX    largest value an uint least8 t can hold     6 8 2 55  define UINTMAX              _ CONCAT value  ULL     define a constant of type uintmax t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 49       6 8 2 56  define UINTMAX MAX UINT64 MAX    largest value an uintmax_t can hold     6 8 2 57  define UINTPTR MAX UINT16_MAX    largest value an uintptr t can hold     6 8 3 Typedef Documentation    6 8 31 typedef signed int      16 t  16 bit signed type     6 8 3 2 typedef signed long int int32 
339. nt has been merged into the  documentation for avr libc  The latest version is now available at  http   savannah nongnu org projects avr libc      9 6 1 GCC asm Statement   Let s start with a simple example of reading a value from port D   asm  in  0   1      r   value     I    SFR IO ADDR PORID       Each asm statement is devided by colons into  up to  four parts     1  The assembler instructions  defined as a single string constant    in  0   1   2  A list of output operands  separated by commas  Our example uses just one       r   value     3  A comma separated list of input operands  Again our example uses one operand  only        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 288        I    SFR IO ADDR PORTD      4  Clobbered registers  left empty in our example     You can write assembler instructions in much the same way as you would write assem   bler programs  However  registers and constants are used in a different way if they refer  to expressions of your C program  The connection between registers and C operands is  specified in the second and third part of the asm instruction  the list of input and output  operands  respectively  The general form is    asm code   output operand list   input operand list    clobber list       In the code section  operands are referenced by a percent sign followed by a single digit   0 refers to the first 1 to the second operand and so forth  From the above example     Orefers to   r
340. ntegral power of 2     The 1           function returns the value of x times 2 raised to the power exp     6 6 3 23 double log  double __x   The log   function returns the natural logarithm of argument x     If the argument is less than or equal 0  a domain error will occur     6 6 3 24 double log10  double x          log10   function returns the logarithm of argument x to base 10     If the argument is less than or equal 0  a domain error will occur     6 6 3 25 double modf  double value  double                 The modf   function breaks the argument value into integral and fractional parts   each of which has the same sign as the argument  It stores the integral part as a double  in the object pointed to by iptr     The modf   function returns the signed fractional part of value        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 6  lt math h gt   Mathematics 37       Note     This implementation skips writing by zero pointer     6 6 3 26 double pow  double     double y     The function pow   returns the value of x to the exponent y     6 6 3 27 int signbit  double x     The signbit   function returns a nonzero value if the value of x has its sign bit set  This  is not the same as    x  lt  0 0     because IEEE 754 floating point allows zero to be signed   The comparison     0 0  lt  0 0    is false  but    signbit   0 0     will return a nonzero value     Note     This implementation returns  1 if sign bit is set     6 6 3 28 double sin  double       
341. nter           Do you have MinGW installed   Press  y  and press enter        Where is your MinGW installation   Type in  c  mingw   without  quotes  and press enter       Do you wish for me to add mount bindings for c  mingw to  mingw               Press  y  and press enter           It will display some messages      the screen  then it will display   Press  any key to continue         Press any key        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 337         Edit c  msys 1 0 msys bat  Change line  should be line 41      if EXIST rxvt exe goto startrxvt    to     rem if EXIST rxvt exe goto startrxvt    to remark out this line  Doing this will cause MSYS to always use the bash shell  and not the rxvt shell     Note     The order of the next three is important  Install MSYS Developer toolkit before  the autotools       MSYS Developer Toolkit version 1 0 1        This is needed to build avr libc in MinGW           http   downloads sourceforge net mingw msysDTK 1 0 1 exe use    mirror internap gt         Single file installer executable  Install        autoconf 2 59 from the  MSYS Developer Toolkit  release        autoconf 2 59 2 60 is needed to build avr libc in MinGW        lt http   downloads sourceforge net mingw msys autoconf 2 59 tar bz2 use_   mirror internap gt         Extract to c  msys 1 0      automake 1 8 2        automake 1 8 1 9 is needed to build avr libc in MinGW           http   downloads so
342. nter register  and memcpy_P is called     strcpy_P buf  p    62  69   1 ldd r22  Y 33 E  84  7a al idd r23  Y 34 F  86  ce 01 movw r24  r28  88  01 96 adiw r24  0  01    8a  Oc      reall   24       0  21  0  22          4       Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 320       This will finally copy the ROM string into the local buffer buf     Variable p  located at Y 33  is read  and passed together with the address of buf  Y 1   to strepy_P  This will copy the string from ROM to buf     Note that when using a compile time constant index  omitting the first step  reading  the pointer from ROM via              P  usually remains unnoticed  since the compiler  would then optimize the code for accessing array at compile time     Back to FAQ Index   9 9 16 How to use external RAM     Well  there is no universal answer to this question  it depends on what the external  RAM is going to be used for        Basically  the bit SRE  SRAM enable  in the MCUCR register needs to be set in order  to enable the external memory interface  Depending on the device to be used  and  the application details  further registers affecting the external memory operation like  XMCRA and XMCRB  and or further bits in MCUCR might be configured  Refer to the  datasheet for details     If the external RAM is going to be used to store the variables from the C program   i  e   the  data and or  bss segment  in that memory area  it is essential to set
343. nul_P S File Reference  22222222 22 22 22 2       249  8491 Detailed Description 2 2  2  22  2 2  2 22 52      249  stromp s Pile Reference  2 6 cu cere s was RR RIS 249  8 50 1 Detaled Description   ecce ERES 249  sremp P S Pile Reference 2 4 06 6 4 cmo RR E 249  8 51 1 Detailed Description                        249  sttcpy o File Reference c occ ee h W S N 249  6 52 1  Detailed Description  gt e e ecce 54855 ROG y sea Res 249  stepy FS File Reference     uu lux EE ee E ud eS 250  8 53 1 Detaled          222   22   22          250  strospn S File Reference   oomo oos q Q rms 250  8 54 1 Detailed Description  gt    e sro ea so s er aotar 250  strespn  PS File Reference Lus so dorade aira om         s p e 250  5 55 1 Detailed Description 2                      250  stime h File               22 22 2222 02                     250  8 56 1 Detaled Description 22 2  22  222            250  stilcatS File Reference     oo onu sa s s b ee ee NUS N 252  8 57 1 Detaled Description    Rm RB 252  stricat ES File Reference    zs eR SE RR 252  8 8 1 Detailed Description                        252  stiicpy o File Reference  2                Rok RR        252  3 59 1 Detaled Description        cc o  RR c REG 252           P S File Reference  2    goe    lt  oma m doy S A eS 252  5 60 1 Detailed Description 222   22   2 2 2 2         252          5 File Reference           wu olm w 225    252  8 61 1 Detailed Description  gt  soe saone mn                 252       Generated on Mon Oct 29 20 
344. number for the square wave output  Note that the right hand side consists of a  CPP macro which will be substituted by its value  6 in this case  before actually being  passed to the assembler     Note  4     The assembler uses integer operations in the host defined integer size  32 bits or longer   when evaluating expressions  This is in contrast to the C compiler that uses the C type  int by default in order to calculate constant integer expressions     In order to get a 100 kHz output  we need to toggle the PD6 line 200000 times per  second  Since we use timer 0 without any prescaling options in order to get the de   sired frequency and accuracy  we already run into serious timing considerations  while  accepting and processing the timer overflow interrupt  the timer already continues to  count  When pre loading the TCCNTO register  we therefore have to account for the  number of clock cycles required for interrupt acknowledge and for the instructions to  reload TCCNTO  4 clock cycles for interrupt acknowledge  2 cycles for the jump from  the interrupt vector  2 cycles for the 2 instructions that reload TCCNTO   This is what  the constant fuzz is for        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs 284       Note  5     External functions need to be declared to be  global  main is the application entry  point that will be jumped to from the ininitalization routine in crt s1200 o     Note  6     The main loop is jus
345. nvert a string to an integer     The atoi   function converts the initial portion of the string pointed to by s to integer  representation  In contrast to     int strtol s   char    NULL  10      this function does not detect overflow  errno is not changed and the result value is  not predictable   uses smaller memory  flash and stack  and works more quickly     6 10 4 5 long atol  const char   s   Convert a string to a long integer     The atol   function converts the initial portion of the string pointed to by s to long  integer representation  In contrast to    strtol s   char    NULL  10      this function does not detect overflow  errno is not changed and the result value is  not predictable   uses smaller memory  flash and stack  and works more quickly     6 10 4 6 void   bsearch  const void           const void    __base  size_t __nmemb   size t size  int     const void     const void     __compar     The bsearch   function searches an array of nmemb objects  the initial member of  which is pointed to by base  for a member that matches the object pointed to by  key  The size of each member of the array is specified by size     The contents of the array should be in ascending sorted order according to the compar   ison function referenced by compar  The compar routine is expected to have two  arguments which point to the key object and to an array member  in that order  and  should return an integer less than  equal to  or greater than zero if the key object is  found  
346. o  be applied to IO ports  the emulation actually uses standard C methods  so they could  be applied to arbitrary memory locations as well         define inp port   port        define outp val  port   port     val        define inb port   port        define outb port  val   port     val        define sbi port  bit   port      1  lt  lt   bit         define cbi port  bit   port   amp     1  lt  lt   bit     6 30 2 Define Documentation  6 30 2 1  define cbi port  bit   port   amp     1  lt  lt   bit      Deprecated    Clear bit in IO port port     6 30 2 2  define enable external int mask   __EICR   mask     Deprecated       This macro gives access to the GIMSK register  or EIMSK register if using an AVR  Mega device or GICR register for others   Although this macro is essentially the same  as assigning to the register  it does adapt slightly to the type of device being used  This  macro is unavailable if none of the registers listed above are defined     6 30 2 3  define inb port   port     Deprecated    Read a value from an IO port port        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 30  lt compat deprecated h gt   Deprecated items 171       6 30 2 4  define inp port   port     Deprecated    Read a value from an IO port port   6 30 2 5  define INTERRUPT signame   Value     void signame  void  __attribute__   interrupt __INTR_ATTRS        void signame  void     Deprecated    Introduces an interrupt handler function that runs with global interrupts ini
347. o  but the compiler didn t update the memory location for optimization reasons  The  worst thing you can do      this case is     uint8_t s   asm volatile     in  0    SREG     ADNET   cli   NND   ld _ tmp reg      1  Wo NE   inc   tmp reg     uA   st  al    tmp reg    ene    out   SREG    0  WAYNE     amp r   s    e   ptr    memory     The special clobber  memory  informs the compiler that the assembler code may mod   ify any memory location  It forces the compiler to update all variables for which the  contents are currently held in a register before executing the assembler code  And of  course  everything has to be reloaded again after this code     In most situations  a much better solution would be to declare the pointer destination  itself volatile     volatile uint8 t  ptr     This way  the compiler expects the value pointed to by ptr to be changed and will  load it whenever used and store it whenever modified     Situations in which you need clobbers are very rare  In most cases there will be better  ways  Clobbered registers will force the compiler to store their values before and reload  them after your assembler code  Avoiding clobbers gives the compiler more freedom  while optimizing your code     9 6 5 Assembler Macros    In order to reuse your assembler language parts  it is useful to define them as macros  and put them into include files  AVR Libc comes with a bunch of them  which could be  found in the directory avr  include  Using such include files may produ
348. o be in Program Space  Doing this would be an abuse of the intended meaning of  the const keyword     const is used to tell the compiler that the data is to be  read only   It is used to help  make it easier for the compiler to make certain transformations  or to help the compiler  check for incorrect usage of those variables     For example  the const keyword is commonly used in many functions as a modifier on  the parameter type  This tells the compiler that the function will only use the parameter  as read only and will not modify the contents of the parameter variable     const was intended for uses such as this  not as a means to identify where the data  should be stored  If it were used as a means to define data storage  then it loses its  correct meaning  changes its semantics  in other situations such as in the function pa   rameter example     9 4 3 Storing and Retrieving Data in the Program Space  Let s say you have some global data     unsigned char mydata 11  10          0  00  0  01  0  02  0  03  0  04  0  05  0  06  0  07  0  08  0  09     0  0   0  0   0  0   0  0   0  0   0  0   0  10 0  11 0  12 0  13     0  14 0  15 0  16 0  17 0  18 0  19 0  1   0  1   0  1   0  1           Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 4 Data in Program Space 277        0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27     0  28 0  29 0  2   0  2   0  2   0  2   0  2   0  2   0  30 0  31     0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B     0x3C 
349. o c As usual  include files go first  While conventionally  system  header files  those in angular brackets  lt       gt   go before application specific header  files  in double quotes   defines h comes as the first header file here  The main  reason is that this file defines the value of F_CPU which needs to be known before  including  lt utils delay h gt      The function ioinit    summarizes all hardware initialization tasks  As this function  is declared to be module internal only  static   the compiler will notice its simplic   ity  and with a reasonable optimization level in effect  it will inline that function  That  needs to be kept in mind when debugging  because the inlining might cause the debug   ger to  jump around wildly  at a first glance when single stepping     The definitions of uart_str and lcd str set up two stdio streams  The initial   ization is done using the FDEV_SETUP_STREAM    initializer template macro  so     static object can be constructed that can be used for IO purposes  This initializer macro  takes three arguments  two function macros to connect the corresponding output and  input functions  respectively  the third one describes the intent of the stream  read   write  or both   Those functions that are not required by the specified intent  like the  input function for 1cd_st r which is specified to only perform output operations  can  be given as NULL                    The stream uart_str corresponds to input and output operations performed
350. o contains many other utilities that work with  binary files that are created as part of the software development toolchain     Again  when these tools are built for the AVR target  the actual program names are  prefixed with  avr    For example  the assembler program name  for a native assembler  is  as   even though in documentation the GNU assembler is commonly referred to as   gas    But when built for an AVR target  it becomes  avr as   Below is a list of the  programs that are included in Binutils     avr as    The Assembler        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 1 Toolchain Overview 263       avr ld    The Linker   avr ar    Create  modify  and extract from libraries  archives      avr ranlib    Generate index to library  archive  contents   avr objcopy   Copy and translate object files to different formats   avr objdump   Display information from object files including disassembly   avr size   List section sizes and total size   avr nm   List symbols from object files   avr strings   List printable strings from files   avr strip   Discard symbols from files     avr readelf    Display the contents of ELF format files     avr addr2line    Convert addresses to file and line     avr c  filt    Filter to demangle encoded C   symbols        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 1 Toolchain Overview 264       9 1 5 avr libc    GCC and Binutils provides a lot of the tools to develop software  but there is one cri
351. o oo Pe Q N Ree 213  Tl  Detaled Descriphon  lt  s ooe ears o          Sox        213  722 Field Documentation   lt  s   a m sa s s k om eg 213   8 avr libc File Documentation 213             File Referenoe eo uoo ae p e Q x RUE Ee Xs 213       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS       8 1 1 Detailed Description                 82 dns Pile Referente uos os                  NUS  821 Detaled Description 222 22 222     5 3 mols File Reference 22222222222          2  8 3 1 Detailed Description                 84 atomic h File                    22  2              8 4 1 Detailed Description                 85 booth File Reference   2                 8 5 1 Detailed Description  cs seo ses ess  8 5 2 Define Documentation                8 6   r  l6 h File Reference       o s a s esa Re  8 6 1 Detailed Description  2               57 ctype  Pile Reference s cacce entesa ka sn  871 Detailed Description     222 288 5554  8 8 delayh Fil   Reference                      8 8 1 Detailed Description                 8 9 delay_basic h File Reference                 8 9 1 Detailed Description 2               8 10 eeprom h File Reference 2                 8 10 1 Detailed Description                 8 11          File Reference scs cesc mx n 4   8 11 1 Detailed Description                 8 12 idevopen c File Referenc                    8 12 1 Detaled Description    2 5456 re  8 13 15 5 Pile Reference  gt o  2    a a e a ee  8 13 1 Detailed Description       
352. of the same size as a pointer     typedef int16_t intptr_t    typedef uint16_t uintptr_t    Minimum width integer types    Integer types having at least the specified width       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 39 stdio h File Reference 244       typedef int8_t int_least8_t  typedef uint8_t uint_least8_t  typedef int16_t int_least16_t  typedef uint16_t uint_least16_t  typedef int32_t int_least32_t  typedef uint32_t uint_least32_t  typedef int64_t int_least64_t  typedef uint64_t uint_least64_t    Fastest minimum width integer types    Integer types being usually fastest having at least the specified width    typedef int8_t int_fast8_t  typedef uint8_t uint_fast8_t  typedef int16_t int_fast16_t  typedef uint16_t uint_fast16_t  typedef int32_t int_fast32_t  typedef uint32_t uint_fast32_t  typedef int64_t int_fast64_t  typedef uint64_t uint_fast64_t    Greatest width integer types    Types designating integer data capable of representing any value of any integer  type in the corresponding signed or unsigned category      typedef int64_t intmax_t    typedef uint64_t uintmax_t    8 39 stdio h File Reference  8 39 1 Detailed Description    Defines    define STDIO    1   define need NULL    define     need size t    define FILE struct file    define stdin  __iob 0      define stdout  __iob 1      define stderr  __iob 2      define EOF   1     define fdev_set_udata stream  u  do    stream      udata   u    while 0    define fdev_get_udata stream    s
353. on     include  lt stdio h gt     Introduction to the Standard IO facilities This file declares the standard IO facili   ties that are implemented in avr 1libc  Due to the nature of the underlying hardware   only a limited subset of standard IO is implemented  There is no actual file implementa   tion available  so only device IO can be performed  Since there s no operating system   the application needs to provide enough details about their devices in order to make  them usable by the standard IO facilities     Due to space constraints  some functionality has not been implemented at all  like some  of the printf conversions that have been left out   Nevertheless  potential users of  this implementation should be warned  the printf and scanf families of functions   although usually associated with presumably simple things like the famous  Hello   world   program  are actually fairly complex which causes their inclusion to eat up  a fair amount of code space  Also  they are not fast due to the nature of interpreting  the format string at run time  Whenever possible  resorting to the  sometimes non   standard  predetermined conversion facilities that are offered by avr libc will usually  cost much less in terms of speed and code size     Tunable options for code size vs  featureset In order to allow programmers a code  size vs  functionality tradeoff  the function vfprintf   which is the heart of the printf  family can be selected in different flavours using linker options  See
354. on  Controls a LED that can be directly  connected from OC1 OC1A to GND  The brightness of the LED is  controlled with the PWM  After each period of the PWM  the PWM  value is either incremented or decremented  that s all     SId  demo c v 1 9 2006 01 05 21 30 10 joerg_wunsch Exp 5     include  lt inttypes h gt    include  lt avr io h gt    include  lt avr interrupt h gt    include  lt avr sleep h gt         include  iocompat h     Note  1        enum   UP  DOWN       ISR  TIMERI_OVF_vect     Note  2             static uint16_t pwm   x Note  3      static uint8_t direction           switch  direction     Note  4         case UP   if    pwm                          direction   DOWN   break   case DOWN   if    pwm    0   direction   UP   break      OCR   pwm   x Note  5  x      void  ioinit  void     Note  6                 Timer 1 is 10 bit PWM  8 bit PWM on some ATtinys       TCCRIA   TIMER1_PWM_INIT        x Start timer 1       x       TCCRIA        TCCRIB could actually be the same register  so     take care to not clobber it       TCCR1B    TIMERI_CLOCKSOURCE          x Run        device dependent timer 1 setup hook if present        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 181       x    if defined TIMER1  SETUP  HOOK   TIMER1  SETUP  HOOK        endif       Set PWM value to 0      OCR   0         Enable        as output       DDROC   _BV  OC1         Enable timer 1 overflow interrupt       TIMSK         TOIE1    sei         
355. on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    385       WDTO_500MS  avr_watchdog  151   WDTO_60MS  avr_watchdog  151   WDTO_8S  avr_watchdog  151       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    
356. onstant at compile time is not recommended  and might result in a huge amount of  code generated     Returns     The _FFS   macro returns the position of the first  least significant  bit set in the  word val  or 0 if no bits are set  The least significant bit is position 1     6 11 3 Function Documentation    6 11 3 1 int ffs  int val  const    This function finds the first  least significant  bit set in the input value        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 84       Returns   The ffs   function returns the position of the first  least significant  bit set in the  word val  or 0 if no bits are set  The least significant bit is position 1    Note     For expressions that are constant at compile time  consider using the _FFS macro  instead     6 11 3 2 int ffs   long  const    Same as ffs    for an argument of type long     6 11 3 3 int ffsll  long Jong  const    Same as ffs    for an argument of type long long     6 11 3 4 void x memccpy  void x dest  const void    src  int val  size_t len    Copy memory area    The memccpy   function copies no more than len bytes from memory area src to mem   ory area dest  stopping when the character val is found    Returns     The memccpy   function returns a pointer to the next character in dest after val  or  NULL if val was not found in the first len characters of src     6 11 3 5 void x memchr  const void x src  int val  size t len   Scan memory for a character     The mem
357. org cgi cvsweb cgi ports devel avr binutils files patch ne  9 10 5        for the AVR target  Warning     You must install avr binutils and make sure your path is set properly before in   stalling avr gcc     The steps to build avr gcc are essentially same as for binutils        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 333       bunzip2     gcc  lt version gt  tar bz2   tar xf     cd gcc  lt version gt    mkdir obj avr   cd obj avr      configure   prefix SPREFIX   target avr   enable languages c c   N    disable nls   disable libssp   with dwarf2     make     make install         X Xr Xo    To save your self some download time  you can alternatively download only the  gcc core   version   tar bz2 and gcc c    lt version gt  tar bz2  parts of the gcc  Also  if you don t need C   support  you only need the core part  and should only enable the C language support     Note     Early versions of these tools did not support C      The stdc   libs are not included with C   for AVR due to the size limitations of   the devices    The official version of GCC might lack support for recent AVR   devices  A patch that adds more AVR types can be found at  http   www freebsd org cgi cvsweb cgi ports devel avr gcc files patch newdevi    9 10 6 AVR Libc  Warning     You must install avr binutils  avr gcc and make sure your path is set properly  before installing avr libc     Note     If you have obtained the latest avr l
358. ormation about Variable Attributes     avr libc provides a convenience macro for the Variable Attribute      include  lt avr pgmspace h gt     int mydata   PROGMEM           Note     The PROGMEM macro expands to the Variable Attribute of progmem  This  macro requires that you include  lt avr pgmspace h gt   This is the canonical  method for defining a variable in Program Space     To read back flash data  use the        read      macros defined         avr pgmspace h    All Program Memory handling macros are defined  there     There is also a way to create a method to define variables in Program Memory that is  common between the two compilers  IAR and AVR GCC   Create a header file that has  these definitions     fif defined  ICCAVR      IAR C Compiler    define FLASH DECLARE x    flash x    endif    if defined __GNUC__     GNU Compiler    define FLASH DECLARE x  x   attribute__  _progmem__     endif    This code snippet checks for the IAR compiler or for the GCC compiler and defines a  macro FLASH_DECLARE  x  that will declare a variable in Program Memory using  the appropriate method based on the compiler that is being used  Then you would used  it like so                 FLASH_DECLARE  int mydata              9 8 6 Non Returning main    To declare main   to be a non returning function in         it is done like this       C task void main  void          code          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 305       
359. ot h gt   Bootloader Support Utilities 96       6 12 2 3  define boot lock bits set safe lock bits     Value    do      boot spm busy wait    N  eeprom busy wait        boot_lock_bits_set  lock_bits          while  0     Same as boot_lock_bits_set   except waits for eeprom        spm operations to complete  before setting the lock bits     6 12 2 4  define boot lock fuse bits get address                 result     Value     __extension__       uint8_t __result     __asm__ __volatile__           Idi r30   3 n t      ldi r31  O n t       sts  1   2 n t      lpm  0  Z n t     io  ex    result  N     i    SFR MEM ADDR __SPM_REG    N            UINES_t  BOOT LOCK BITS SET   N   M   address  N     rO    r30    r31  N  N   N           Read the lock or fuse bits at address     Parameter address can be any of GET LOW FUSE BITS  GET LOCK BITS   GET EXTENDED FUSE BITS  or GET HIGH FUSE BITS     Note     The lock and fuse bits returned are the physical values  ie  a bit returned as 0  means the corresponding fuse or lock bit is programmed     6 12 2 5  define boot page erase address  boot page erase normal address        Erase the flash page that contains address     Note     address is a byte address in flash  not a word address        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr boot h gt   Bootloader Support Utilities 97       6 12 2 6  define boot page erase safe address     Value    do      boot spm busy wait        eeprom_busy_wait        boot_page_
360. ouble _ x   ATTR  CONST   ATTR CONST double copysign  double x  double y   double        double x  double y           CONST  double fma  double x  double y  double z           CONST  double fmax  double x  double y           CONST  double fmin  double x  double y           CONST  int signbit  double x  _          CONST  double            double x  ATTR  CONST   ATTR  CONST int isfinite  double x   double hypot  double x  double y                                                                       8 20 memccpy S File Reference    8 20 1 Detailed Description    Defines     define dest hi r25   define dest lo r24   define src  hi r23   define src  lo r22   define val lo r20   define len hi r19   define len lo r18   define ret hi r25   define ret lo r24       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    821 memchr S File Reference 230       8 21 memchr S File Reference  8 21 1 Detailed Description    Defines        define src  hi r25      define src_lo r24      define val lo r22     define len hi r21      define len lo r20      define ret hi r25      define ret lo r24    8 22 memchr PS File Reference  8 22 1 Detailed Description    8 23 memcmp S File Reference  8 23 1 Detailed Description    Defines        define 51 hi r25      define 51 lo 124      define s2 hi r23      define s2 lo 122      define len hi r21      define len lo r20      define ret hi r25      define ret lo r24    8 24 memcmp    5 File Reference  8 24 1 Detailed Description    8 25 memcpy S 
361. our assembler code     void delay  uint8 t ms      uint16_t cnt   asm volatile     An    L_dli        n t    mov    0     2    n t    mov  B0   B2   Nn    IL 412       n t    sbiw  A0  1    n t    brne L_dl2      n t    dec 81    n t    brne L_dli       n t      amp w   cnt    r   ms    r   delay_count              Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 297       The purpose of this function is to delay the program execution by a specified number  of milliseconds using a counting loop  The global 16 bit variable delay_count must  contain the CPU clock frequency in Hertz divided by 4000 and must have been set  before calling this routine for the first time  As described in the clobber section  the  routine uses a local variable to hold a temporary value     Another use for a local variable is a return value  The following function returns a 16  bit value read from two successive port addresses     uintl6_t inw uint8_t port      uintl6 t result   asm volatile     in    0  1    n t    in  BO   1    1     r   result    I    SFR IO ADDR  port           return result     Note   inw   is supplied by avr libc     9 6 7 C Names Used in Assembler Code    By default AVR GCC uses the same symbolic names of functions or variables      C and  assembler code  You can specify a different name for the assembler code by using a  special form of the asm statement     unsigned long value asm  clock     3686400     This statement instructs t
362. ous character     u  control U  ASCII NAK  deletes the entire input buffer    Aw  control W  ASCII ETB  deletes the previous input word  delimited by white  space     r  control R  ASCII DC2  sends a Vr  then reprints the buffer  refresh        t  tabulator  will be replaced by a single space    The function uart_init    takes care of all hardware initialization that is required to  put the UART into a mode with 8 data bits  no parity  one stop bit  commonly referred  to as 8N1  at the baud rate configured in defines h  At low CPU clock frequencies  the  U2X bit in the UART is set  reducing the oversampling from 16x to 8x  which allows  for a 9600 Bd rate to be achieved with tolerable error using the default 1 MHz RC  oscillator     The public function uart_putchar    again has suitable arguments for direct use  by the stdio stream interface  It performs the  n into   r n translation by recursively       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 37 Example using the two wire interface  TWD 207       calling itself when it sees a Nn character  Just for demonstration purposes  the   a   audible bell  ASCII BEL  character is implemented by sending a string to stderr   so it will be displayed on the LCD     The public function uart_getchar    implements the line editor  If there are char   acters available in the line buffer  variable rxp is not NULL   the next character will  be returned from the buffer without any UART interaction     If there are no ch
363. ovide a foun   dation for a software development toolchain  Note that these projects were designed to  originally run on Unix like systems     9 1 3           GCC stands for GNU Compiler Collection  GCC is highly flexible compiler system  It  has different compiler front ends for different languages  It has many back ends that  generate assembly code for many different processors and host operating systems  All  share a common  middle end   containing the generic parts of the compiler  including  a lot of optimizations     In GCC  a host system is the system  processor OS  that the compiler runs on  A       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 1  Toolchain Overview 262       target system is the system that the compiler compiles code for  And  a system is  the system that the compiler is built  from source code  on  If a compiler has the same  system for host and for target  it is known as a native compiler  If a compiler  has different systems for host and target  it is known as a cross compiler   And if  all three  build  host  and target systems are different  it is known as a Canadian  cross compiler  but we won t discuss that here   When GCC is built to execute on a  host system such as FreeBSD  Linux  or Windows  and it is built to generate code for  the AVR microcontroller target  then it is a cross compiler  and this version of GCC  is commonly known as  AVR GCC   In documentation  or discussion  AVR GCC is  used when referring to GCC tar
364. p     Variant of vsprintf   that uses a fmt string that resides in program memory        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 71       6 10  lt stdlib h gt   General utilities  6 10 1 Detailed Description     include  lt stdlib h gt     This file declares some basic C macros and functions as defined by the ISO standard   plus some AVR specific extensions     Data Structures       struct div_t     struct ldiv_t    Non standard  i e  non ISO C  functions     char    Itoa  long int  val  char   __ 5  int radix    char    utoa  unsigned int  val  char x__s  int radix    char    ultoa  unsigned long int __ val  char   _ 5  int              long random  void    void srandom  unsigned long __ seed    long random_r  unsigned long  ctx    char    itoa  int __ val  char  __s  int radix     define RANDOM_MAX Ox7FFFFFFF          Conversion functions for double arguments     Note that these functions are not located in the default library  1ibc a  but in the  mathematical library  1ibm a  So when linking the application  the    1m option needs  to be specified     e char    dtostre  double val  char    s  unsigned char __ prec  unsigned char    flags    e char    dtostrf  double __val  signed char __ width  unsigned char  prec  char     S       define DTOSTR_ALWAYS_SIGN 0x01      define DTOSTR_PLUS_SIGN 0x02      define DTOSTR_UPPERCASE 0x04    Defines       define RAND MAX Ox7FFF       Generated on Mon Oct 29 20 02 34 2
365. p    If  malloc heap endis 0  the allocator attempts to detect the bottom of stack  in order to prevent a stack heap collision when extending the actual size of the heap  to gain more space for dynamic memory  It will not try to go beyond the current  stack limit  decreased by   malloc margin bytes  Thus  all possible stack frames  of interrupt routines that could interrupt the current function  plus all further nested  function calls must not require more stack space  or they will risk colliding with the  data segment        The default value of malloc  margin is set to 32     9 2 4 Implementation details    Dynamic memory allocation requests will be returned with a two byte header  prepended that records the size of the allocation  This is later used by free    The  returned address points just beyond that header  Thus  if the application accidentally  writes before the returned memory region  the internal consistency of the memory al   locator is compromised     The implementation maintains a simple freelist that accounts for memory blocks that  have been returned in previous calls to free    Note that all of this memory is considered       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 2 Memory Areas and Using malloc   270       to be successfully added to the heap already  so no further checks against stack heap  collisions are done when recycling memory from the freelist     The freelist itself is not maintained as a separate data structure  but rath
366. pace h  233    ELPM dword enhanced    pgmspace h  234    ELPM enhanced    pgmspace h  234  ELPM  word classic  pgmspace h  234    ELPM word enhanced    pgmspace h  235  LPM classic  pgmspace h  235  LPM  dword classic  pgmspace h  236    LPM dword enhanced    pgmspace h  236    LPM enhanced    pgmspace h  237  LPM word classic  pgmspace h  237    LPM  word enhanced    pgmspace h  237  boot lock bits set  boot h  215  boot lock bits set alternate  boot h  215  boot page erase alternate  boot h  216  boot page erase extended  boot h  216  boot page erase normal  boot h  216  boot page fill alternate  boot h  217  boot page fill extended  boot h  217  boot page fill normal  boot h  218  boot page write alternate  boot h  218  boot page write extended  boot h  218  boot page write normal  boot h  219    boot rww  enable                                                    boot h  219  boot rww  enable alternate  boot h  219    compar fn t  avr  stdlib  72    malloc heap end  avr stdlib  80    malloc heap start  avr stdlib  80    malloc margin  avr stdlib  81   crc16 update  util crc  156            ccitt update  util crc  156   crc ibutton update  util crc  157   crc xmodem  update  util crc  157  delay loop 1  util delay  basic  160   delay loop 2  util delay  basic  160   delay ms  util delay  159   delay us  util delay  159   wdt write  wdt h  259       A more sophisticated project  191  A simple project  176  abort  avr stdlib  72  abs  avr  stdlib  72  acos  avr math  33  Addi
367. paradigms to perform this task   There   s a separate IO address space available  as it is known from some high level  CISC CPUs  that can be addressed with specific IO instructions that are applicable to  some or all of the IO address space  in  out  sbi etc    The entire IO address space  is also made available as memory mapped IO  i  e  it can be accessed using all the  MCU instructions that are applicable to normal data memory  The IO register space is  mapped into the data memory address space with an offset of 0x20 since the bottom  of this space is reserved for direct access to the MCU registers   Actual SRAM is  available only behind the IO register area  starting at either address 0x60  or 0x100  depending on the device      AVR Libc supports both these paradigms  While by default  the implementation uses  memory mapped IO access  this is hidden from the programmer  So the programmer  can access IO registers either with a special function like outb         include  lt avr io h gt     outb  PORTA  0x33      or they can assign a value directly to the symbolic address     PORTA   0x33     The compiler s choice of which method to use when actually accessing the IO port is  completely independent of the way the programmer chooses to write the code  So even  if the programmer uses the memory mapped paradigm and writes    PORTA    0  40     the compiler can optimize this into the use of an sbi instruction  of course  provided  the target address is within the allowable rang
368. pbrk P  135  strrchr  P  135  strsep P  135  strspn P  136  strstr P  136    avr sfr    BV  142   bit is clear  143   bit is set  143   loop until bit is clear  143  loop until bit is set  143    avr sleep    set sleep mode  146  sleep cpu  146  sleep  disable  146  sleep  enable  146  sleep  mode  146       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    368       SLEEP_MODE_ADC  145   SLEEP_MODE_EXT_STANDBY   145   SLEEP_MODE_IDLE  145   SLEEP_MODE_PWR_DOWN  145   SLEEP_MODE_PWR_SAVE  145   SLEEP_MODE_STANDBY  145    avr_stdint            6    43           6 MAX  43   INT16 MIN  43   int16 t  48   INT32 C  43   INT32 MAX  43   INT32  MIN  43   int32 t  48   INT64 C  43   INT64 MAX  43   INT64 MIN  43   int64 t  48   INT8_C  43   INT8 MAX  43   INT8  MIN  43   int8 t  48   INT FAST16 MAX  44  INT FASTI16 MIN  44  int fastl6 t  48   INT FAST32 MAX  44  INT FAST32  MIN  44  int_fast32_t  48   INT FAST64 MAX  44  INT FAST64 MIN  44  int fast64 t  48   INT FAST8 MAX  44  INT FASTS MIN  44  int fast8 t  48   INT LEAST16 MAX  44  INT LEASTI16 MIN  44  int 1    5 16 t  49   INT LEAST32 MAX  44  INT LEAST32 MIN  45  int least32  t  49   INT LEAST64 MAX  45  INT LEAST64 MIN  45  int least64 t  49   INT LEAST8 MAX  45    INT LEASTS  MIN  45  int least8 t  49  INTMAX C  45  INTMAX MAX  45               MIN  45  intmax t  49   INTPTR  MAX  45               MIN  45  intptr_t  49  PTRDIFF_MAX  45  PTRDIFF_MIN  46  SIG_ATOMIC_MAX  46  SIG_ATOMIC_MIN  46  SIZE_MAX 
369. ple at 0  100   the compiler then tests the low byte for 0  which succeeds  It then proceeds to test the  high byte  but that moment the ISR triggers  and the main context is interrupted  The  ISR will decrement the variable from 0x100 to OxFF  and the main context proceeds   It now tests the high byte of the variable which is  now  also 0  so it concludes the  variable has reached 0  and terminates the loop     Using the macros from this header file  the above code can be rewritten like      include   inttypes h     include  lt avr interrupt h gt    include  lt avr io h gt    include  lt util atomic h gt     volatile uint16_t ctr   ISR TIMER1_OVF_vect          GEr  5       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 23  lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 154       int  main void          ctr   0x200   start_timer       sei     uintl6 t ctr copy   do       ATOMIC_BLOCK  ATOMIC_FORCEON      ctr_copy   ctr         while  ctr_copy    0      This will install the appropriate interrupt protection before accessing variable ctr   so it is guaranteed to be consistently tested  If the global interrupt state were uncer   tain before entering the ATOMIC_BLOCK  it should be executed with the parameter  ATOMIC_RESTORESTATE rather than ATOMIC_FORCEON     Defines         define ATOMIC_BLOCK  type       define NONATOMIC_BLOCK  type       define ATOMIC_RESTORESTATE       define ATOMIC_FORCEON      define NONATOMIC_RESTORESTATE     defi
370. pointer to unsigned  int      u Matches an optionally signed decimal integer  the next pointer must be a    pointer to unsigned int        x Matches an optionally signed hexadecimal integer  the next pointer must be a  pointer to unsigned int       f Matches an optionally signed floating point number  the next pointer must be  a pointer to float           e  g         Equivalent to f        s Matches a sequence of non white space characters  the next pointer must be a  pointer to char  and the array must be large enough to accept all the sequence  and the terminating NUL character  The input string stops at white space or at the  maximum field width  whichever occurs first        c Matches a sequence of width count characters  default 1   the next pointer must  be a pointer to char  and there must be enough room for all the characters  no  terminating NUL is added   The usual skip of leading white space is suppressed   To skip white space f  irst  use an explicit space in the format         Matches a nonempty sequence of characters from the specified set of accepted  characters  the next pointer must be a pointer to char  and there must be enough  room for all the characters in the string  plus a terminating NUL character  The  usual skip of leading white space is suppressed  The string is to be made up       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 69       of characters in  or not in  a particular set  the 
371. positive value an int  fast64 t can hold     6 8 2 18  ftdefine INT FAST64 MIN INT64 MIN    smallest negative value an int  fast64 t can hold     6 8 2 19  define INT FAST8 MAX INT8 MAX    largest positive value an int  fast8 t can hold     6 8 2 20  define INT FAST8 MIN INT8 MIN    smallest negative value an int  fast8 t can hold     6 8 2 21  define INT LEASTI6 MAX INTI6 MAX    largest positive value an int  least16 t can hold     6 8 2 22  define INT LEASTI6 MIN INT16 MIN    smallest negative value an int  least16 t can hold        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 46       6 8 2 23  define INT LEAST32_MAX INT32 MAX    largest positive value an int_least32_t can hold     6 8 2 24  define INT LEAST32 MIN INT32 MIN    smallest negative value an int  least32 t can hold     6 8 2 25  define INT LEAST64 MAX INT64           largest positive value an int  least64  t can hold     6 8 2 26  define INT LEAST64 MIN INT64 MIN    smallest negative value an int  1625464  t can hold     6 8 2 27  define INT LEAST8 MAX INT8 MAX    largest positive value an int  least8 t can hold     6 8 2 28  define INT LEAST8 MIN INT8 MIN    smallest negative value an int  least8 t can hold     6 8 2 29  define INTMAX_C value  _ CONCAT value  LL     define a constant of type intmax_t    6 8 2 30  define INTMAX MAX INT64 MAX    largest positive value an intmax_t can hold     6 8 2 31  define INTMAX MIN INT64 MIN    smallest negati
372. printf  char  __s  size_t __n  const char   __fmt  va_list ap   int vsnprintf P  char  __s  size_t __n  const char   __fmt  va_list ap   int fprintf  FILE    stream  const char     fmt        int fprintf     FILE    stream  const char     fmt        int fputs  const char    str  FILE    stream    int fputs_P  const char    str  FILE   stream    int puts  const char    str    int puts P  const char    str    size t fwrite  const void    ptr  size_t _ size  size t nmemb  FILE       stream    int fgetc  FILE     stream    int ungetc  int __c  FILE    stream    char    fgets  char    str  int  size  FILE    stream    char    gets  char    str    size_t fread  void          size t  size  size t nmemb  FILE   stream   void clearerr  FILE   stream    int feof  FILE   stream    int ferror  FILE   stream    int vfscanf  FILE   stream  const char    fmt  va list        int vfscanf P  FILE    stream  const char    fmt  va list        int fscanf  FILE    stream  const char    fmt        int fscanf P  FILE   stream  const char     fmt        int scanf  const char     fmt        int scanf P  const char     fmt        int vscanf  const char    fmt  va_list         int sscanf  const char    buf  const char     fmt        int sscanf_P  const char    buf  const char     fmt        int fflush  FILE xstream    FILE x fdevopen  int  put  char  FILE      int xget  FILE                           Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facili
373. r   manently bind a variable to a register       For a very detailed discussion of setimp   longjmp    see Chapter 7 of Advanced Pro     gramming in the UNIX Environment  by W  Richard Stevens     Example      include   setjmp h    jmp buf env   int main  void      if  setjmp  env         handle error          main processing loop which calls          some where        void foo  void        blah  blah  blah iss    if  err             Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 7  lt setjmp h gt   Non local goto 39       longjmp  env  1      Functions      int setimp  imp_buf __jmpb    e void longjmp  jmp_buf __jmpb  int ret  ATTR NORETURN    6 7 2 Function Documentation    6 7 2 1 void longjmp  jmp buf __jmpb  int ret     Non local jump to a saved stack context     finclude  lt setjmp h gt     longjmp   restores the environment saved by the last call of setjmp   with the corre   sponding     jmpb argument  After longjmp   is completed  program execution contin   ues as if the corresponding call of setjmp   had just returned the value     ret   Note   longjmp   cannot cause 0 to be returned  If longjmp   is invoked with a second  argument of 0  1 will be returned instead   Parameters       jmpb Information saved by a previous call to setjmp         ret Value to return to the caller of setjmp       Returns     This function never returns     6 7 2 2 intsetjmp  jmp buf  jmpb     Save stack context for non local goto      include  lt setjmp h gt     setjmp 
374. r to the memory area dest     6 11 3 12 int strcasecmp  const char    s1  const char    52    Compare two strings ignoring case    The strcasecmp   function compares the two strings s1 and s2  ignoring the case of  the characters    Returns     The strcasecmp   function returns an integer less than  equal to  or greater than  Zero if s1 is found  respectively  to be less than  to match  or be greater than  52     consequence of the ordering used by strcasecmp   is that if s1 is an initial  substring of s2  then s1 is considered to be  less than  s2        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 11  lt string h gt   Strings 87       6 11 3 13 char x strcasestr  const char    s1  const char    s2     The strcasestr   function finds the first occurrence of the substring s2 in the string 51   This is like strstr    except that it ignores case of alphabetic symbols in searching for  the substring   Glibc  GNU extension      Returns     The strcasestr   function returns a pointer to the beginning of the substring  or  NULL if the substring is not found  If s2 points to a string of zero length  the  function returns s1     6 11 3 14 char x strcat  char    dest  const char    src   Concatenate two strings     The strcat   function appends the src string to the dest string overwriting the     0    char   acter at the end of dest  and then adds a terminating 70    character  The strings may not  overlap  and the dest string must have enough space for the resu
375. r x  PGM_P    int strcasecmp_P  const char     PGM_P  _ATTR_PURE   char    strcasestr P  const char x  PGM_P  __ATTR_PURE  size_t strcspn_P  const char   s  PGM_P reject  _ ATTR_PURE                         size_t strlcat_P  char x             size_t    size_t strlcpy_P  char     PGM_P  size_t    size_t strlen_P  PGM_P  __ATTR_CONST   size_t strnlen_P             size_t  _ ATTR_CONST    int strnemp_P  const char     PGM_P  size_t  _ ATTR_PURE   int strncasecmp_P  const char x  PGM_P  size_t  _ ATTR_PURE                char    strncat_P  char     PGM_P  size_t   char    strncpy_P  char                size_t   char    strpbrk_P  const char xs  PGM_P accept  ATTR_PURE       PGM_P strrchr_P  PGM_P s  int val  ATTR  CONST  char    strsep P  char   sp  PGM_P delim   size_t strspn_P  const char   s  PGM P accept  ATTR_PURE          char    strstr P  const char     PGM  P  ATTR PURE       8 33 2 Define Documentation    8 33 21  define ELPM   classic  addr        Value       extension     N  uint32 t _ addr32    uint32 t   addr      uint8 t _ result  N    asm    N    N   out  2  SUI             N     now r31  SBI   Age  b    PGM  VOID    memrchr     PGM  VOID P s  int val  size t len  ATTR         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 33 pgmspace h File Reference    235        mov r30     1      elpm      mov        y                     EO       result            8 33 22  define    Value      L extension      n t   0  ro         n t      n t        result
376. r24  7  inc r24  st 7  r24  sei    One easy solution to avoid clobbering register r24 is  to make use of the special tem     porary register tmp reg defined by the compiler     asm volatile    cli    ld _tmp_reg__   a0     inc __tmp_reg__    st a0  __tmp_reg__     sel    e   ptr           n t     n t     n t     n t     n t     The compiler is prepared to reload this register next time it uses it  Another problem  with the above code is  that it should not be called in code sections  where interrupts  are disabled and should be kept disabled  because it will enable interrupts at the end   We may store the current status  but then we need another register  Again we can solve  this without clobbering a fixed  but let the compiler select it  This could be done with    the help of a local C variable     uint8_t s    asm volatile     in  0              sli    ld _tmp_reg__     1     inc   tmp_reg__     st Sal  __tmp_reg__    out __SREG__   0      amp r   s      an    e   ptr     LA ob Es  mne   wha  MATINET                                 Generated      Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 295       Now every thing seems correct  but it isn t really  The assembler code modifies the  variable  that pt x points to  The compiler will not recognize this and may keep its  value      any of the other registers  Not only does the compiler work with the wrong  value  but the assembler code does too  The C program may have modified the value  to
377. rball to savannah     Announce the branch and the branch tag to the avr libc dev list so other devel   opers can checkout the branch     Note     CVS tags do not allow the use of periods  7         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 13    Release Numbering and Methodology 359       9 13 2 2 Making    release    stable release will only be done on a branch  not from  the cvs HEAD     The following steps should be taken when making a release     10     11   12       Make sure the source tree you are working from is on the correct branch      cvs update  r avr libc  lt major gt _ lt minor gt  branch         Update the package version in configure ac and commit it to cvs       Update the gnu tool chain version requirements in the README and commit to    CVS       Update the ChangeLog file to note the release and commit to cvs on the branch     Add  Released avr libc  lt this_release gt         Update the NEWS file with pending release number and commit to cvs     Change  Changes since avr libc  lt last_release gt    to  Changes in avr libc     this relelase           Bring the build system up to date by running bootstrap and configure       Perform a  make distcheck    and make sure it succeeds  This will create the    source tarball       Tag the release      cvs tag avr libe    major      minor      patch  release       Upload the tarball to savannah     Update the NEWS file  and commit to cvs   Add  Changes since avr libc    major      minor    
378. rcmp  86  strepy  87 BADISR_vect  strespn  87 avr_interrupts  120  strlcat  87 BAUD_TOL  strlcpy  88 util_setbaud  163  strlen  88 bit_is_clear  strlwr  88 avr_sfr  143  strncasecmp  88 bit_is_set  strncat  89 avr_sfr  143  strncmp  89 boot h  214  strncpy  89 boot lock bits set  215  strnlen  89 boot lock bits set alternate  215  strpbrk  90 boot page erase alternate  216  strrchr  90 boot page erase extended  216  strrev  90 boot page erase normal  216  strsep  90 boot page fill alternate  217  strspn  91 boot page fill extended  217  strstr  91 boot page fill normal  218          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen                   INDEX 371  boot_page_write_alternate  218 cbi  boot_page_write_extended  218 deprecated_items  169  boot_page_write_normal  219 ceil     boot rww  enable  219 avr math  33  boot rww  enable alternate  219 clearerr   boot is spm interrupt avr stdio  58   avr boot  94 cli   boot lock bits set avr interrupts  120   avr boot  94 clock prescale set   boot lock bits set safe power h  238   avr boot  94 Combining C and assembly source files    boot lock fuse bits get 173   avr boot  95 copysign   boot page erase avr math  33   avr boot  95 COS   boot page erase safe avr math  33   avr boot  95 cosh   boot page fill avr math  33   avr boot  96 crc16 h  220  boot page fill safe ctype  avr boot  96 isalnum  16  boot page write isalpha  16  avr boot  96 isascii  17  boot_page_write_safe isblank  17  avr_boot  96 iscntrl  17  boot
379. really spell check the argument passed to them  Thus  by  misspelling one of the names below in a call to ISR    a function will be created  that  while possibly being usable as an interrupt function  is not actually wired into  the interrupt vector table  The compiler will generate a warning if it detects a sus   piciously looking name of a ISR   function  i e  one that after macro replacement  does not start with   vector           Vector name Old vector   Description Applicable for device  name                         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts    106          Vector name    Old  name    vector    Description    Applicable for device       ADC_vect    SIG_ADC    ADC Conversion  Complete    AT90S2333  419054433  AT90S4434   AT90S8535  AT90PWMS3      9         2   AT90PWM1  AT90CANI28  AT90CAN32   AT90CAN64  ATmegal03  ATmegal28   ATmegal6  ATmegal63  ATmegal65   ATmegal65P  ATmegal69  ATmegal69P   ATmega32  ATmega323  ATmega325   ATmega3250  ATmega329  ATmega329P   ATmega3290  ATmega3290P  ATmega64   ATmega645  ATmega6450  ATmega649   ATmega6490   ATmega8  ATmega8535   ATmegal68  ATmega48  ATmega88  AT   mega640  ATmegal280  ATmegal281   ATmega2560  ATmega2561  ATmega324P   ATmegal64P  ATmega644P  ATmega644   ATtiny13  ATtiny15  ATtiny26  ATtiny24   ATtiny44  ATtiny84  ATtiny45  ATtiny25   ATtiny85  ATtiny261  ATtiny461  AT   tiny861  AT90USB1287  AT90USB1286   AT90USB647  AT90USB646       ANALOG
380. reelist entry will be prepared  An attempt is then made to  aggregate the new entry with possible adjacent entries  yielding a single larger entry  available for further allocations  That way  the potential for heap fragmentation is  hopefully reduced     A call to realloc   first determines whether the operation is about to grow or shrink the  current allocation  When shrinking  the case is easy  the existing chunk is split  and the  tail of the region that is no longer to be used is passed to the standard free   function for  insertion into the freelist  Checks are first made whether the tail chunk is large enough  to hold a chunk of its own at all  otherwise realloc   will simply do nothing  and return  the original region     When growing the region  it is first checked whether the existing allocation can be ex   tended in place  If so  this is done  and the original pointer is returned without copying  any data contents  As a side effect  this check will also record the size of the largest  chunk on the freelist     If the region cannot be extended in place  but the old chunk is at the top of heap  and  the above freelist walk did not reveal a large enough chunk on the freelist to satisfy  the new request  an attempt is made to quickly extend this topmost chunk  and thus  the heap   so no need arises to copy over the existing data  If there s no more space  available      the heap  same check is done as in malloc     the entire request will fail     Otherwise  malloc   w
381. register     When accessing one of the registers that use TEMP from the main application  and  possibly any other one from within an interrupt routine  care must be taken that no  access from within an interrupt context could clobber the TEMP register data of an  in progress transaction that has just started elsewhere     To protect interrupt routines against other interrupt routines  it s usually best to use the  ISR   macro when declaring the interrupt function  and to ensure that interrupts are still  disabled when accessing those 16 bit timer registers     Within the main program  access to those registers could be encapsulated in calls to the  cli   and sei   macros  If the status of the global interrupt flag before accessing one of  those registers is uncertain  something like the following example code can be used     uint16_t   read timerl  void       uint8_t sreg   uintl6 t val     sreg   SREG   cli          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 312       val   TCNT1   SREG   sreg     return val     Back to FAQ Index     9 9 10 How do I use a  define   d constant in      asm statement   So you tried this     asm volatile  sbi 0x18 0x07        Which works  When you do the same thing but replace the address of the port by its  macro name  like this     asm volatile  sbi PORTB 0x07           you get    compilation error   Error  constant value required      PORTB is a precompiler definition included in the proces
382. registers                 142  6 19 1 Detailed Description  lt       24 0 6 24 sa s         142  6 19 2 Define Documentation                       143   lt avr sleep h gt   Power Management and Sleep                     145  6 20 1 Detailed Descriphon  lt  s cs s c saca sus               145  620 2 Define Documentation    lt    c sesepi tanfu ik 146  6 20 3 Function Documentation                      147   lt avr version h gt   avr libc version macros                 147  62L1 Detailed Descripiien sz oc km xem f 9339 9 xo RR Rs 147  6212 Define Documentation     es esre este ieste 148   lt avr wdt h gt   Watchdog timer handling                  149  622 1 Detailed Descripfion sp     es ce cpa gd ee es siks 149  6 22 2 Define Documentation                       150     lt util atomic h gt  Atomicly and Non Atomically Executed Code Blocks 152  6 23 1 Detailed Description                        152  6 23 2 Define Documentangn    lt 2 2244 8  6 heey a wae es 154       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS iv       6 24    6 25    6 26    6 27    6 28    6 29    6 31  6 32    6 34     lt util crc16 h gt   CRC Computations                    156  6241 Detailed Description  lt  o  e  s sss xxx tars 156  6 24 2 Function Documentation                      157   lt util delay h gt   Convenience functions for busy wait delay loops       159  6 25 1 Detailed Description 2                 2    159  6 25 2 Function Documentation                      160 
383. rence  222222225 Xo Ro Uy Y A NU s 240  8 37 1 Detaled Description   4 622444885 i ia eae es 240  stdint h                       ong a ee a o RES 241  8 38 1 Detailed Description    22s mms 241  sta File Referees  sous ook Y he ew      244  8 39 1 Detailed Description    65666546 RR RR 244           Pile Reference  lt   cer o s RR Rx Rex N 246  6 401 Detaled Description    22 mc  Rom        246  sicasecmp s File Referente ico os RS osx D 248  8 41 1 Detailed Description                        248  streasecmp_ P5                                    248  5421 Detaled Description 22 2222 2 2 2222 25525 248  sticasestr s File Reference 2    2 2  2 2222        2 248  5431 Detailed Descripti  n 22 2   22 252 2         248         Pile          222222225299 Oe           248  8 44 1 Detailed Description                        248  strcat_PS File Referenc   soo ao 5 4    865 25 66 o a ko k HS a 249  5 45 1 Detailed Description                        249  sichrs File Referente 022502255222 EIE E EARS 249       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS ix       8 47    8 48    8 49    8 50    8 51    8 52    8 53    8 54    8 55    8 56    8 57    8 58    8 59    8 60    8 61    8 46 1 Detailed Description                        249  schr PS File Reference 222222252222 25 52 555  249  8 47 1 Detaled Description  lt s oe ec cce ms oem RR 249         File Referente 2 2 5222 9 5284 w wo s O 3 249  8 48 1 Detailed Description                        249  strchr
384. respectively  to be less than  to match  or be greater than the array member     The bsearch   function returns a pointer to a matching member of the array  or a null  pointer if no match is found  If two members compare as equal  which member is  matched is unspecified     6 10 4 7 void   calloc  size t __nele  size_t __size     Allocate nele elements of size each  Identical to calling malloc    using nele    size as argument  except the allocated memory will be cleared to zero        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 10  lt stdlib h gt   General utilities 75       6 10 4 8 div tdiv  int               __denom     The div   function computes the value num denom and returns the quotient and re   mainder in a structure named div_t that contains two int members named quot and  rem     6 10 4 9            dtostre  double val  char    __s  unsigned char __prec  unsigned  char __flags     The dtostre   function converts the double value passed in va1 into an ASCII repre   sentation that will be stored under s  The caller is responsible for providing sufficient  storage in s     Conversion is done in the format      d ddde dd  where there is one digit before  the decimal point character and the number of digits after it is equal to the precision  prec  if the precision is zero  no decimal point character appears  If flags has the  DTOSTRE_UPPERCASE bit set  the letter   E   rather than    e      will be used to  introduce the exponent  The exponent a
385. ring that resides in program memory     6 9 3 11 int fputc  int _ c  FILE    stream     The function fput c sends the character c  though given as type int  to stream  It  returns the character  or EOF in case an error occurred           Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 62       6 9 3 12 int fputs  const char    str  FILE    stream   Write the string pointed to by str to stream stream     Returns 0 on success and EOF on error     6 9 3 13 int fputs_P  const char    __str  FILE    stream     Variant of fputs   where st r resides in program memory     6 9 3 14 size_t fread  void    ptr  size t __size  size_t __nmemb  FILE x     stream     Read nmemb objects  size bytes each  from stream  to the buffer pointed to by  ptr     Returns the number of objects successfully read  i  e  nmemb unless an input error  occured or end of file was encountered  feof   and ferror   must be used to distinguish  between these two conditions     6 9 3 15 int fscanf  FILE   _ stream  const char        fmt        The function f scanf performs formatted input  reading the input data from st ream     See vfscanf   for details     6 9 3 16 int fscanf_P  FILE   _ stream  const char   _                 Variant of fscanf   using a fmt string in program memory     6 9 3 17 size_t fwrite  const void    __ptr  size t size  size t __nmemb  FILE      stream     Write nmemb objects  size bytes each  to stream  The first byte of the first
386. roject  is managed by a C program part for easy maintenance  time critical parts are written  directly in manually optimized assembly language for shortest execution times possi   ble  Naturally  this kind of project is very closely tied to the hardware design  thus it is  custom tailored to a particular controller type and peripheral setup  As an alternative to  the assembly language solution  this project also offers a C only implementation  de   ploying the exact same peripheral setup  based on a more sophisticated  and thus more  expensive  but pin compatible controller     While the simple demo is meant to run on about any AVR setup possible where a  LED could be connected to      OCR1 A  output  the large and stdio demos are mainly  targeted to the Atmel STK500 starter kit  and the TWI example requires a controller  where some 24Cxx two wire EEPPROM can be connected to  For the STK500 demos   the default CPU  either an AT90S8515 or an ATmega8515  should be removed from  its socket  and the ATmegal6 that ships with the kit should be inserted into socket  SCKT3100A3  The ATmega16 offers an on board ADC that is used in the large demo   and all AVRs with an ADC feature a different pinout than the industry standard com   patible devices     In order to fully utilize the large demo  a female 10 pin header with cable  connecting  to a 10 kOhm potentiometer will be useful     For the stdio demo  an industry standard HD44780 compatible LCD display of at least  16x1 characters wi
387. rolling the linkeravr ld                    353  9 12 Using the avrdude program   lt  s zz Rm  m mg es 355  9 13 Release Numbering and Methodology                   357  9 13 1 Release Version Numbering Scheme                  357  9 13 2 Releasing AVR Libo                        357  9 14 Acknowledgments                   nox X RR 360  915 Todo Lif l us s was a                    eA em Eee QU N 361  9 16 Deprecated List 222222252254 EG QO Rs eS 361       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    1 AVR Libc 2       1 AVR Libe    11 Introduction    The latest version of this document is always available from  http   savannah nongnu org projects avr libc     The AVR Libc package provides a subset of the standard C library for Atmel AVR  8 bit RISC microcontrollers  In addition  the library provides the basic  startup code needed by most applications     There is a wealth of information in this document which goes beyond simply describ   ing the interfaces and routines provided by the library  We hope that this document  provides enough information to get a new AVR developer up to speed quickly using  the freely available development tools  binutils  gcc avr libc and many others     If you find yourself stuck on a problem which this document doesn   t quite address  you  may wish to post a message to the avr gcc mailing list  Most of the developers of the  AVR binutils and gcc ports in addition to the devleopers of avr libc subscribe to the  list  so you w
388. rrupt routine could also access this register   or another register that uses TEMP   see the appropriate FAQ entry        Note  6      This routine gets called after a reset  It initializes the PWM and enables interrupts     Note  7      The main loop of the program does nothing     all the work is done by the interrupt  routine  The sleep_mode    puts the processor on sleep until the next interrupt   to conserve power       course  that probably won t be noticable as we are still  driving a LED  it is merely mentioned here to demonstrate the basic principle     Note  8      Early AVR devices saturate their outputs at rather low currents when sourcing cur   rent  so the LED can be connected directly  the resulting current through the LED  will be about 15 mA  For modem parts  at least for the ATmega 128   however  Atmel has drastically increased the IO source capability  so when operating at 5     Vcc  R2 is needed  Its value should be about 150 Ohms  When operating the  circuit at 3 V  it can still be omitted though     6 34 2 The Source Code       THE BEER WARE LICENSE   Revision 42         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project    180                                        lt joerg FreeBSD ORG gt  wrote this file       long as you retain this notice you  can do whatever you want with this stuff  If we meet some day  and you think  this stuff is worth it  you can buy me a Deer in return  Joerg Wunsch    Simple AVR demonstrati
389. rtunately not yet described in the official  documentation  The most notable operators are        lo8 Takes the least significant 8 bits of a 16 bit integer     hi8 Takes the most significant 8 bits of a 16 bit integer       pm Takes a program memory  ROM  address  and converts it into a RAM ad   dress  This implies a division by 2 as the AVR handles ROM addresses as 16 bit  words  e g  in      IJMP or ICALL instruction   and can also handle relocatable  symbols on the right hand side     Example     141 r24  lo8 pm somefunc    141 r25  hi8 pm somefunc    call something    This passes the address of function somefunc      the first parameter to function  something     9 6 Inline Assembler Cookbook    AVR GCC  Inline Assembler Cookbook  About this Document    The GNU C compiler for Atmel AVR RISC processors offers  to embed assembly  language code into C programs  This cool feature may be used for manually optimizing  time critical parts of the software or to use specific processor instruction  which are not  available in the C language     Because of a lack of documentation  especially for the AVR version of the compiler  it  may take some time to figure out the implementation details by studying the compiler  and assembler source code  There are also a few sample programs available in the net   Hopefully this document will help to increase their number        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 287       It s assumed
390. ruction   Fortunately  this example uses the  amp  constraint modifier to instruct the compiler not to  select any register for the output value  which is used for any of the input operands   Back to swapping           is the code to swap high and low byte of a 16 bit value        asm volatile   mov tmp_reg__      0    n t    mov    0   BO          mov  B0    tmp reg      n t      r   value     O   value           First you will notice the usage of register __tmp_reg__  which we listed among  other special registers in the Assembler Code section  You can use this register without  saving its contents  Completely new are those letters A and B in SAO and  BO  In fact  they refer to two different 8 bit registers  both containing a part of value        Another example to swap bytes of a 32 bit value        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook 293          asm volatile   mov tmp_reg__   A0    n t    mov    0     0    n t    mov  D0    tmp reg      n t    mov   tmp reg    BO    n t    mov  BO   CO  TAXE   mov    0    tmp reg      n t     r   value    0   value           If operands do not fit into a single register  the compiler will automatically assign  enough registers to hold the entire operand  In the assembler code you use  A0 to refer  to the lowest byte of the first operand   A1 to the lowest byte of the second operand  and so on  The next byte of the first operand will be  B0  the next byte  CO and so on     This al
391. s having at least the specified width    typedef int8_t int_least8_t  typedef uint8_t uint_least8_t  typedef int16_t int_least16_t  typedef uint16_t uint_least16_t  typedef int32_t int_least32_t  typedef uint32_t uint_least32_t  typedef int64_t int_least64_t  typedef uint64_t uint_least64_t    Fastest minimum width integer types    Integer types being usually fastest having at least the specified width    typedef int8_t int_fast8_t  typedef uint8_t uint_fast8_t  typedef int16 t int_fast16_t  typedef uint16_t uint_fast16_t  typedef int32_t int_fast32_t  typedef uint32_t uint_fast32_t  typedef int64_t int_fast64_t  typedef uint64_t uint_fast64_t    Greatest width integer types    Types designating integer data capable of representing any value of any integer type in  the corresponding signed or unsigned category      typedef int64_t intmax_t    typedef uint64_t uintmax_t    Limits of specified width integer types    C   implementations should define these macros only when     STDC LIMIT    MACROS is defined before  lt stdint h gt  is included           define INT8_MAX 0x7f      define INT8_MIN   INT8_MAX   1      define UINT8_MAX  L_CONCAT INT8_MAX  U    2U   1U        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 42        define INT16_MAX 0x7fff    define INT16_MIN   INT16_MAX   1     define UINT16_MAX  __CONCAT INT16_MAX  U    2U   1U    define INT32 MAX Ox7fffffffL   define INT32 MIN  CINT32 MAX   IL     define
392. s imposes a number of restrictions on  the C   programs that can be compiled  Among them are        Obviously  none of the C   related standard functions  classes  and template  classes are available        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 310          The operators new and delete are not implemented  attempting to use them  will cause the linker to complain about undefined external references   This  could perhaps be fixed         Some of the supplied include files        not C   safe  i  e  they need to be wrapped  into    extern  C          lt        This could certainly be fixed  too        Exceptions are not supported  Since exceptions are enabled by default in the  C   frontend  they explicitly need to be turned off using    no exceptions  in the compiler options  Failing this  the linker will complain about an undefined  external reference to        personality  510     Constructors and destructors are supported though  including global ones     When programming C   in space  and runtime sensitive environments like microcon   trollers  extra care should be taken to avoid unwanted side effects of the C   calling  conventions like implied copy constructors that could be called upon function invo   cation etc  These things could easily add up into a considerable amount of time and  program memory wasted  Thus  casual inspection of the generated assembler code   using the  5 compiler option  seems to be warrant
393. s not  apply to the assembler     So in order to debug an assembler input file  possibly one that has to be passed through  the C preprocessor   it s the assembler that needs to be told to include line number  information into the output file   Other debug information like data types and variable  allocation cannot be generated  since unlike a compiler  the assembler basically doesn t  know about this   This is done using the  GNU  assembler option  gstabs     Example     5 avr as  mmcu atmegal28   gstabs     foo o foo s    When the assembler is not called directly but through the C compiler frontend   either implicitly by passing a source file ending in  S  or explicitly using      assembler with cpp   the compiler frontend needs to be told to pass the   gstabs option down to the assembler  This is done using  Wa   gstabs  Please  take care to only pass this option when compiling an assembler input file  Otherwise   the assembler code that results from the C compilation stage will also get line number  information  which confuses the debugger        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 314       Note     You can also use  Wa   gstabs since the compiler will add the extra          for  you     Example     5 EXTRA_OPTS   Wall  mmcu atmegal28  x assembler with cpp     avr gcc  Wa   gstabs   EXTRA_OPTS   c  o foo o foo S    Also note that the debugger might get confused when entering a piece of code that has  a non local
394. s over and over  they can all be placed      a make file   To build the demo project using make  save the following         file called Makefile     Note     This Makefile can only be used as input for the GNU version of make              PRG   demo   OBJ   demo o   MCU_TARGET   at90s2313   MCU_TARGET   at90s2333   MCU_TARGET   at90s4414   MCU_TARGET   at90s4433   MCU_TARGET   at90s4434   MCU_TARGET   at90s8515   MCU_TARGET   at90s8535   MCU_TARGET   atmegal28   MCU_TARGET   atmegal280   MCU_TARGET   atmegal281   MCU_TARGET   atmegal6   MCU_TARGET   atmegal63   MCU_TARGET   atmegal64p   MCU_TARGET   atmega165   MCU_TARGET   atmegal65p   MCU_TARGET   atmega168   MCU_TARGET   atmegal69   MCU_TARGET   atmegal69p   MCU_TARGET   atmega32   MCU_TARGET   atmega324p   MCU_TARGET   atmega325   MCU_TARGET   atmega3250   MCU_TARGET   atmega329   MCU_TARGET   atmega3290   MCU_TARGET   atmega48   MCU_TARGET   atmega64   MCU_TARGET   atmega640   MCU_TARGET   atmega644   MCU_TARGET   atmega644p   MCU_TARGET   atmega645   MCU_TARGET   atmega6450   MCU_TARGET   atmega649   MCU_TARGET   atmega6490  MCU_TARGET   atmega8   MCU_TARGET   atmega8515   MCU_TARGET   atmega8535   MCU_TARGET   atmega88   MCU_TARGET   attiny2313   MCU_TARGET   attiny24   MCU_TARGET   attiny25   MCU_TARGET   attiny26   MCU_TARGET   attiny26   MCU_TARGET   attiny44   MCU_TARGET   attiny45   MCU_TARGET   attiny46       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 191        MCU_TA
395. scription 222 222 2               258   5 86 struprS File Reference 2 2                        258  8 86 1 Detailed Description                        258   Bayt wih Pile Reene  222522 e Z Qua e Rue BARES 258  8 87 1 Detailed Description 22 2   2 2  2               258   8 88 wdth File Reference 2                   2 22   260  8 88 1 Detailed Description    sso RR 260  8 95 3 DefneDocumentalo  H    24654665 85 2 sade ko 260   9 avr libc Page Documentation 261  91  Paaleh  in              sn  eoo soe moo dun omo UR o4 P ER SOROR Oa 261  OLI o dinDGduchH  l2 2 2 danak          261   91 2  PSEPand ONU        he RR RR eR ER 261          OCC o ermes eee    ox x Y es                 261   414 ONU EIUS  zem da zg ES EE        5 262       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    CONTENTS xii       9 2    93    9 4    a    913          eee 264  9 16 Building Sofware   sea g po xx eR eo 264  AE            S   oie uem   evum X eerte e in 264  914 GDBilInugh DDD         99 c9 9 RR 264  919               22 222222252225                        265       SuaBlAVES 52223555                 ee Gk          265                22oxeo Yo oe e                  265  9 1 12 Toolchain Distributions  Distros                   265         Ze  266  Memory Areas and Using                                 266  921                       A 266  922 Internal vs  extemal RAM                 267  923    Tomables                                    268  O24  Implementatiomn detis 222222222
396. set is defined by the characters  between the open bracket   character and a close bracket   character  The set  excludes those characters if the first character after the open bracket is a circum   flex    To include a close bracket in the set  make it the first character after the  open bracket or the circumflex  any other position will end the set  The hyphen  character     is also special  when placed between two other characters  it adds all  intervening characters to the set  To include a hyphen  make it the last character  before the final close bracket  For instance      0 9   means the set of every   thing except close bracket  zero through nine  and hyphen  The string ends with  the appearance of a character not in the  or  with a circumflex  in  set or when  the field width runs out     p Matches a pointer value  as printed by p in printf     the next pointer must be  a pointer to void     n Nothing is expected  instead  the number of characters consumed thus far from  the input is stored through the next pointer  which must be a pointer to int  This  is not a conversion  although it can be suppressed with the   flag     These functions return the number of input items assigned  which can be fewer than  provided for  or even zero  in the event of a matching failure  Zero indicates that  while  there was input available  no conversions were assigned  typically this is due to an  invalid input character  such as an alphabetic character for a d conversion  The value  
397. simplified functions that don t take     stream argument     The first stream opened with write intent using fdevopen    will be assigned to both   stdin and stderr     6 9 3 Function Documentation    6 9 3 1 void clearerr  FILE    stream     Clear the error and end of file flags of st ream        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 60       6 9 3 2 int fclose  FILE    _ stream   This function closes stream  and disallows and further IO to and from it     When using fdevopen   to setup the stream  a call to fclose   is needed in order to free  the internal resources allocated     If the stream has been set up using fdev_setup_stream   or FDEV_SETUP_   STREAM   use fdev_close   instead     It currently always returns 0  for success      6 9 33 FILE   fdevopen  int     char  FILE     put  int     FILE x  get   This function is a replacement for fopen        It opens a stream for a device where the actual device implementation needs to be  provided by the application  If successful  a pointer to the structure for the opened  stream is returned  Reasons for a possible failure currently include that neither the  put nor the get argument have been provided  thus attempting to open a stream with  no IO intent at all  or that insufficient dynamic memory is available to establish a new  stream     If the put function pointer is provided  the stream is opened with write intent  The  function passed as put shall tak
398. simply be ignored  including white space  that  is normally used to consume any amount of white space in the input stream   However   the usual skip of initial white space in the formats that support it is implemented     6 9 3 35 int vfscanf_P  FILE x stream  const char x        va_list          Variant of vfscanf   using a fmt string in program memory     6 9 3 36 int vprintf  const char x _ fmt  va_list          The function vprintf performs formatted output to stream stdout  taking a vari   able argument list as in vfprintf       See vfprintf   for details     6 9 3 37 int vscanf  const char           va_list          The function vscanf performs formatted input from stream st din  taking a variable  argument list as in vfscanf       See vfscanf   for details     6 9 3 38 int vsnprintf  char    __s  size_t __n  const char    fmt  va_list ap     Like vsprintf     but instead of assuming s to be of infinite size  no more than n  characters  including the trailing NUL character  will be converted to s     Returns the number of characters that would have been written to s if there were  enough space     6 9 3 39 int vsnprintf_P  char     s size t __n  const char   __ fmt  va_list ap     Variant of vsnprintf    that uses    fmt string that resides in program memory     6 9 3 40 int vsprintf  char    __s  const char    fmt  va_list ap     Like sprintf    but takes a variable argument list for the arguments     6 9 3 41 int vsprintf_P  char    _ 5  const char           va_list a
399. sing a larger radix will require a smaller minimal buffer  size     Warning   If the buffer is too small  you risk a buffer overflow   Conversion is done using the radix as base  which may be a number between 2     binary conversion  and up to 36  If radix is greater than 10  the next digit after   9  will be the letter  a      The ultoa   function returns the pointer passed as s     6 10 4 30 char   utoa  unsigned int val  char    __s  int radix   Convert an unsigned integer to a string     The function utoa   converts the unsigned integer value from val into an ASCII repre   sentation that will be stored under s  The caller is responsible for providing sufficient  storage in s     Note     The minimal size of the buffer s depends on the choice of radix  For example  if  the radix is 2  binary   you need to supply a buffer with a minimal length of 8    sizeof  unsigned int    1 characters  i e  one character for each bit plus one for the  string terminator  Using a larger radix will require a smaller minimal buffer size     Warning   If the buffer is too small  you risk a buffer overflow     Conversion is done using the radix as base  which may be a number between 2   binary conversion  and up to 36  If radix is greater than 10  the next digit after   9  will be the letter  a      The utoa   function returns the pointer passed as s   6 10 5 Variable Documentation    6 10 5 1 charx __malloc_heap_end    malloc    tunable        Generated on Mon Oct 29 20 02 34 2007 for avr lib
400. sing the C compiler frontend  avr gcc  that in turn  will call the assembler and linker as required     This approach has the following advantages        There is basically only one program to be called directly  avr gcc  regardless  of the actual source language used       The invokation of the C preprocessor will be automatic  and will include the  appropriate options to locate required include files in the filesystem       The invokation of the linker will be automatic  and will include the appropri   ate options to locate additional libraries as well as the application start up code   crtXXX       and linker script     Note that the invokation of the C preprocessor will be automatic when the filename  provided for the assembler file ends in  S  the capital letter  s    This would even apply  to operating systems that use case insensitive filesystems since the actual decision is  made based on the case of the filename suffix given on the command line  not based on  the actual filename from the file system     Alternatively  the language        explicitly be specified using the  x  assembler with cpp option     9 5 3 Example program    The following annotated example features a simple 100 kHz square wave generator  using an AT90S1200 clocked with a 10 7 MHz crystal  Pin PD6 will be used for the  square wave output        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs    282        include  lt avr io h gt     work    tmp 
401. sked Questions 327       push r28  push r29       r28  SP L    in r29   SP     sbiw r28 20  in tmp reg   SREG  cli  out  SPH  r29  out SREG   tmp reg  out        r28     prologue end  size 10  x           It reads the current stack pointer value  decrements it by the required amount of bytes   then disables interrupts  writes back the high part of the stack pointer  writes back  the saved SREG  which will eventually re enable interrupts if they have been enabled  before   and finally writes the low part of the stack pointer           At the first glance  there s a race between restoring SREG  and writing SPL  However   after enabling interrupts  either explicitly by setting the 1 flag  or by restoring it as part  of the entire SREG   the AVR hardware executes  at least  the next instruction still with  interrupts disabled  so the write to SPL is guaranteed to be executed with interrupts  disabled still  Thus  the emitted sequence ensures interrupts will be disabled only for  the minimum time required to guarantee the integrity of this operation        Back to FAQ Index     9 9 29 Why are there five different linker scripts     From a comment in the source code     Which one of the five linker script files is actually used depends on command line  options given to ld     A  x script file is the default script A  xr script is for linking without relocation   r flag   A  xu script is like  xr but  do  create constructors   Ur flag  A  xn script is for linking  with  n flag  mix 
402. so implies  that it is often neccessary to cast the type of an input operand to the  desired size     A final problem may arise while using pointer register pairs  If you define an input  operand    e   ptr     and the compiler selects register Z  130 131   then         refers to r30 and   BO refers to r31     But both versions will fail during the assembly stage of the compiler  if you explicitely  need 7  like in    1   r24 z    If you write         r24     0    with a lower case a following the percent sign  then the compiler will create the proper  assembler line     9 6 4 Clobbers    As stated previously  the last part of the asm statement  the list of clobbers  may be  omitted  including the colon seperator  However  if you are using registers  which  had not been passed as operands  you need to inform the compiler about this  The  following example will do an atomic increment  It increments an 8 bit value pointed  to by a pointer variable in one go  without being interrupted by an interrupt routine  or another thread in a multithreaded environment  Note  that we must use a pointer   because the incremented value needs to be stored before interrupts are enabled        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 6 Inline Assembler Cookbook    294       asm volatile       oli           14 r24     0              inc r24    n t    st  a0  r24  mane    sei                 ptr    r24           The compiler might produce the following code     eli    ld 
403. so other optional utilities available that may be useful to add to your toolset     SRecord is a collection of powerful tools for manipulating EPROM load files  It  reads and writes numerous EPROM file formats  and can perform many different ma   nipulations     MF ile is a simple Makefile generator is meant as an aid to quickly customize a Make   file to use for your AVR application     9 1 12 Toolchain Distributions  Distros     All of the various open source projects that comprise the entire toolchain are normally  distributed as source code  It is left up to the user to build the tool application from its  source code  This can be a very daunting task to any potential user of these tools     Luckily there are people who help out in this area  Volunteers take the time to build the  application from source code on particular host platforms and sometimes packaging  the tools for convenient installation by the end user  These packages contain the binary  executables of the tools  pre made and ready to use  These packages are known as   distributions  of the AVR toolchain  or by a more shortened name   distros      AVR toolchain distros are available on FreeBSD  Windows  Mac OS X  and certain  flavors of Linux        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 2 Memory Areas and Using malloc   266       9 1 13 Open Source    All of these tools  from the original source code in the multitude of projects  to the  various distros  are put together by many  
404. sor specific file included in  avr io h  As you may know  the precompiler will not touch strings and PORTB   instead of 0x18  gets passed to the assembler  One way to avoid this problem is     asm volatile  sbi  0  0x07     I    SFR IO ADDR PORTB          Note     For C programs  rather use the standard C bit operators instead  so the above would  be expressed as PORTB     1      7   The optimizer will take care to trans   form this into a single SBI instruction  assuming the operands allow for this     Back to FAQ Index     9 9 11 Why does the PC randomly jump around when single stepping through  my program in avr gdb     When compiling a program with both optimization       and debug information   9   which is fortunately possible in avr gcc  the code watched in the debugger is opti   mized code  While it is not guaranteed  very often this code runs with the exact same  optimizations as it would run without the    g switch     This can have unwanted side effects  Since the compiler is free to reorder code ex   ecution as long as the semantics do not change  code is often rearranged in order to       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 313       make it possible to use a single branch instruction for conditional operations  Branch  instructions can only cover a short range for the target PC   63 through  64 words from  the current PC   If a branch instruction cannot be used directly  the compiler needs to  work arou
405. src  lo r24      define len_hi r23      define len_lo r22    8 73 strnlen_P S File Reference  8 73 1 Detailed Description    Defines        define src_hi r25      define src_lo r24      define len hi r23      define len_lo r22       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 74 strpbrk S File Reference    256       8 74 strpbrk S File Reference    8 74 1 Detailed Description   8 75 strpbrk_P S File Reference  8 75 1 Detailed Description   8 76 strrchr S File Reference  8 76 1 Detailed Description    Defines        define src  hi r25      define src_lo r24      define val_lo r22      define ret hi r25      define ret lo r24       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 76 strrchr S File Reference 257          Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 77    strrchr_P S File Reference 258       8 77    8 77 1    8 78    8 78 1    8 79    8 79 1    8 80    8 80 1    8 81    8 81 1    8 82    8 82 1    8 83    8 83 1    8 84    8 84 1    8 85    8 85 1    8 86    8 86 1    8 87    8 87 1    Defines    strrchr_P S File Reference  Detailed Description  strrev S File Reference  Detailed Description  strsep S File Reference  Detailed Description  strsep_P S File Reference  Detailed Description  strspn S File Reference  Detailed Description   strspn P S File Reference  Detailed Description   strstr S File Reference  Detailed Description   strstr P S File Reference  Detailed Description   strtok r S File Referen
406. stalling the GNU Tool Chain 331         AVRDUDE  http   savannah nongnu org projects avrdude   Installation    Usage Notes              http   sources redhat com gdb     Installation      SimulAVR  http   savannah gnu org projects simulavr     Installation      AVaRICE  http   avarice sourceforge net     Installation    9 10 4 GNU Binutils for the AVR target    The binutils package provides all the low level utilities needed in building and ma   nipulating object files  Once installed  your environment will have an AVR assembler   avr as   linker  avr 13G   and librarian  avr ar and avr ranlib   In addi   tion  you get tools which extract data from object files  avr objcopy   dissassem   ble object file information  avr objdump   and strip information from object files   avr strip   Before we can build the C compiler  these tools need to be in place     Download and unpack the source files     5 bunzip2     binutils  lt version gt  tar bz2   tar xf      cd binutils  lt version gt     Note     Replace  lt version gt  with the version of the package you downloaded   If you obtained    gzip compressed file   gz   use gunzip instead of bunzip2     It is usually a good idea to configure and build binutils in a subdirectory so as not  to pollute the source with the compiled files  This is recommended by the binutils  developers       mkdir obj avr    cd obj avr       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 332
407. structive to look at the resulting disassembly from the  compiler     9 5 avr libc and assembler programs  9 5 1 Introduction    There might be several reasons to write code for AVR microcontrollers using plain  assembler source code  Among them are       Code for devices that do not have RAM and are thus not supported by the C  compiler      Code for very time critical applications      Special tweaks that cannot be done in C     Usually  all but the first could probably be done easily using the inline assembler facility  of the compiler        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 5 avr libc and assembler programs 281       Although avr libc is primarily targeted to support programming AVR microcontrollers  using the C  and C    language  there s limited support for direct assembler usage as  well  The benefits of it are       Use of the C preprocessor and thus the ability to use the same symbolic constants  that are available to C programs  as well as a flexible macro concept that can use  any valid C identifier as a macro  whereas the assembler s macro concept is  basically targeted to use a macro in place of an assembler instruction        Use of the runtime framework like automatically assigning interrupt vectors  For  devices that have RAM  initializing the RAM variables can also be utilized     9 5 2 Invoking the compiler    For the purpose described in this document  the assembler and linker are usually not  invoked manually  but rather u
408. t  32 bit signed type     6 8 3 3 typedef signed long long int int64 t  64 bit signed type     Note     This type is not available when the compiler option  mint8 is in effect     6 8 3 4 typedef signed char int8 t  8 bit signed type     6 8 3 5 typedef int16 t int fast16 t    fastest signed int with at least 16 bits     6 8 3 6 typedef int32 t int fast32 t    fastest signed int with at least 32 bits     6 8 3 7 typedef int64 t int fast64 t    fastest signed int with at least 64 bits     Note     This type is not available when the compiler option  mint8 is in effect        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 50       6 8 3 8 typedef int8_t int_fast8_t    fastest signed int with at least 8 bits     6 8 3 9 typedef int16_t int_least16_t    signed int with at least 16 bits     6 8 3 10 typedef int32_t int_least32_t    signed int with at least 32 bits     6 8 3 11 typedef int64_t int_least64_t    signed int with at least 64 bits     Note     This type is not available when the compiler option  mint8 is in effect     6 8 3 12 typedef int8_t int_least8_t    signed int with at least 8 bits     6 8 3 13 typedef int64_t intmax_t    largest signed int available     6 8 3 14 typedef int16_t intptr_t    Signed pointer compatible type     6 8 3 15 typedef unsigned int uint16_t  16 bit unsigned type     6 8 3 16 typedef unsigned long int uint32_t  32 bit unsigned type     6 8 3 17 typedef unsigned long long int uint
409. t  is included       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 38 stdint h File Reference 243        define PTRDIFF_MAX INT16_MAX    define PTRDIFF_MIN INT16_MIN    define SIG ATOMIC MAX INT8 MAX                SIG ATOMIC MIN INT8 MIN    define SIZE MAX    CONCAT INTI6 MAX  U      Macros for integer constants    C   implementations should define these macros only when   STDC    CONSTANT  MACROS is defined before  lt stdint h gt  is included     These definitions are valid for integer constants without suffix and for macros de   fined as integer constant without suffix     define INT8_C value    int8 t  value    define UINT8_C value    uint8 t  CONCAT value  U     define INT16 C value  value   define UINT16_C value   CONCAT value  U     define INT32_C value  _ CONCAT value  L     define UINT32_C value  _ CONCAT value  UL     define INT64_C value  _ CONCAT value  LL     define UINT64_C value  _ CONCAT value  ULL    define INTMAX_C value  _ CONCAT value  LL    define UINTMAX_C value  _ CONCAT value  ULL        Typedefs    Exact width integer types  Integer types having exactly the specified width    typedef signed char int8_t   typedef unsigned char uint8_t   typedef signed int int16_t   typedef unsigned int uint16_t   typedef signed long int int32_t   typedef unsigned long int uint32_t  typedef signed long long int int64_t  typedef unsigned long long int uint64_t    Integer types capable of holding object pointers   These allow you to declare variables 
410. t  rem    The Remainder     The documentation for this struct was generated from the following file        stdlib h    8 avr libc File Documentation    8 1 assert h File Reference  8 1 1 Detailed Description  Defines       define assert expression        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 2 atoi S File Reference 214       8 2 atoi S File Reference  8 2 1 Detailed Description    Defines        define str_hi r25       define str_lo r24       define num hi r25      define num_lo r24      define tmp r18    8 3 atol S File Reference  8 3 1 Detailed Description    Defines     define str hi r25   define str lo r24   define num hi hi r25  fidefine num hi lo r24   define num lo hi 123   define num      lo r22   define tmp r17    8 4 atomic h File Reference  8 4 1 Detailed Description  Defines        define UTIL ATOMIC H 1       define ATOMIC BLOCK type        define NONATOMIC_BLOCK type       define ATOMIC RESTORESTATE       define ATOMIC FORCEON       define NONATOMIC RESTORESTATE     define NONATOMIC FORCEOFF       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 5 boot h File Reference 215       8 5    8 5 1    boot h File Reference    Detailed Description    Defines     define AVR_BOOT_H_ 1    define BOOTLOADER_SECTION __attribute__   section    bootloader       define _COMMON_ASB RWWSB    define   COMMON ASRE RWWSRE    define BLB12 5    define BLB11 4    define BLB02 3    define BLB01 2    define boot_spm_interrupt_enable    __SPM
411. t PCINTO will be handled in the final part of this file  The  basic algorithm is to quickly evaluate the current system time by fetching the current  timer value of TCNTO  and combining it with the overflow part in counter hi  If  the counter is currently counting down rather than up  the value fetched from TCNTO  must be negated  Finally  if this pin change interrupt was triggered by a rising edge   the time computed will be recorded as the start time only  Then  at the falling edge   this start time will be subracted from the current time to compute the actual pulse width  seen  left in pwm  incoming   and the upper layers are informed of the new value by  setting bit 0 in the intbits flags  At the same time  this pin change interrupt will be       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 34    simple project 177       disabled so no new measurement can be performed until the upper layer had a chance  to process the current value     6 33 3        source code    The source code is installed under       Sprefix share doc avr libc examples asmdemo      where  prefix is a configuration option  For Unix systems  it is usually set to either   usror usr local     6 34 A simple project    At this point  you should have the GNU tools configured  built  and installed on your  system  In this chapter  we present a simple example of using the GNU tools in an AVR  project  After reading this chapter  you should have a better feel as to how the tools are  used 
412. t a single jump back to itself  Square wave generation itself is  completely handled by the timer 0 overflow interrupt service     sleep instruction   using idle mode  could be used as well  but probably would not conserve much energy  anyway since the interrupt service 15 executed quite frequently     Note  7     Interrupt functions can get the usual names that are also available to C programs  The  linker will then put them into the appropriate interrupt vector slots  Note that they must  be declared  global in order to be acceptable for this purpose  This will only work if   lt avr io h gt  has been included  Note that the assembler or linker have no chance  to check the correct spelling of an interrupt function  so it should be double checked    When analyzing the resulting object file using avr objdump or avr nm  a name  like   vector N should appear  with N being a small integer number      Note  8     As explained in the section about special function registers  the actual IO port address  should be obtained using the macro SFR  IO  ADDR   The     905 1200 does not have  RAM thus the memory mapped approach to access the IO registers is not available  It  would be slower than using in   out instructions anyway      Since the operation to reload TCCNTO is time critical  it is even performed before  saving SREG  Obviously  this requires that the instructions involved would not change  any of the flag bits in SREG           Note  9     Interrupt routines must not clobber t
413. t s a known problem of the MS DOS FAT file system  Since the FAT file system has  only a granularity of 2 seconds for maintaining a file s timestamp  and it seems that  some MS DOS derivative  Win9x  perhaps rounds up the current time to the next sec   ond when calculating the timestamp of an updated file in case the current time cannot  be represented in FAT s terms  this causes a situation where make sees a  file coming  from the future      Since all make decisions are based on file timestamps  and their dependencies  make  warns about this situation     Solution  don   t use inferior file systems   operating systems  Neither Unix file systems  nor HPFS  aka NTFS  do experience that problem     Workaround  after saving the file  wait a second before starting make  Or simply  ignore the warning  If you are paranoid  execute a make clean all to make sure  everything gets rebuilt     In networked environments where the files are accessed from a file server  this message  can also happen if the file server s clock differs too much from the network client s  clock  In this case  the solution is to use a proper time keeping protocol on both sys   tems  like NTP  As a workaround  synchronize the client s clock frequently with the  server   s clock     Back to FAQ Index     9 9 25 Why are  many  interrupt flags cleared by writing a logical 1     Usually  each interrupt has its own interrupt flag bit in some control register  indicating  the specified interrupt condition has been m
414. t util delay_basic h gt   Basic busy wait delay loops  6 26 1 Detailed Description     include  lt util delay_basic h gt     The functions in this header file implement simple delay loops that perform a busy   waiting  They are typically used to facilitate short delays in the program execution   They are implemented as count down loops with a well known CPU cycle count per       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 27  lt util parity h gt   Parity bit generation 161       loop iteration  As such  no other processing can occur simultaneously  It should be  kept in mind that the functions described here do not disable interrupts     In general  for long delays  the use of hardware timers is much preferrable  as they  free the CPU  and allow for concurrent processing of other events while the timer is  running  However  in particular for very short delays  the overhead of setting up a  hardware timer is too much compared to the overall delay time     Two inline functions are provided for the actual delay algorithms     Functions    e void delay loop 1l  uint8_t __count      void _delay_loop_2  uint16_t __count        6 26 2 Function Documentation    6 26 2 1 void _delay_loop_1  uint8_t count        Delay loop using      8 bit counter     count  so up to 256 iterations are possible   The  value 256 would have to be passed as 0   The loop executes three CPU cycles per  iteration  not including the overhead the compiler needs to setup the counter regis
415. tandard IO  functions     6 9 2 13  define getc __stream  fgetc __stream     The macro getc used to be a  fast  macro implementation with a functionality iden   tical to fgetc    For space constraints  in avr libc  it is just an alias for fgetc        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 9  lt stdio h gt   Standard IO facilities 59       6 9 2 14  ftdefine getchar void  fgetc stdin     The macro getchar reads a character from stdin  Return values and error handling  is identical to fgetc       6 9 2 15  define putc  c  stream  fputc  c  stream     The macro put c used to be a  fast  macro implementation with a functionality iden   tical to fputc    For space constraints  in avr libc  it is just an alias for fputc     6 9 2 16  define putchar    c fputc  c  stdout     The macro put char sends character c to stdout     6 9 2 17  define stderr   iob 2    Stream destined for error output  Unless specifically assigned  identical to stdout     If stderr should point to another stream  the result of another fdevopen    must  be explicitly assigned to it without closing the previous st derr  since this would also  close stdout      6 9 2 18  define stdin    iob 0      Stream that will be used as an input stream by the simplified functions that don t take  astream argument     The first stream opened with read intent using fdevopen    will be assigned to  stdin     6 9 2 19  Zdefine stdout    iob 1      Stream that will be used as an output stream by the 
416. tecture of the AVR devices  you must manually add  0x800000 to the address you pass to the linker as the start of the section  Oth   erwise  the linker thinks you want to put the  noinit section into the  text section  instead of  data  bss and will complain     Alternatively  you can write your own linker script to automate this   FIXME  need an  example or ref to dox for writing linker scripts      9 3 6         initN Sections  These sections        used to define the startup code from reset up through the start of  main    These all are subparts of the  text section     The purpose of these sections is to allow for more specific placement of code within  your program        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 3 Memory Sections 273       Note     Sometimes  it is convenient to think of the  initN and  finiN sections as functions   but in reality they are just symbolic names which tell the linker where to stick a  chunk of code which is not a function  Notice that the examples for asm and C can  not be called as functions and should not be jumped into             initN sections are executed      order from 0 to 9    init0     Weakly bound to __init    If user defines _ init    it will be jumped into immedi   ately after a reset     initi   Unused  User definable   init2     In C programs  weakly bound to initialize the stack  and to clear     zero reg       r1    init3   Unused  User definable     init4     For devices with  gt  64 KB of ROM   
417. ter     Thus  at a CPU speed of 1 MHz  delays of up to 768 microseconds can be achieved     6 26 2 2 void delay loop 2  uintl6 t     count     Delay loop using a 16 bit counter     count  so up to 65536 iterations are possible    The value 65536 would have to be passed as 0   The loop executes four CPU cycles  per iteration  not including the overhead the compiler requires to setup the counter  register pair     Thus  at a CPU speed of 1 MHz  delays of up to about 262 1 milliseconds        be  achieved     6 27  lt util parity h gt   Parity bit generation    6 27 1 Detailed Description     include  lt util parity h gt     This header file contains optimized assembler code to calculate the parity bit for a byte     Defines        define parity_even_bit val        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 28  lt util setbaud h gt   Helper macros for baud rate calculations 162       6 27 2 Define Documentation    6 27 2 1  define parity even bit val     Value      extension    N  unsigned char   t  N    asm    X   mov   tmp reg   0    n t  N   swap  0    n t  N   eor  0  tmp reg      n t  N   mov   tmp reg   0    n t  N   lsr   0    n t  N   lar   0  mne  N   eor  0  tmp reg    x     MS n GC  E         0    unsigned char   val   X          N                 1   gt  gt  1   amp  1   N       Returns     lif val has an odd number of bits set     6 28  lt util setbaud h gt   Helper macros for baud rate calculations    6 28 1 Detailed Description     define F
418. ters at 9600 Bd   they might block for  too long     The loop itself then acts on the interrupt indication bitfields as appropriate  and will  eventually put the CPU on sleep at its end to conserve power     The first interrupt bit that is handled is the  software  timer  at a frequency of approx   imately 100 Hz  The CLOCKOUT pin Will be toggled here  so e  g  an oscilloscope  can be used on that pin to measure the accuracy of our software clock  Then  the LED  flasher for LED2   We are alive  LED  is built  It will flash that LED for about 50  ms  and pause it for another 950 ms  Various actions depending on the operation mode  follow  Finally  the 3 second backup timer is implemented that will write the PWM  value back to EEPROM once it is not changing anymore     The ADC interrupt will just adjust the PWM value only     Finally  the UART Rx interrupt will dispatch on the last character received from the  UART     All the string literals that are used as informational messages within main   are  placed in program memory so no SRAM needs to be allocated for them  This is done  by using the PSTR macro  and passing the string to printstr_p       6 35 4 The source code    The source code is installed under       Sprefix share doc avr libc examples largedemo largedemo c     where  prefix is a configuration option  For Unix systems  it is usually set to either   usr       usr local        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 336 Using the standard I
419. text and data on same page       xbn script is for linking with  N flag   mix text and data on same page      Back to FAQ Index   9 9 30 How to add a raw binary image to linker output   The GNU linker avr 1d cannot handle binary data directly  However  there s a com     panion tool called avr objcopy  This is already known from the output side  it s  used to extract the contents of the linked ELF file into an Intel Hex load file     avr objcopy can create a relocatable object file from arbitrary binary input  like    avr objcopy  I binary  O elf32 avr foo bin foo o       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 328       This will create a file named            with the contents of foo           The contents will  default to section  data  and two symbols will be created named binary foo    bin start and binary foo bin end   These symbols can be referred to  inside a C source to access these data     Ifthe goal is to have those data go to flash ROM  similar to having used the PROGMEM  attribute in C source code   the sections have to be renamed while copying  and it s also  useful to set the section flags        avr objcopy   rename section  data  progmem data contents alloc load readonly data  I binary  O elf3    Note that all this could be conveniently wired into a Makefile  so whenever foo bin  changes  it will trigger the recreation of            and a subsequent relink of the final  ELF file     Back to FAQ Index    
420. tf format for int  least8 t    6 5 2 10  define PRI4PTR PRId16    decimal printf format for intptr t    6 5 2 11  define PRIi16  i     integer printf format for int16 t    6 5 2 12 ftdefine PRIi32  li     integer printf format for int32 t    6 5 2 13  ffdefine PRIi8  i     integer printf format for int8 t    6 5 2 14  define PRIiFASTI16  i     integer printf format for int  fastl16 t    6 5 2 15  define PRIiFAST32  li     integer printf format for int  fast32 t    6 5 2 16  define PRIiFASTS  i     integer printf format for int  fast8 t    6 5 2 17  define PRIILEASTI6  i     integer printf format for int leastl6 t       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 5  lt inttypes h gt   Integer Type conversions 25       6 5 2 18  define PRIILEAST32  li     integer printf format for int_least32_t    6 5 2 19  define PRIILEASTS  i     integer printf format for int_least8_t    6 5 2 20  define PRIiPTR PRIi16    integer printf format for intptr_t    6 5 2 21  define PRIo16  o     octal printf format for uint16_t    6 5 2 22  define PRIo32  lo     octal printf format for uint32_t    6 5 2 23  define PRIo8         octal printf format for uint8_t    6 5 2 24  define PRIoFASTI16  o     octal printf format for uint_fast16_t    6 5 2 25  define PRIoFAST32  10     octal printf format for uint_fast32_t    6 5 2 26  define PRIoFASTS         octal printf format for uint_fast8_t    6 5 2 27  define PRIOLEAST16  o     octal printf format for uint_least16_t    6 5 2 28  de
421. th Marek  On smaller devices  all except AT     mega64 128     SPM REG is in the I O space  accessible with the shorter  in   and  out  instructions   since the boot loader has a limited size  this could be an  important optimization     9 16 Deprecated List    Global SIGNAL Do not use SIGNAL 0 in new code  Use ISR   instead     Global ISR  ALIAS For new code  the use of ISR      ISR_ALIASOF       is recom     mended        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 16 Deprecated List 362       Global timer_enable_int    Global enable_external_int    Global INTERRUPT    Global inp    Global outp    Global inb    Global outb    Global sbi    Global cbi       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    Index     PATH  329    PREFIX  328      prefix  328    lt alloca h gt   Allocate space in the stack   14    lt assert h gt   Diagnostics  15    lt avr boot h gt   Bootloader Support Utili   ties  92    lt avr eeprom h gt   EEPROM handling  98    lt avr interrupt h gt   Interrupts  101    lt avr io h gt   AVR device specific IO defi   nitions  123    lt avr pgmspace h gt   Program Space Util   ities  124    lt avr power h gt   Power Reduction Man   agement  136    lt avr sfr_defs h gt   Special function regis   ters  141    lt avr sleep h gt   Power Management and  Sleep Modes  144    lt avr version h gt   avr libc  macros  146     avr wdt h    Watchdog timer handling   148    lt compat deprecated h  gt    items  168    lt compat ina90 
422. than absolutely needed  This could be done using  an sei   instruction right at the beginning of the interrupt handler  but this still leaves  few instructions inside the compiler generated function prologue to run with global in   terrupts disabled  The compiler can be instructed to insert an SEI instruction right at  the beginning of an interrupt handler by declaring the handler the following way     ISR XXX_vect  ISR_NOBLOCK                Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 14  lt avr interrupt h gt   Interrupts 104       where XXX_vect is the name of a valid interrupt vector for the MCU type in question   as explained below     Two vectors sharing the same code In some circumstances  the actions to be taken  upon two different interrupts might be completely identical so a single implementa   tion for the ISR would suffice  For example  pin change interrupts arriving from two  different ports could logically signal an event that is independent from the actual port   and thus interrupt vector  where it happened  Sharing interrupt vector code can be  accomplished using the ISR_ALIASOF   attribute to      ISR macro     ISR PCINTO_vect           Code to handle the event        ISR PCINTI_vect  ISR ALIASOF  PCINTO vect       Note   There is no body to the aliased ISR     Note that the ISR_ALIASOF   feature requires GCC 4 2 or above  or a patched version  of GCC 4 1 x   See the documentation of the   5   ALIAS   macro for an implementa   tion whic
423. the device to run off this oscillator  instead of an external crystal  This  often remains unnoticed until the first attempt is made to use something critical  in timing  like UART communication     The ATmegal28 ships with the fuse enabled that turns this device into AT   megal03 compatibility mode  This means that some ports are not fully usable   and in particular that the internal SRAM is located at lower addresses  Since by  default  the stack is located at the top of internal SRAM  a program compiled for  an ATmegal28 running on such a device will immediately crash upon the first  function call  or rather  upon the first function return         Devices with a JTAG interface have the JTAGEN fuse programmed by default   This will make the respective port pins that are used for the JTAG interface un   available for regular IO     Back to FAQ Index     9 9 20 Why do all my  foo   bar  strings eat up the SRAM     By default  all strings are handled as all other initialized variables  they occupy RAM   even though the compiler might warn you when it detects write attempts to these RAM  locations   and occupy the same amount of flash ROM so they can be initialized to the  actual string by startup code  The compiler can optimize multiple identical strings into  a single one  but obviously only for one compilation unit  i  e   a single C source file      That way  any string literal will be a valid argument to any C function that expects a  const char    argument     Of course  
424. the group of tools are called a  toolset  or commonly a toolchain  as the tools are chained together to produce the final  executable application for the AVR microcontroller     The following sections provide an overview of all of these tools  You may be used  to cross compilers that provide everything with a GUI front end  and not know what  goes on  underneath the hood   You may be coming from a desktop or server computer  background and not used to embedded systems  Or you may be just learning about the  most common software development toolchain available on Unix and Linux systems   Hopefully the following overview will be helpful in putting everything in perspective     9 1 2 FSF and GNU    According to its website   the Free Software Foundation  FSF   established in 1985  is  dedicated to promoting computer users    rights to use  study  copy  modify  and redis   tribute computer programs  The FSF promotes the development and use of free soft   ware  particularly the GNU operating system  used widely in its GNU Linux variant    The FSF remains the primary sponsor of the GNU project     The GNU Project was launched in 1984 to develop a complete Unix like operating  system which is free software  the GNU system  GNU is a recursive acronym for    GNU   s Not Unix    it is pronounced guh noo  approximately like canoe     One of the main projects of the GNU system is the GNU Compiler Collection  or GCC   and its sister project  GNU Binutils  These two open source projects pr
425. this is going to waste a lot of SRAM  In Program Space String Utilities  a  method is described how such constant data can be moved out to flash ROM  How   ever  a constant string located in flash ROM is no longer a valid argument to pass to a       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 323       function that expects a const char x type string  since the AVR processor needs  the special instruction LPM to access these strings  Thus  separate functions are needed  that take this into account  Many of the standard C library functions have equivalents  available where one of the string arguments can be located in flash ROM  Private func   tions in the applications need to handle this  too  For example  the following can be  used to implement simple debugging messages that will be sent through a UART      include  lt inttypes h gt    include  lt avr io h gt    include  lt avr pgmspace h gt     int  uart_putchar char c      if  c               uart_putchar     r       loop until bit is set USR  UDRE      UDR   c    return 0     so it could be used for fdevopen    too        void    debug_P  const char xaddr                        while        pgm_read_byte addr       uart putchar oc           int   main void       ioinit       initialize UART          debug_P PSTR  foo was here n      return 0          Note     By convention  the suffix _P to the function name is used as an indication that  this function is going to accept
426. tially en   abled  This allows interrupt handlers to be interrupted     As this macro has been used by too many unsuspecting people in the past  it has been  deprecated  and will be removed in a future version of the library  Users who want to  legitimately re enable interrupts in their interrupt handlers as quickly as possible are  encouraged to explicitly declare their handlers as described above     6 30 2 6  define outb port  val   port     val     Deprecated    Write val to IO port port     6 30 2 7  define outp val  port   port     val     Deprecated    Write val to IO port port        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 31  lt compat ina90 h gt   Compatibility with        EWB 3 x 172       6 30 2 8  define sbi port  bit   port      1  lt  lt   bit      Deprecated    Set bit in IO port port     6 30 3 Function Documentation    6 30 3 1 static _ inline void timer enable int  unsigned char ints    static     Deprecated    This function modifies the t imsk register  The value you pass via ints is device  specific     6 31  lt compat ina90 h gt   Compatibility with        EWB 3 x     include  lt compat ina90 h gt     This is an attempt to provide some compatibility with header files that come with IAR  C  to make porting applications between different compilers easier  No 100  compat   ibility though     Note     For actual documentation  please see the        manual     6 32 Demo projects  6 32 1 Detailed Description    Various small demo pro
427. tic _ inline uintl   t crc ccitt update  uint16 t  crc uint8 t     data    e static _ inline     uint8 t  crc ibutton update  uint8 t     crc  uint8 t     data                 Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    624  lt utiV crc16 h gt   CRC Computations 157       6 24 2 Function Documentation   6 24 2 1 static _ inline uint16_t _crc16_update  uint16 t crc  uint8_t _    data   static    Optimized CRC 16 calculation    Polynomial  x 16   x 15   x 2   1  0xa001    Initial value  Oxffff       This CRC is normally used in disk drive controllers   The following is the equivalent functionality written in C   uintl16 t  crcl16 update uintl16 t crc  uint8 t a      int i     cre      a   for  i   0  i  lt  8    i     if  cre  amp  1   crc    crc  gt  gt  1    0xA001     crc    cre  gt  gt  1      return crc     6 24 2 2 static inline uintl16 t crc ccitt update  uint16 t crc  uint8 t    data   static     Optimized CRC CCITT calculation    Polynomial  x 16   x 12   x 5   1  0x8408   Initial value  Oxffff   This is the CRC used by PPP and IrDA    See RFC1171  PPP protocol  and IrDA IrLAP 1 1       Note     Although the CCITT polynomial is the same as that used by the Xmodem protocol   they are quite different  The difference is in how the bits are shifted through the  alorgithm  Xmodem shifts the MSB of the CRC and the input first  while CCITT  shifts the LSB of the CRC and the input first     The following is the equivalent functionality written in C        
428. tical  component that they do not provide  a Standard C Library     There are different open source projects that provide a Standard C Library depending  upon your system time  whether for a native compiler  GNU Libc   for some other  embedded system  newlib   or for some versions of Linux  uCLibc   The open source  AVR toolchain has its own Standard C Library project  avr libc     AVR Libc provides many of the same functions found in a regular Standard C Library  and many additional library functions that is specific to an AVR  Some of the Standard  C Library functions that are commonly used on a PC environment have limitations or  additional issues that a user needs to be aware of when used on an embedded system     AVR Libc also contains the most documentation about the whole AVR toolchain     9 1 6 Building Software    Even though GCC  Binutils  and avr libc are the core projects that are used to build  software for the AVR  there is another piece of software that ties it all together  Make   GNU Make is a program that makes things  and mainly software  Make interprets and  executes a Makefile that is written for a project  A Makefile contains dependency rules   showing which output files are dependent upon which input files  and instructions on  how to build output files from input files     Some distributions of the toolchains  and other AVR tools such as MFile  contain a  Makefile template written for the AVR toolchain and AVR applications that you can  copy and modify
429. ties 57       6 9 2 Define Documentation    6 9 2 1  define FDEV EOF   2   Return code for an end of file condition during device read     To be used in the get function of fdevopen       6 9 2 2  define FDEV ERR   1   Return code for an error condition during device read     To be used in the get function of fdevopen       6 9 2 3 fidefine FDEV SETUP READ SRD                 setup  stream   with read intent    6 9 2 4  define FDEV SETUP RW  SRD  SWR        fdev  setup  stream   with read write intent    6 9 2 5  define FDEV SETUP WRITE SWR                 setup  stream   with write intent    6 9 2 6 define EOF   1        EOF declares the value that is returned by various standard IO functions in case of an  error  Since the AVR platform  currently  doesn t contain an abstraction for actual files   its origin as  end of file  is somewhat meaningless here     6 9 2 7  define fdev close      This macro frees up any library resources that might be associated with stream  It  should be called if st ream is no longer needed  right before the application is going  to destroy the st ream object itself      Currently  this macro evaluates to nothing  but this might change in future versions of  the library      6 9 2 8  define      get udata stream    stream      udata     This macro retrieves a pointer to user defined data from a FILE stream object        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    69  lt stdio h gt   Standard IO facilities 58       6 9 2 9  def
430. tion  avrprog  332  installation  binutils  330  installation  gcc  331  Installation  gdb  333  installation  simulavr  333  INT16_C   avr_stdint  43          6          avr_stdint  43          6          avr_stdint  43  int16_t   avr_stdint  48  INT32_C   avr_stdint  43  INT32_MAX   avr_stdint  43  INT32_MIN   avr_stdint  43  int32_t   avr_stdint  48  INT64_C   avr_stdint  43       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen       INDEX 374  INT64_MAX INT_LEAST32_MAX  avr_stdint  43 avr_stdint  44  INT64_MIN INT_LEAST32_MIN  avr_stdint  43 avr_stdint  45   int64_t int_least32_t  avr_stdint  48 avr_stdint  49  INT8_C INT_LEAST64_MAX  avr_stdint  43 avr_stdint  45  INT8_MAX INT_LEAST64_MIN  avr_stdint  43 avr_stdint  45  INT8_MIN int_least64_t  avr_stdint  43 avr_stdint  49  int8_t INT LEAST8         avr stdint  48 avr stdint  45  int farptr t INT LEAST8 MIN    avr inttypes  31  INT FASTI6 MAX   avr stdint  44  INT FAST16 MIN   avr stdint  44  int fastl6 t   avr stdint  48  INT FAST32 MAX   avr stdint  44  INT FAST32  MIN   avr stdint  44  int fast32 t   avr stdint  48  INT FAST64 MAX   avr stdint  44  INT FAST64 MIN   avr stdint  44  int fast64 t   avr stdint  48  INT FASTS MAX   avr stdint  44  INT FASTS8  MIN   avr stdint  44  int fast8 t   avr stdint  48  INT       5    6          avr_stdint  44  INT_LEAST16_MIN   avr_stdint  44  int_least16_t   avr_stdint  49    avr_stdint  45  int_least8_t   avr_stdint  49  INTERRUPT   deprecated_items  170  interrupt 
431. tional notes from  lt avr sfr_defs h gt    139  alloca  alloca  14  asin  avr math  33  assert  avr assert  15       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    365       assert h  212   atan  avr_math  33   atan2  avr math  33   atof  avr stdlib  72   atoi  avr_stdlib  72   atoi S  213   atol  avr_stdlib  73   atol S  213   atomic h  213   ATOMIC_BLOCK  util_atomic  153   ATOMIC_FORCEON  util_atomic  153   ATOMIC_RESTORESTATE  util_atomic  154   avr_assert  assert  15   avr_boot  boot_is_spm_interrupt  94  boot_lock_bits_set  94  boot_lock_bits_set_safe  94  boot_lock_fuse_bits_get  95  boot_page_erase  95  boot_page_erase_safe  95  boot_page_fill  96  boot_page_fill_safe  96  boot_page_write  96  boot_page_write_safe  96  boot_rww_busy  97  boot_rww_enable  97  boot_rww_enable_safe  97  boot_spm_busy  97  boot_spm_busy_wait  97  boot_spm_interrupt_disable  97  boot_spm_interrupt_enable  97  BOOTLOADER_SECTION  98    GET EXTENDED FUSE BITS     98  GET HIGH FUSE BITS  98  GET LOCK BITS  98  GET LOW FUSE BITS  98    avr eeprom      EEGET  100   _EEPUT  100     EEPROM REG LOCATIONS        99   EEMEM  100   eeprom busy wait  100   eeprom is ready  100   eeprom read block  100   eeprom read byte  100   eeprom read word  101   eeprom write block  101   eeprom write byte  101   eeprom write word  101    avr errno    EDOM  19  ERANGE  19    avr interrupts    BADISR  vect  120  cli  120   EMPTY INTERRUPT  120  ISR  120   ISR  ALIAS  120    5   ALIASOF  1
432. to convert a bit  number  usually within a byte register  into a byte value that can be assigned directly  to the register  However  sometimes the direct bit numbers are needed as well  e  g  in  an SBI    instruction   so the definitions cannot usefully be made as byte values in the  first place     So in order to access a particular bit number as a byte value  use the BV    macro   Of course  the implementation of this macro is just the usual bit shift  which is done  by the compiler anyway  thus doesn t impose any run time penalty   so the following  applies     _BV  3    gt  1  lt  lt  3   gt  0x08    However  using the macro often makes the program better readable    BV  stands for  bit value   in case someone might ask you         Example  clock timer 2 with full IO clock  CS2x   0b001   toggle OC2 output on  compare match  COM2x   0601   and clear timer on compare match  CTC2   1   Make  OC2  PD7  an output     TCCR2    BV COM20     BV CTC2   _BV CS20     DDRD   _BV PD7    Back to FAQ Index     9 9 7 Can I use C        the AVR     Basically yes  C   is supported  assuming your compiler has been configured and  compiled to support it  of course   Source files ending in  cc   cpp or  C will automati   cally cause the compiler frontend to invoke the C   compiler  Alternatively  the C    compiler could be explicitly called by the name avr c       However  there s currently no support for libstdc    the standard support library  needed for a complete C   implementation  Thi
433. to the application     The functions available allow the specification of microsecond  and millisecond delays       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 26  lt util delay_basic h gt   Basic busy wait delay loops 160       directly  using the application supplied macro           as the CPU clock frequency        Hertz      Functions       void  delay us  double _ us      void delay ms  double ms     6 25 2 Function Documentation    6 25 2 1 void delay ms  double _ ms   Perform a delay of __ms milliseconds  using  delay loop 20     The macro    CPU is supposed to be defined to a constant defining the CPU clock  frequency  in Hertz      The maximal possible delay is 262 14 ms   F CPU in MHz     When the user request delay which exceed the maximum possible one  delay ms    provides a decreased resolution functionality  In this mode  delay ms   will work with  a resolution of 1 10 ms  providing delays up to 6 5535 seconds  independent from CPU  frequency   The user will not be informed about decreased resolution     6 25 2 2 void delay us  double us   Perform a delay of __us microseconds  using  delay loop 10     The macro    CPU is supposed to be defined to a constant defining the CPU clock  frequency  in Hertz      The maximal possible delay is 768 us   F CPU in MHz     If the user requests a delay greater than the maximal possible one  delay us   will  automatically call  delay ms   instead  The user will not be informed about this case     6 26  l
434. tream      udata    define fdev_setup_stream stream  put  get  rwflag        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    8 39    stdio h File Reference 245        define FDEV SETUP READ  SRD   define FDEV SETUP WRITE  SWR   define FDEV SETUP RW   SRD  SWR   define FDEV ERR   1    define FDEV  EOF   2     define FDEV SETUP STREAM put get  rwflag    define fdev_close      define putc __c      stream  fputc __c  __ stream    define putchar __c  fputc __c  stdout     define getc __stream  fgetc __stream     define getchar   fgetc stdin     define SEEK_SET 0    define SEEK_CUR 1    define SEEK_END 2                Functions    int fclose  FILE   stream    int vfprintf  FILE  __stream  const char    fmt  va_list __ap    int vfprintf P  FILE    stream  const char    fmt  va list ap   intfputc  int __c  FILE   stream    int printf  const char    fmt       int printf P  const char     fmt        int vprintf  const char    fmt  va list ap    int sprintf  char    s constchar   fmt       intsprintf P  char  __s  const char x__fmt        int snprintf  char  __s  size_t __n  const char  __fmt        int snprintf_P  char  __s  size_t __n  const char x__fmt        int vsprintf  char  __s  const char   __fmt  va_list ap    int vsprintf P  char  __s  const char  __fmt  va_list ap    int vsnprintf  char x__s  size_t __n  const char   __fmt  va list ap   int vsnprintf P  char  __s  size_t __n  const char   __fmt  va_list ap   int fprintf  FILE    stream  const char     fmt  
435. trstr   function finds the first occurrence of the substring s2 in the string s1  The  terminating     0    characters are not compared     Returns     The strstr   function returns a pointer to the beginning of the substring  or NULL  if the substring is not found  If s2 points to a string of zero length  the function  returns s1     6 11 3 35 char x strtok     char x string  const char    delim  char xx last   Parses the string s into tokens     strtok r parses the string s into tokens  The first call to strtok r should have string as  its first argument  Subsequent calls should have the first argument set to NULL  If a       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 12  lt avr boot h gt   Bootloader Support Utilities 93       token ends with a delimiter  this delimiting character is overwritten with a     0    and a  pointer to the next character is saved for the next call to strtok_r  The delimiter string  delim may be different for each call  last is a user allocated char  pointer  It must be  the same while parsing the same string  strtok_r is a reentrant version of strtok       Returns     The strtok_r   function returns a pointer to the next token or NULL when no more  tokens are found     6 11 3 36 char x strupr  char    s    Convert a string to upper case    The strupr   function will convert a string to upper case  Only the lower case alphabetic  characters  a    z  are converted  Non alphabetic characters will not be changed   Returns     
436. uart_9600  void         define BAUD 9600   include  lt util setbaud h gt   UBRRH   UBRRH_VALUE   UBRRL   UBRRL_VALUE      if USE_2X   UCSRA     1  lt  lt  U2X     else   UCSRA  amp     1  lt  lt  U2X     endif         static void   uart_38400 void         undef BAUD    avoid compiler warning   define BAUD 38400    include  lt util setbaud h gt    UBRRH   UBRRH_VALUE    UBRRL   UBRRL_VALUE      if USE_2X   UCSRA     1  lt  lt  U2X     else   UCSRA  amp    lt  1  lt  lt  U2X     endif         In this example  two functions are defined to setup the UART to run at 9600 Bd  and  38400 Bd  respectively  Using a CPU clock of 4 MHz  9600 Bd can be achieved with  an acceptable tolerance without setting U2X  prescaler 25   while 38400 Bd require  U2X to be set  prescaler 12      Defines        define BAUD_TOL 2      define UBRR_VALUE      define UBRRL_VALUE      define UBRRH_VALUE      define USE_2X 0       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 29  lt util twi h gt   TWI bit mask definitions 164       6 28 2 Define Documentation    6 28 2 1  define           TOL 2  Input and output macro for  lt util setbaud h  gt     Define the acceptable baud rate tolerance in percent  If not set on entry  it will be set to  its default value of 2     6 28 2 2  define          VALUE  Output macro from  lt util setbaud h  gt     Contains the calculated baud rate prescaler value for the UBRR register     6 28 2 3  define UBRRH VALUE  Output macro from  lt util setbaud h  gt
437. uble frexp  double _ value  int    exp   double ldexp  double _ x  int exp  _ ATTR_CONST   double exp  double x  _ATTR_CONST  double cosh  double x   ATTR CONST  double sinh  double x   ATTR CONST  double tanh  double _ x           CONST  double acos  double x   ATTR  CONST  double asin  double x  ATTR  CONST  double atan  double x   ATTR CONST  double atan2  double __y  double x           CONST  double log  double _ x   ATTR CONST  double log10  double _ x           CONST    double pow  double x  double     ATTR CONST  int isnan  double x  ATTR  CONST  int isinf  double x           CONST  double square  double _ x   ATTR  CONST  ATTR CONST double copysign  double x  double y   double        double x  double y           CONST  double fma  double x  double y  double z           CONST  double fmax  double x  double y           CONST  double fmin  double x  double y  ATTR  CONST  int signbit  double x           CONST  double            double x           CONST  ATTR  CONST int isfinite  double x   double hypot  double x  double y                                                                          6 6 2 Define Documentation    6 6 2 1  define INFINITY  builtin inf    INFINITY constant     6 6 2 2  define         3 141592653589793238462643    The constant pi     6 6 2 3  define    5      2 1 4142135623730950488016887           square root of 2     6 6 2 4  define NAN __builtin_nan          NAN constant        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 
438. ude  lt avr io h gt      section  initl  ax   progbits    ldi r0  Oxff  out _       IO ADDR PORTB         out SFR IO ADDR DDRB           Note     The    ax    progbits tells the assembler that the section is allocatable   a     executable   x   and contains data    progbits    For more detailed information  on the  section directive  see the gas user manual     9 3 9 Using Sections in C Code  Example      include  lt avr io h gt     void my_init_portb  void  __attribute__   naked   N  __attribute__   section    init3         void  my_init_portb  void   i  PORTB   Oxff   DDRB   Oxff     Note     Section  init3 is used in this example  as this ensures the inernal zero reg    _ has already been set up  The code generated by the compiler might blindly rely  on zero reg being really 0        9 4 Data in Program Space  9 41 Introduction    So you have some constant data and you re running out of room to store it  Many  AVRs have limited amount of RAM in which to store data  but may have more Flash  space available  The AVR is a Harvard architecture processor  where Flash is used for  the program  RAM is used for data  and they each have separate address spaces  It is  a challenge to get constant data to be stored in the Program Space  and to retrieve that  data to use it in the AVR application     The problem is exacerbated by the fact that the C Language was not designed for  Harvard architectures  it was designed for Von Neumann architectures where code and  data exist in the sam
439. umber has changed  this implies that the required versions of gcc and  binutils have changed  Consult the README file in the toplevel directory of the AVR  Libc source for which versions are required     9 13 1 2 Development Versions        major version number of a development se   ries is always the same as the last stable release     The minor version number of a development series is always an odd number and is 1  more than the last stable release     The patch version number of a development series is always 0 until a new branch is cut  at which point the patch number is changed to 90 to denote the branch is approaching  a release and the date appended to the version to denote that it is still in development     All versions in development in cvs will also always have the date appended as a fourth  version number  The format of the date will be YY YYMMDD     So  the development version number will look like this     1 1 0 20030825    While a pre release version number on a branch  destined to become either 1 2 or 2 0   will look like this     1 1 90 20030828    9 13 2 Releasing AVR Libc    The information in this section is only relevant to AVR Libc developers and        be  ignored by end users        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 13    Release Numbering and Methodology 358       Note     9 13  bran    1   22    10     11   12     In what follows  I assume you know how to use cvs and how to checkout multiple  source trees in a single
440. umerated type  that can be used to interface to the Clock Prescale Register     Note     Not all AVR devices have a Clock Prescale Register  On those devices without a  Clock Prescale Register  these macros are not available     typedef enum     lock_div_1    lock_div_2  lock_div_4    lock_div_8    lock_div_16   4   lock div  32   5   lock div  64   6   lock div 128   7   clock div 256   8    clock div t     II                                                   Clock prescaler setting enumerations     clock_prescale_set  x     Set the clock prescaler register select bits  selecting a system clock division setting   They type of x is clock_div_t     clock_prescale_get       Gets and returns the clock prescaler register setting  The return type is clock_div_t     6 18 Additional notes from  lt avr sfr_defs h gt     The   avr sfr defs h   file is included by all of       lt avr ioXxxx h gt  files   which use macros defined here to make the special function register definitions look  like C variables or simple constants  depending on the _SFR_ASM_COMPAT define   Some examples from  lt avr iocanxx h gt  to show how to define such macros      define PORTA _SFR_IO8  0x02     define EEAR _SFR_IO16  0x21    define UDRO _SFR_MEMB8  0xC6    define TCNT3 _SFR_MEM16  0x94      define CANIDT _SFR_MEM32  0xF0        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 18 Additional notes from  lt avr sfr_defs h  gt  141       If SFR ASM COMPAT is not defined  C programs can use
441. unction returns the hyperbolic cosine of x        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 6  lt math h gt   Mathematics 35       6 6 3 9 double exp  double x     The exp   function returns the exponential value of x     6 6 3 10 double fabs  double x     The fabs   function computes the absolute value of a floating point number x     6 6 3 11 double fdim  double x  double y     The fdim   function returns max  x y  0   If x or y or both are NaN  NaN is returned     6 6 3 12 double floor  double x     The floor   function returns the largest integral value less than or equal to x  expressed  as a floating point number     6 6 3 13 double fma  double x  double y  double z     The fma   function performs floating point multiply add  This is the operation        y     Z  but the intermediate result is not rounded to the destination type  This can sometimes  improve the precision of a calculation     6 6 3 14 double fmax  double x  double y     The fmax   function returns the greater of the two values x and y  If an argument is  NaN  the other argument is returned  If both arguments are NaN  NaN is returned     6 6 3 15 double fmin  double x  double y     The fmin   function returns the lesser of the two values x and y  If an argument is  NaN  the other argument is returned  If both arguments are NaN  NaN is returned     6 6 3 16 double fmod  double _ x  double y     The function fmod   returns the floating point remainder of x   y     6 6 3 17 double fr
442. urceforge net mingw msys automake 1 8 2 tar bz2 use  mirror internap gt         Extract to c  msys  1 0      Install Cygwin        Install everything  all users  UNIX line endings  This will take a   long    time  A fat internet pipe is highly recommended  It is also recommended  that you download all to a directory first  and then install from that directory  to your machine        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 338       Note   MPFR requires GMP  so build it first       Build GMP for MinGW    Version 4 2 1   lt http   omplib org  gt     Build script       configure 2 gt  amp 1  make 2 gt  amp 1  make check 2 gt  amp 1  make install 2 gt  amp 1    tee gmp configure log  tee gmp make log   tee gmp make check log  tee gmp make install log        GMP headers will be installed under  usr local include and library installed  under  usr local lib        Build MPFR for MinGW    Version 2 2 1   lt http   www mpfr org  gt     Build script       configure   with gmp  usr local 2 gt  amp 1   tee mpfr configure log  make 2 gt  amp 1   tee mpfr make log  make check 2 gt  amp 1   tee mpfr make check log    make install 2 gt  amp 1   tee mpfr make install log    MPFR headers will be installed under  usr local include and library in   stalled under  usr local lib        Install Doxygen        Version 1 4 7       lt http   www stack nl  dimitri doxygen  gt         Download and install        Install NetPBM     
443. ure and build at the top of the source code tree       Set PATH  in order                     usr local bin    mingw bin    bin    lt MikTex executables  gt    lt install directory  gt  bin   lt Doxygen executables  gt    lt NetPBM executables  gt    lt fig2dev executables gt    lt Ghostscript executables  gt   c  cygwin bin      Configure      configure      host avr N    prefix  installdir N    enable doc N    disable versioned doc N    enable html doc N    enable pdf doc N    enable man doc N    mandir  installdir man      datadir  installdir N  2 gt  amp 1   tee Spackage configure log      Make    make all install 2 gt  amp 1   tee Spackage make log    Manually change location of man page documentation   Move the examples to the top level of the install tree   Convert line endings in examples to Windows line endings     Convert line endings in header files to Windows line endings         AVRDUDE        Open source code package        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 10 Building and Installing the GNU Tool Chain 342           Configure and build at the top of the source code tree       Set PATH  in order         MikTex executables gt        usr local bin       usr bin       bin       mingw bin      c  cygwin bin       lt install directory  gt  bin      Set location of LibUSB headers and libraries    export CPPFLAGS   I      libusb win32 device bin  libusb_version include  export CFLAGS   I      libusb win32 device bin  libusb_version inclu
444. using the two wire interface    TWD   206   exit   avr_stdlib  74  exp   avr_math  33    fabs   avr_math  34  FAQ  304  fclose   avr_stdio  58  fdev_close   avr_stdio  56  fdev_get_udata   avr_stdio  56  fdev_set_udata   avr_stdio  56  FDEV_SETUP_STREAM   avr_stdio  57  fdev_setup_stream   avr_stdio  57  fdevopen   avr_stdio  59  fdevopen c  223  fdim   avr_math  34  feof   avr_stdio  59  ferror   avr_stdio  60  fflush   avr_stdio  60  ffs   avr_string  82  ffs S  224  ffsl   avr_string  83  ffsl S  224  ffsll       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    373       avr_string  83  ffsll S  224  fgetc   avr_stdio  60  fgets   avr_stdio  60  FILE   avr_stdio  57  floor   avr_math  34  fma   avr_math  34  fmax   avr_math  34  fmin   avr_math  34  fmod   avr_math  34  fprintf   avr_stdio  60  fprintf_P   avr_stdio  60  fputc   avr_stdio  60  fputs   avr_stdio  60  fputs_P   avr_stdio  61  fread   avr_stdio  61  free   avr_stdlib  74  frexp   avr math  34  fscanf   avr_stdio  61  fscanf_P   avr_stdio  61  fwrite   avr_stdio  61    GET_EXTENDED_FUSE_BITS  avr_boot  98   GET_HIGH_FUSE_BITS  avr_boot  98   GET_LOCK_BITS    avr_boot  98  GET_LOW_FUSE_BITS  avr_boot  98  getc  avr_stdio  57  getchar  avr_stdio  57  gets  avr_stdio  61    hypot  avr_math  34    inb   deprecated_items  169  INFINITY   avr_math  32  inp   deprecated_items  169  installation  328  installation  avarice  334  installation  avr libc  332  installation  avrdude  332  installa
445. ution speed     Care should be taken when such an indirect port access is going to one of the 16 bit  IO registers where the order of write access is critical  like some timer registers   All  versions of avr gcc up to 3 3 will generate instructions that use the wrong access order  in this situation  since with normal memory operands where the order doesn t matter   this sometimes yields shorter code      Seehttp   mail nongnu org archive html avr libc dev 2003 01 msg00044 html  for a possible workaround     avr gcc versions after 3 3 have been fixed in a way where this optimization will be  disabled if the respective pointer variable is declared to be volatile  so the correct  behaviour for 16 bit IO ports can be forced that way     Back to FAQ Index        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 9 Frequently Asked Questions 317       9 9 14 What registers are used by the C compiler     Data types     char is 8 bits  int is 16 bits  Long is 32 bits  Long long is 64 bits  float and  double are 32 bits  this is the only supported floating point format   pointers  are 16 bits  function pointers are word addresses  to allow addressing the whole  128K program memory space on the ATmega devices with  gt  64 KB of flash  ROM   There is a          8 option  see Options for the C compiler avr gcc  to  make int 8 bits  but that is not supported by avr libc and violates C standards   int must be at least 16 bits   It may be removed in a future release     Cal
446. ve value an intmax t can hold     6 8 2 32  define INTPTR MAX INTI6 MAX    largest positive value an intptr t can hold     6 8 2 33  define INTPTR MIN INT16 MIN    smallest negative value an intptr t can hold        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdint h gt   Standard Integer Types 47       6 8 2 34  define PTRDIFF_MAX INT16_MAX    largest positive value a ptrdiff_t can hold     6 8 2 35  define PTRDIFF_MIN INT16_MIN    smallest negative value a ptrdiff_t can hold     6 8 2 36  define SIG ATOMIC MAX INT8 MAX    largest positive value a sig  atomic  t can hold     6 8 2 37  ftdefine SIG ATOMIC MIN INT8 MIN    smallest negative value a sig atomic t can hold     6 8 2 38  define SIZE         CONCAT INTI6 MAX  U      largest value a size t can hold     6 8 2 39  define UINT16_C value                         U     define a constant of type uint16 t    6 8 2 40  define UNTI6 MAX   CONCAT INTI6 MAX  U  x 20   10     largest value an uint16 t can hold     6 8 2 41  define UINT32               CONCAT value  UL     define a constant of type uint32 t    6 8 2 42  define UINT32          CONCAT INT32         U    2UL   1UL     largest value an uint32 t can hold     6 8 2 43  define UINT64              CONCAT value  ULL     define a constant of type uint64 t    6 8 4144  define UINT64_MAX  _ CONCAT INT64_MAX  U    2ULL   1ULL     largest value an uint64 t can hold        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 8  lt stdi
447. will use a hard   ware sbi if appropriate  or a read or write if not  You do not need to keep track of which  registers sbi cbi will operate on     Likewise  cbi  sfr bit  is now sfr  amp     _BV bit       Modules      Additional notes from  lt avr sfr_defs h  gt     Bit manipulation        define BV bit   1  lt  lt   bit     IO register bit manipulation        define bit is set sfr  bit    SFR  BYTE sfr   amp   BV bit         define bit is clear sfr  bit      SFR  BYTE sfr   amp   BV bit          define loop until bit is set sfr  bit  do     while  bit is clear sfr  bit        define loop until bit is clear sfr  bit  do     while  bit is set sfr  bit      6 19 2 Define Documentation    6 19 2 1  define _BV bit   1  lt  lt   bit        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 19  lt avr sfr_defs h gt   Special function registers 144        include  lt avr io h gt     Converts a bit number into a byte value     Note     The bit shift is performed by the compiler which then inserts the result into the  code  Thus  there is no run time overhead when using BV       6 19 2 2  define bit_is_clear sfr  bit     _SFR_BYTE sfr   amp  _BV bit        include  lt avr io h gt     Test whether bit bit in IO register sfr is clear  This will return non zero if the bit is  clear  and a 0 if the bit is set     6 19 2 3  define bit_is_set sfr  bit   _SFR_BYTE sfr   amp  _BV bit       include  lt avr io h gt     Test whether bit bit in IO register sfr is set  This will r
448. with  lt avr io h gt      Note     The names of the interrupt vectors in AVR GCC has been changed to match the  names of the vectors in IAR  This significantly helps in porting applications from  IAR to AVR GCC     9 8 4 Intrinsic Routines           has a number of intrinsic routine such as      enable interrupts   __disable_interrupts     watchdog    reset       These intrinsic functions compile to specific AVR opcodes  SEI  CLI  WDR      There are equivalent macros that are used in AVR GCC  however they are not located  in a single include file     AVR GCC has sei   for   enable interrupts    and cli    fo _ disable interrupts    Both of these macros are located in   lt avr interrupts h gt      AVR GCC has the macro wdt_reset    in place of __watchdog_reset      However  there is a whole Watchdog Timer API available in AVR GCC that can be  found in  lt avr wdt h gt      9 8 5 Flash Variables  The C language was not designed for Harvard architecture processors with separate    memory spaces  This means that there are various non standard ways to define a vari   able whose data resides in the Program Memory  Flash      IAR uses a non standard keyword to declare a variable in Program Memory     flash int mydata           AVR GCC uses Variable Attributes to achieve the same effect     int mydata   _ attribute    progmem         Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 8 Porting From IAR to AVR GCC 304       Note     See the GCC User Manual for more inf
449. xplanation about inter   rupt routines written solely in assembler language     Catch all interrupt vector IFf an unexpected interrupt occurs  interrupt is enabled  and no handler is installed  which usually indicates a bug   then the default action is  to reset the device by jumping to the reset vector  You can override this by supplying  a function named BADISR_vect which should be defined with ISRO as such   The  name BADISR_ vect is actually an alias for __vector_default  The latter must be used  inside assembly code in case  lt avr interrupt h gt  is not included       include  lt avr interrupt h gt     ISR BADISR_vect         user code here         Nested interrupts        AVR hardware clears the global interrupt flag in SREG be   fore entering an interrupt vector  Thus  normally interrupts will remain disabled inside  the handler until the handler exits  where the RETI instruction  that is emitted by the  compiler as part of the normal function epilogue for an interrupt handler  will even   tually re enable further interrupts  For that reason  interrupt handlers normally do not  nest  For most interrupt handlers  this is the desired behaviour  for some it is even  required in order to prevent infinitely recursive interrupts  like UART interrupts  or  level triggered external interrupts   In rare circumstances though it might be desired to  re enable the global interrupt flag as early as possible in the interrupt handler  in order  to not defer any other interrupt more 
450. xtend up  to address Oxffff     avr gcc      Wl  Tdata 0x801100   defsym           end 0x80ffff        Note     See explanation for offset 0x800000  See the chapter about using gcc for the  w1  options     0x0100    on board RAM    SP t       maroc                  heap end  RAMEND   __brkval            __malloc_heap_start         heap start    bss end    data            bss start    data start    external RAM    Ox10FF  0x1100  OxFFFF                Figure 7  Internal RAM  stack only  external RAM  variables and heap    If dynamic memory should be placed in external RAM  while keeping the variables in       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    9 2 Memory Areas and Using malloc   269       internal RAM  something like the following could be used  Note that for demonstration  purposes  the assignment of the various regions has not been made adjacent in this  example  so there are  holes  below and above the heap in external RAM that remain  completely unaccessible by regular variables or dynamic memory allocations  shown  in light bisque color in the picture below      avr gcc      Wl   defsym  heap start 0x802000   defsym  heap end 0x803fff        external RAM    0x0100  0x1 0FF  0x1100  0x2000  Ox3FFF  OxFFFF    on board RAM    et  oA               malloc heap            heap end  ot _ brkval     bss end   malloc heap start         heap start    data end     bss start  data start       Figure 8  Internal RAM  variables and stack  external RAM  hea
451. xygen    6 11  lt string h gt   Strings 83       int strcmp  const char     const char x  ATTR  PURE   char    strcpy  char     const char       size t strcspn  const char   s  const char xreject   ATTR  PURE  size  t strlcat  char     const char     size  t    size t strlcpy  char     const char     size t    size t strlen  const char             PURE   char    strlwr  char       int strncasecmp  const char     const char     size t  ATTR_PURE  char    strncat  char     const char     size_t    int strncmp  const char     const char     size t  ATTR_PURE  char    strncpy  char     const char     size_t    size  t strnlen  const char     size_t           PURE   char    strpbrk  const char   s  const char xaccept           PURE  char    strrchr  const char     int           PURE   char   strrev  char x    char    strsep  char       const char       size t strspn  const char   s  const char xaccept           PURE  char    strstr  const char     const char x  ATTR  PURE   char    strtok_r  char     const char     char         char   strupr  char                                     6 11 2 Define Documentation    6 11 2 1  define FFS x   This macro finds the first  least significant  bit set in the input value     This macro is very similar to the function ffs   except that it evaluates its argument at  compile time  so it should only be applied to compile time constant expressions where  it will reduce to a constant itself  Application of this macro to expressions that are not  c
452. y h 222  delay_basic h 222  eeprom h 223  errno h 224  fdevopen c 224  ffs S 225  ffsl S 225  ffsll S 225  interrupt h 225  inttypes h 226  io h 228  math h 228  memccpy S 229  memchr S 230  memchr_P S 230       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    41 avr libc File List 12       memcmp S 230  memcmp_P S 230  memcpy S 230  memcpy_P S 231  memmem S 231  memmove S 231  memrchr S 232  memrchr_P S 232  memset S 232  parity h 232  pgmspace h 232  power h 239  setbaud h 240  setjmp h 240  sleep h 240  stdint h 241  stdio h 244  stdlib h 246  strcasecmp S 248  strcasecmp_P S 248  strcasestr S 248  strcat S 248  strcat_P S 249  strchr S 249  strchr_P S 249       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    41 avr libc File List 13       strchrnul S 249  strchrnul_P S 249  stremp S 249  stremp_P S 249  strcpy S 249  strepy_P S 250  strespn S 250  strcspn_ P S 250  string h 250  strlcat S 252  strlcat_ P S 252  strlcpy S 252  stricpy_P S 252  strlen S 252  strlen_P S 252  strlwr S 253  strncasecmp S 253  strncasecmp_P S 253  strncat S 253  strncat_P S 253  strncmp S 254  strncmp P S 254  strncpy S 254  strncpy P S 255  strnlen S 255       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    5 avr libc Page Index 14       strnlen_P S 255  strpbrk S 256  strpbrk_P S 256  strrchr S 256  strrchr_P S 258  strrev S 258  strsep S 258  strsep_P S 258  strspn S 258  strspn_P S 258  strstr S 258  strstr_P S 258  strtok_r S 258  strupr S 
453. y_P   avr_pgmspace  133  strlcpy_P S  251  strlen   avr_string  88  strlen S  251  strlen_P   avr_pgmspace  133  strlen_P S  251  strlwr   avr_string  88  strlwr S  252  strncasecmp   avr_string  88  strncasecmp S  252  strncasecmp_P   avr_pgmspace  133  strncasecmp_P S  252  strncat   avr_string  89  strncat S  252  strncat_P   avr_pgmspace  134  strncat_P S  252  strncmp   avr_string  89  strncmp S  253  strncmp P   avr pgmspace  134  strncmp  P S  253  strncpy   avr string  89  strncpy S  253  strncpy_P   avr_pgmspace  134  strncpy_P S  254  strnlen   avr_string  89  strnlen S  254  strnlen_P    avr_pgmspace  135  strnlen_P S  254  strpbrk   avr_string  90  strpbrk S  255  strpbrk_P   avr_pgmspace  135  strpbrk_P S  255  strrchr   avr_string  90  strrchr S  255  strrchr_P   avr_pgmspace  135  strrchr_P S  257  strrev   avr_string  90  strrev S  257  strsep   avr_string  90  strsep S  257  strsep_P   avr_pgmspace  135  strsep_P S  257  strspn   avr_string  91  strspn S  257  strspn_P   avr_pgmspace  136  strspn_P S  257  strstr   avr_string  91  strstr S  257  strstr_P   avr_pgmspace  136  strstr_P S  257  strtod   avr_stdlib  78  strtok_r   avr_string  91  strtok_r S  257  strtol   avr_stdlib  78  strtoul   avr_stdlib  79  strupr   avr_string  92       Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    INDEX    382       strupr S  257  supported devices  2    tan   avr math  36  tanh   avr math  36  timer enable int   deprecated items  171  toascii   ctype  1
454. yway  since internal RAM access is faster   and even  required for some early devices that had hardware bugs preventing them from using  a stack in external RAM  Note also that the heap for malloc    Will still be placed  after all the variables in the data section  so in this situation  no stack heap collision  can occur     9 12 Using the avrdude program    Note     This section was contributed by Brian Dean   bsd bsdhome com     The avrdude program was previously called avrprog  The name was changed to  avoid confusion with the avrprog program that Atmel ships with AvrStudio     avrdude is a program that is used to update or read the flash and EEPROM memories  of Atmel AVR microcontrollers on FreeBSD Unix  It supports the Atmel serial pro   gramming protocol using the PC s parallel port and can upload either a raw binary file  or an Intel Hex format file  It can also be used in an interactive mode to individually  update EEPROM cells  fuse bits  and or lock bits  if their access is supported by the  Atmel serial programming protocol   The main flash instruction memory of the AVR  can also be programmed in interactive mode  however this is not very useful because  one can only turn bits off  The only way to turn flash bits on is to erase the entire  memory  using avrdude s  e option      avrdude is part of the FreeBSD ports system  To install it  simply do the following       cd  usr ports devel avrdude    make install    Once installed  avrdude can program processors using
455. zero  if sl  or the first n bytes thereof  is found  respectively  to be less than  to match   or be greater than s2        Generated on Mon Oct 29 20 02 34 2007 for avr libc by Doxygen    6 16  lt avr pemspace h gt   Program Space Utilities 136       6 16 4 20 char    strncpy_P  char   dest  PGM_P src  size_t n     The strncpy_P   function is similar to strcpy_P   except that not more than n bytes of  src are copied  Thus  if there is no null byte among the first n bytes of src  the result  will not be null terminated     In the case where the length of src is less than that of n  the remainder of dest will be  padded with nulls     Returns     The strncpy_P   function returns a pointer to the destination string dest     6 16 4 21 size t strnlen_P  PGM P src  size_t len    Determine the length of a fixed size string    The strnlen_P   function is similar to strnlen    except that src is a pointer to a string  in program space    Returns     The strnlen_P function returns strlen_P src   if that is less than len  or len if  there is no     0    character among the first 1      characters pointed to by src     6 16 4 22 char x strpbrk_P  const char    s            accept     The strpbrk_P   function locates the first occurrence in the string s of any of the char   acters in the flash string accept  This function is similar to strpbrk   except that  accept is a pointer to a string in program space     Returns     The strpbrk_P   function returns a pointer to the character in s t
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Black & Decker VEC1093DBD User's Manual  コンクリートポンプ車総合改善委員会 第二分科会(検査・旧型機分科会  Dodge 2008 Ram Chassis Cab 3500 Automobile User Manual  Trane Performance Air Handlers Quick Reference Guide  Il lavoro al videoterminale  Istruzioni d`uso Bilance analitiche XS Excellence    Copyright © All rights reserved. 
   Failed to retrieve file