LORA-B1 官方LORA驅動移植成功後的測試過程

LORA驅動移植成功後的測試過程:

1.先編譯一遍已移植LORA驅動的程序:

在這裏插入圖片描述

2.在int main(void)函數裏添加框起來的兩段代碼並編譯,提示 3 Error(s), 2 Warning(s).

在這裏插入圖片描述

3.查看報錯內容:

在這裏插入圖片描述

由編譯提示可知,3個Error(s)均由未定義標識符所致,2個Warning(s)均爲函數隱式聲明。

4.選擇tRadioDriver右鍵Go To Definition Of …找到tRadioDriver所在的頭文件radio.h,同理,找到REG_LR_VERSION所在的頭文件sx1276-LoRa.h。

函數RadioDriverInit所在文件radio.c,函數SX1276Read所在文件sx1276-Hal.c。
然後將#include "radio.h"和#include "sx1276-LoRa.h"兩個頭文件包含進去,編譯提示 5 Error(s), 1 Warning(s)。
報error的原因是"bool"這個變量未定義;
報warning的原因是函數SX1276Read隱式聲明。
在這裏插入圖片描述

5.我們再添加#include "platform.h"將platform.h這個頭文件包含進去,編譯提示 0 Error(s), 1 Warning(s)。

報warning的原因是函數SX1276Read隱式聲明。
這個時候,我們的程序就已經可以運行了。接下來就把程序燒進開發板。
在這裏插入圖片描述

6.點擊魔法棒圖標,設置debug

在這裏插入圖片描述

在這裏插入圖片描述

7.編譯,下載,可以看到開發板的LED燈以設定的時間週期閃爍。

誒,沒法傳視頻,空着又不太好,就放張圖片意思意思一下吧。
在這裏插入圖片描述

接下來討論下細節問題:
程序雖然可以運行了,但是剛剛提示函數隱式聲明的那個warning要不要處理掉呢?
最好處理掉,因爲函數隱式聲明是程序裏的一個不穩定因子。雖然程序運行時看起來好好的也沒啥問題。但如果是很大型的程序,這些隱式聲明多了,估計運行起來遇到的未知bug也會接憧而來了(跑程序的時候所謂的時靈時不靈,就是程序穩定性的問題了吧)。

養成好習慣,編程少麻煩。

接下來要討論的,就是隱式聲明的問題。
那什麼是隱式聲明呢?(下面是我百度來的~)
由於編譯器在處理函數調用代碼時沒有找到函數原型,只好根據函數調用代碼做隱式聲明。
爲什麼編譯器在處理函數調用代碼時需要有函數原型?因爲必須知道參數的類型和個數以及返回值的類型才知道生成什麼樣的指令。
爲什麼隱式聲明靠不住呢?因爲隱式聲明是從函數調用代碼推導而來的,而事實上函數定義的形參類型可能跟函數調用代碼傳的實參類型並不一致,如果函數定義帶有可變參數(例如printf),那麼從函數調用代碼也看不出來這個函數帶有可變參數,另外,從函數調用代碼也看不出來返回值應該是什麼類型,所以隱式聲明只能規定返回值都是int型的。
既然隱式聲明靠不住,那編譯器爲什麼不自己去找函數定義,而非要讓我們在調用之前寫函數原型呢?因爲編譯器往往不知道去哪裏找函數定義。(所以這個時候我們就要告訴編譯器讓它去哪裏找我們調用的函數~)

可以到下面的兩個鏈接去看看,瞭解何爲隱式聲明以及它的“危害”。
參考鏈接

https://zhidao.baidu.com/question/341065125.html

http://www.360doc.com/content/16/0516/15/478627_559610934.shtml

本例程處理函數隱式聲明warning的方法也很簡單:找到標註隱式聲明的函數所在文件,將其頭文件包含進main.c裏去。
前面我們提到過程序裏唯一的一個warning原因是函數SX1276Read隱式聲明。選擇SX1276Read右鍵Go To Definition Of …找到SX1276Read所在的文件sx1276-Hal.c。
在這裏插入圖片描述
在main.c中添加#include "sx1276-Hal.h"將sx1276-Hal.h頭文件包含進去,再編譯,0 Error(s) , 0 Warning(s).
在這裏插入圖片描述

到此,測試程序中就排除了函數隱式聲明的不穩定性因子啦~
以後都要養成儘量排除warning的習慣,特別是函數隱式聲明這麼好解決的warning就不要偷懶無視掉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章