相關推薦
您可能對下面課程感興趣
Arduino視頻教程基礎篇

75小節(jié)已有140858人學過

讓Arduino程序具備更好的兼容性
發(fā)布時間:2022-03-11 10:36 [ 我要自學網原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 1314

不同型號的Arduino開發(fā)板可能使用了不同的核心控制器,如Arduino UNO使用的核心控制器為8位AVR架構的Atmega328P,而Arduino Due使用的是32位ARM Cortex m4架構的 SAMD21G18A。兩者主要區(qū)別如下:

工作電壓不一樣。AVR核心的arduino通常工作電壓為5V,ARM核心的arduino通常工作電壓為3.3V。因此在接入外部設備時,可能需要轉換通信電平,以兼容不同的工作電壓的外設。

在軟件層面,不同架構的芯片對應的編譯環(huán)境,可能相同數據類型的數據長度不一樣。如在Arduino UNO、MEGA中,int及unsigned int占用2字節(jié)(16位);而在Arduino Due、Zero中,int及unsigned int占用4字節(jié)(32位)。

所以在編寫和移植時程序時,如果直接復用代碼,可能會造成一些錯誤。

這種情況下,可以使用宏判斷來判斷當前編譯的目標開發(fā)板上的核心MCU型號,進而選擇編譯對應的語句,方式如下:

#ifdef(__arm__)

#endif

#ifdef(__AVR__)

#endif

可以通過以下宏判斷芯片類型:

芯片類型 對應的宏
AVR __AVR__
ARM __arm__

可以通過以下宏判斷開發(fā)板型號:

開發(fā)板型號 對應的宏
Arduino UNO __AVR_ATmega328P__
Arduino MEGA __AVR_ATmega2560__
Arduino Leonardo __AVR_ATmega32U4__
Arduino Zero __SAMD21G18A__
Arduino Due __SAM3X8E__

兼容數據長度不一樣的情況,可以使用intx_t指定長度方式定義變量,如int8_t即是長度為8位的整形。使用方式和int一樣:

int8_t a = 123;

常用類型如下:

類型 取值范圍 長度(bit)
int8_t -128 ~ 127<br/>( -2<sup>7</sup> ~ 2<sup>7</sup> - 1) 8
uint8_t 0 ~ 255<br/>( 0 ~ 2<sup>8</sup> - 1) 8
int16_t -32,768 ~ 32,767<br/>( -2<sup>15</sup> ~ 2<sup>15</sup> - 1) 16
uint16_t 0  ~ 65,535<br/>( 0 ~ 2<sup>16</sup> - 1) 16
int32_t -2,147,483,648  ~ 2,147,483,647<br/>( -2<sup>31</sup> ~ 2<sup>31</sup> - 1) 32
uint32_t 0 ~ 4,294,967,295<br/>( 0 ~ 2<sup>32</sup> - 1) 32
Arduino視頻教程基礎篇
我要自學網商城 ¥40 元
進入購買
文章評論
0 條評論 按熱度排序 按時間排序 /350
添加表情
遵守中華人民共和國的各項道德法規(guī),
承擔因您的行為而導致的法律責任,
本站有權保留或刪除有爭議評論。
參與本評論即表明您已經閱讀并接受
上述條款。
V
特惠充值
聯系客服
APP下載
官方微信
返回頂部
相關推薦
您可能對下面課程感興趣
Arduino視頻教程基礎篇

75小節(jié)已有140858人學過

分類選擇:
電腦辦公 平面設計 室內設計 室外設計 機械設計 工業(yè)自動化 影視動畫 程序開發(fā) 網頁設計 會計課程 興趣成長 AIGC