Arduino基本數據類型


基本數據類型簡介

常見的Arduino是基於ATmega的8位 AVR單片機,例如Arduino UNO ,Arduino Nano,Arduino mega2560等。還有高級點 32位的,如Arduino Due。
由於Arduino是基於C/C++語言的,具有平台差異性,因此,其基本數據類型在這2個平台(8位機和32位機)下有差別。8位機下,int占2字節,double和float一樣占4字節。而32位機下int是4字節,double是8字節。由於32位機很少見,本文就只以8位機類型講解。
 
 
類型
字節數
范圍
說明
char
 
signed  char             
 
unsigned char
1
-128 ~127
 
-128 ~127
 
0~255
Arduino中的char是有符號的,等價於signed char。范圍是-128 ~127 。
char目的是用於儲存ASCII字符。如果你想存儲字節數據,建議使用byte來明確代碼目的。
byte
1
0~255
 
byte不是C/C++標准類型,他是Arduino平台下特有的,實際就是無符號8位整型。
 
 
Arduino.h中,有這樣的類型定義: typedef uint8_t byte;
int 
unsigned int
2
-32768-32767  
(2字節有符號)
 
0~65535    
(2字節無符號)
 
 
在基於ATMega的8位單片機中,如Arduino UNO,Ardunio Mega2560,int是2字節的.
 
而在有些高級Arduino板,如Arduino Due,SAMD等中,int占4字節。
long 
 
 
unsigned long
4
-2147483648 ~ 2147483647
 
0 ~ 4294967295
長整型常量末尾要用L標識出來。
如:long num  = 29596725L;
 
float
4
-3.4028235E+38 to 3.4028235E+38
 
 \
double
4
-3.4028235E+38 to 3.4028235E+38
在基於ATMega的8位單片機中,如Arduino UNO,Ardunio Mega2560,double和float沒有差別,都是4字節的.
而在Due,等高級板中,占8字節。
雖然在8位機的Arduino中float和double是一樣的,但是在32位平台中,double的精度比float高。
bool
1
true 、 false
實質就是C++中的bool類型,你也可以使用boolean,因為在Arduino.h中,有這樣的類型定義:
typedef bool boolean;
 
 

二進制常量

C/C++是不支持在代碼中直接使用二進制格式的字面值的,但是Arduino.h中包含了一個頭文件 "binary.h" ,如下。其作用就是將0~255范圍的整數用一組二進制格式的宏表示,這樣,我們要在程序中顯式的使用0~255范圍內的二進制常量,則可以寫成 以B開頭的格式。
 
#ifndef Binary_h
#define Binary_h

#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
/*.......篇幅原因,省去........*/
#define B11111110 254
#define B11111111 255

#endif

 

包含類型大小信息的整數類型

有些做過硬件開發的人會使用類似於  int8_t  、int16_t 等形式的類型,特點是類型本身包含了類型的大小,讓代碼更具有移植性。在Arduino中也可以使用。
需要包含頭文件 #include<inttypes.h >
/*********************整數類型************************/

typedef signed char int8_t;   //8bit有符號類型
typedef unsigned char uint8_t; // 8bit無符號類型


typedef signed int int16_t; //16bit有符號類型
typedef unsigned int uint16_t;//16bit有符號類型


typedef signed long int int32_t;   //328bit有符號類型
typedef unsigned long int uint32_t;  //32bit有符號類型


typedef signed long long int int64_t;   //32bit有符號類型.可能無法使用
typedef unsigned long long int uint64_t;     //32bit有符號類型,可能無法使用




/***************保存地址值的類型****************/


typedef int16_t intptr_t;     //保存地址值的類型,有符號

typedef uint16_t uintptr_t;  //保存地址值的類型,無符號


//遠地址類型,用於單片機SRAM大於64K(地址編號為0~65535 )的情況,用intptr_t可能會溢出。

typedef uint32_t   uint_farptr_t;
typedef int32_t    int_farptr_t;   


/***********宏符號常量,保存了各種類型的最大,最小值**********/

INT8_MAX     INT8_MIN

UINT_MAX     


INT16_MAX    INT16_MIN

UINT16_MAX

INT32_MAX INT32_MIN UINT32_MAX

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM