嵌入式系統工程師的能力取決于他們對所用工具的了解程度。使用正確的工具可以大大加快開發速度,但不一定能確保成功。為了取得成功,嵌入式開發人員需要理解該工具的復雜性。
以使用IAR編譯器和處理器專家設置恩智浦Kinetis-L微控制器的配置位這一看似簡單的任務為例。
配置位控制NMI和Reset引腳的功能以及初始時鐘和引導選項。本例中,配置位從十六進制地址0x400開始,緊跟在中斷向量表之后。表1顯示了每個地址控制的內容。
表1–配置位
對于如何設置這些內存區域,開發人員有許多選擇。首先,他們可以使用鏈接器文件中映射的表來設置值。或者,他們可以使用Processor Expert來設置這些值。
設置了配置區域的值后,嵌入式開發人員現在可以編譯代碼并將其加載到目標上。人們可能會期望該過程在閃存中設置配置位。然而,運行代碼將揭示一個不同的故事!盡管已經正確地配置了這些位,但是開發人員會發現在目標上,這些位仍然被設置為默認值。
哪里出了問題?使用IAR,開發人員可以在要加載的代碼和目標內存中存在的代碼之間運行驗證檢查。他們會發現驗證失敗了。某些東西阻止了配置位的編程。
罪魁禍首是IAR工具鏈,它阻止了配置區域的更新。這種行為的原因是,這些配置位對編程來說可能是危險的,因為它們可能會鎖定整個器件。無意中對它們進行編程可能是災難性的,因此工具鏈會自動阻止對目標區域的寫權限,而不會向開發人員提及。工具鏈假設嵌入式開發人員知道這是工具鏈的行為方式。
要對配置位進行編程,開發人員必須通過向flash設置配置添加特殊參數來手動覆蓋這一默認行為,如圖1所示。只有在開發人員做到這一點之后,他們才能成功地編寫配置位。沒有這個“特性”的經驗或知識的開發人員很容易被弄糊涂,特別是因為這些參數被很好地隱藏在多個子菜單中。
圖1–IAR Overide參數
所以,開發人員和項目團隊需要安排時間來定期更新自己,并學習更多關于他們日常使用的工具的知識。此外,項目經理需要認識到時間表中必須有學習工具的時間。嵌入式開發人員通常知道他們的工具鏈的日常特性,但是工具的細微復雜之處才是真正重要的,并提供最強大的特性。