文章程式碼顯示

2017年12月23日 星期六

《高階》寫程式Arduino教學 - 04:Arduino IDE 與 MinGW 衝突造成的報錯 delay() 函式壞了

之前用 Arduino IDE 對 Arduino 進行編譯了好一陣子,但最近想複習一下基本的 C 語言於是去下載了 Eclipse 以及 MinGW 來設置我的 C 語言編譯環境,沒想到我的 Arduino 出現了一堆問題,經過查詢發現是 MinGW 的設置會跟 Arduino IDE 的一些變量出現衝突。

當初在安裝  Eclipse 以及 MinGW 時我們有在電腦裡面設置了三個環境變量如下圖

《筆記》C語言 - 02 : printf scanf 函式、跳脫序列、算術運算子、關係運算子、邏輯運算子、if 選擇敘述式



之後我的 Arduino IDE 就一直出現一些怪問題,我用最基本的 Example -> Blink 來進行編譯竟然也會報錯。這表示肯定不是程式有寫錯,而是環境設置上出了問題


上圖是說在

C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr\avr\include\avr\pgmspace.h

裡面找不到 uint_farptr_t 這個變量的設置,而這個變量的設置是在

C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr\avr\include\inttypes.h 裡頭定義的

且在 pgmspace.h 裡面明明就有 #include <inttypes.h> 這條語句。

當初遇到這個問題時查了一下資料,有看到人家的解決辦法是把 inttypes.h 複製一份放到

C:\Program Files (x86)\arduino-1.8.5\hardware\tools\avr\avr\include\avr 裡頭

然後把 pgmspace.h 裡面的 #include <inttypes.h> 改成 #include <avr/inttypes.h>

我跟著改了之後的確沒有報錯,可以成功編譯,然後我就這樣用了好一陣子

之後又出現了一個怪問題,在用 Arduino IDE 編譯到 delay() 、 millis() 等函數時發現這些函數的功能都不正常


上圖我一樣用 blink 來進行展示,很明顯的看到這個值根本不對。

我查了很多來源之後總結發現是 MinGW 的環境變數跟 Arduino IDE 發生了衝突

最後我的解決辦法是把 MinGW 的文字件夾改名,例如把 MinGW 改成 MinGW_1 並且重開機,然後在電腦的環境變量那邊不進行對應的修改


終於正常了 ....

註 : 前面的 pgmspace.h 找不到變量,事實上也是因為跟 MinGW 衝突所造成的,也就是說若我們進行 MinGW 文字件夾名稱的修改後,就也不用去改 pgmspace.h 的 #include 語句

在 C 語言編譯環境那塊他就會壞了,不過不打緊,要用的時候再把文字件夾名稱改回跟環境變數定義的一樣就好

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引