In case you were wondering, here is the output of sizeof() and other things for an Arduino Nano.  What's interesting (to me) is that while the Atmega328p is an 8-bit MCU, sizeof(int)==2 and sizeof(char *)==2.  In other words, the compiler is treating it as a 16-bit processor.
Welcome to sizeof! sizeof(bool)=1 sizeof(char)=1 sizeof(int)=2 sizeof(short)=2 sizeof(long int)=4 sizeof(long long int)=8 sizeof(char*)=2 sizeof(String)=6 sizeof(int8_t)=1 sizeof(uint8_t)=1 sizeof(int16_t)=2 sizeof(uint16_t)=2 sizeof(int32_t)=4 sizeof(uint32_t)=4 sizeof(int64_t)=8 sizeof(uint64_t)=8 __INT_MAX__=7FFF __WINT_MAX__=FFFF SHRT_MAX=7FFF USHRT_MAX=FFFF INT_MAX=7FFF UINT_MAX=FFFF LONG_MAX=7FFFFFFF ULONG_MAX=FFFFFFFF
Here's the code that produces the above.
#include <avr/power.h>
#include <avr/sleep.h>
#include <limits.h>
#define SO( i ) Serial.print( "sizeof(" #i ")=" ); Serial.println( sizeof(i) )
#define Max( i ) Serial.print(  #i "=" ); Serial.println( i, HEX )
void setup(void)
{
    Serial.begin( 9600 );
    Serial.println( "Welcome to sizeof!" );
    
    SO( bool );
    SO( char );
    SO( int );
    SO( short );
    SO( long int );
    SO( long long int );
    SO( char* );
    SO( String );
    SO( int8_t );
    SO( uint8_t );
    SO( int16_t );
    SO( uint16_t );
    SO( int32_t );
    SO( uint32_t );
    SO( int64_t );
    SO( uint64_t );
    Max( __INT_MAX__ );
    Max( __WINT_MAX__ );
    Max( SHRT_MAX );
    Max( USHRT_MAX );
    Max( INT_MAX );
    Max( UINT_MAX );
    Max( LONG_MAX );
    Max( ULONG_MAX );
#ifdef LLONG_MAX
    Max( LLONG_MAX );
#endif
#ifdef ULLONG_MAX
    Max( ULLONG_MAX );
#endif
/*    Max( LONG_LONG_MAX );
    Max( ULONG_LONG_MAX ); */
}
void loop(void)
{
    delay(1000);    // allow serial buffer to empty
    set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
    sleep_mode(); // here the device is actually put to sleep!!
}
 
No comments:
Post a Comment