通常, 我們會把一個專案, 分成幾個小部份, 或稱為模組. 在 firmware 的環境中, 會把它具體表現在 library. 之所以是 static, 是因為它不是 dynamic, 它是和主程式部份連結在一起, 並不是需要的時候才動態載入. Firmware 通常不用動態載入, 因為它需要比較複雜的記憶體管理.
1. 建立 static library
從 File 選項, 選擇 New, 在專案選項中, 選擇 CCS Project. 在 output type, 選擇 Static Library. 在下面的 Project templates 中, 選擇 Empty Project, 稍後再自己加入檔案.
2. 加入 library 檔案
在左邊的 Project Explorer 窗格中, 找到專案名稱( TrialLib), 然後按右鍵 New/File 加入檔案. 在 File Name 的編輯框中, 輸入 TrialLib.c. 用同樣的方法加入 TrialLib.h
3. library 的 .c file 內容
打開 TrialLib.c 的內容, 加入以下內容
#include <stdint.h>
#include <stdbool.h>
unsigned int increment(unsigned int a)
{
return (++a);
}
unsigned int addition(unsigned a, unsigned int b)
{
return (a+b);
}
4. library 的 .h 的內容
在 TrialLib.h, 加入以下內容
#ifndef TRIAL_LIB_H
#define TRIAL_LIB_H
unsigned int increment(unsigned int a);
unsigned int addition(unsigned int a, unsigned int b);
#endif
5. 編譯 library
在專案名稱上面按右鍵, 選擇 build project. 編譯後的訊息如下圖. 注意在 Project Explorer 中, 增加了 Debug 目錄, 可以在其中找到 TrialLib.lib, 這就是我們所要連結的 library 檔案. 另外, 我們編譯的版本是 debug, 如果選擇 release, 在追蹤程式執行的時候, 將會有無原始碼的警告.
6. 建立主執行專案
從 File 選項, 選擇 New, 在專案選項中, 選擇 CCS Project. 在 output type, 選擇 Executive. 在下面的 Project templates 中, 選擇 Empty Project (with main.c).
7. 編輯 main.c
在 main.c 中, 加入以下程式碼, 這個專案目前是無法編譯, 還需要加入 triallib.h 的參考, 以及 triallib.lib 做連結
#include <stdint.h>
#include <stdbool.h>
#include "TrialLib.h"
int main(void) {
volatile unsigned int result, a, b;
a = 10;
b = 55;
result = increment(a);
result = addition(a,b);
while (1) ;
}
8. 設定 include path
在專案名稱上按右鍵, 選擇 Properties, 打開專案屬性. 依序打開 Build/Option.
在 Add dir to #include search path ….的右方, 按下 + , 跳出 Add directory path 對話框
按下 Workspace 按紐
選擇 TrialLib 目錄. 按下 OK. 回到對話框. 再按一次 OK, 回到 Include Options 畫面, 再按一次 OK.
9. 加入 library 檔案
在專案名稱上按右鍵, 選擇 Add Files, 出現 Add files to Trial4 的對話框,
瀏覽至 TrialLib 的 debug 目錄, 選擇 Triallib.lib, 並按下開啟檔案. 開啟 File Operation 對話框.
選擇 Link to files, 並確定 Create link locations relative to : WORKSPACE_LOC, 然後按下 OK.
這樣會讓 CCS 在連結階段, 自動到 TrialLib 的目錄去尋找 Triallib.lib 這個檔案.
10. 重新編譯.
這樣應該就可以編譯成功, 並且執行.
11. 注意事項
1. library 和 executive 的 C/C++ 的選項要一致. 否則在 link 的階段會發生錯誤.
2. 如果不小心修改到 TrialLib 的專案, 並且產生 triallib.lib, 那麼編譯 Trial4 的專案就會含入這個修改.
沒有留言:
張貼留言
請提供您寶貴的意見