網頁

2013年12月17日 星期二

[CCS] Using C++ in Code Composer Studio

 

1. 建立新專案

從 File 選項, 選擇 New, 在專案選項中, 選擇 CCS Project. 在 Variant 的列表中, 找出所支援的型號. 這個要特別注意. 一旦選定, 就很難再修改. 在 project template 中, 選擇 Empty Project (with main.c). 然後, 輸入專案名稱 (例如 Trial3) 後, 按下 Finish.

01-new-project

2. 設定參考路徑

在左邊的專案列表欄中, 找到新建立的專案 (例如 Trial3). 在專案的名稱上按右鍵, 打開專案屬性表格. 在左邊的設定項目中, 依序打開設定項目: build/ ARM Compiler/Include Options.

02-include-path-01

在右下方的 include path 窗格的右上方, 找到 “+” 號, 並且點擊. 在目錄中, 填入

"${TIVAWARE_INSTALL}"

這是 Tiva Ware 安裝路徑的環境變數.

03-include-path-02

輸入完, 按 OK. 回到 Include path 畫面, 應該和下圖相同.

04-include-path-03

3. 加入 library

在專案名稱上按右鍵, 並且選擇 Add Files. 打開加入檔案的對話框. 瀏覽至 Tiva 的安裝目錄, 並且選擇 driverlib/ccs/Debug. 我的安裝目錄是 C:\ti\TivaWare_C_Series-1.0\driverlib\ccs\Debug, 選擇driverlib.lib 並且打開.

05-driverlib-01 

在加入檔案的選項中, 選擇 Link to files, 並且以 TIVAWARE_INSTALL 作為參考. 這樣的做法就不會把 driverlib.lib 複製到專案中, 只有在要用到的時候, 才根據 Tiva Ware 的安裝目錄來加入這個檔案. 除了避免複製一大堆相同的檔案外, 也可以避免版本有差異的情形.

06-driverlib-02

4. 設定語言選項

在專案名稱上按右鍵, 打開專案屬性表格. 依序打開設定項目: Build/ARM Compiler/Advanced Options/Language OPtions

07-language-option-01

把 Treat C files as C++ files 這一個項目打勾. 是的, 就是把 C 的檔案也當做 C++ 的檔案來編譯.

08-language-option-02

5. 測試 C++ 程式碼

將以下程式碼, 取代原本 main.c 的內容. 以下的內容, 是根據 TM4C123G_LaunchPad_Workshop lab4 的內容, 只是加入 C++ 的語法, 把程式碼搬移而已. 如果有問題, 可以先參考前面所說的範例.

#include <stdint.h>
#include <stdbool.h>
#include "inc/tm4c123gh6pm.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/gpio.h"
#include "driverlib/timer.h"

class HelloWorld
{
public:
    HelloWorld() {};
    ~HelloWorld() {}

public:
    static void Blink();
};

void HelloWorld::Blink()
{
    TimerEnable(TIMER0_BASE, TIMER_A);

    while(1)
    {
    }
}

int main(void) {
    uint32_t ui32Period;

    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
    TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);

    ui32Period = (SysCtlClockGet() / 10) / 2;
    TimerLoadSet(TIMER0_BASE, TIMER_A, ui32Period -1);

    IntEnable(INT_TIMER0A);
    TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
    IntMasterEnable();

    HelloWorld::Blink();

    return 0;
}

 

6. 注意事項

CCS 的編輯器可以做動態的語法檢查. 不過, 有時候似乎不是判斷得很準確. 但是並不影響真正的編譯和執行. 據了解, 這個問題已經列入 bug, 也許下一個版本會有修正.

09-notice-01

沒有留言:

張貼留言

請提供您寶貴的意見