設定新硬體目標

您可以修改由 Rational Rhapsody 提供的檔案,以符合您的開發環境,或者建立一組新的檔案,以支援特定的目標。

關於這項作業

您可以針對要與符合您的開發環境之 MicroC 架構 (MXF) 搭配使用的新目標,新增支援。在此作業中,您將會新增適當的檔案及定義,用於定義要由產生程式碼配置使用的新環境,以產生及建置以特定硬體為目標的應用程式。此作業也稱為重定目標,例如,這表示支援新的硬體目標。

每個受支援的硬體目標都是使用以下各項進行定義的:
  • 一組內容,可定義與特定目標相關之檔案的各種性質,以及針對該目標建置應用程式的方法,也稱為環境
  • 一組檔案(稱為配接器),可針對硬體相關的功能(如硬體計時器、通訊等)定義目標特定的實作。

產生程式碼的配置所使用的內容集,是由位於該配置之「特性」對話框設定標籤上的環境下拉清單所決定。

環境下拉清單的內容取自 C_CG::Configuration::Environment 內容的列舉定義。

此外,IBM Rational Rhapsody 還包括許多目標特定的檔案集。每個檔案集都會為 MicroC Execution Framework (MXF) 定義配接器。在 <Install-Dir>\Share\LangC\mxf\Adaptors\Mainloop 下的適當產品安裝子目錄中,可以找到這些配接器。

若要建立新的目標,您需要建立一組類似的檔案,以讓 MXF 適應於該目標。

程序

  1. 在 <Install-Dir>\Share\Properties 目錄中建立 Site.prp 檔案或對其進行更新,以新增適用於目標的新環境定義:
    1. <Install-Dir>\Share\profiles\MicroC\MicroC.prp 檔案複製環境列舉內容,並對其附加新環境的名稱。
      在 prp 檔案中,會在以下位置找到該內容:
      Subject C_CG
          Metaclass Configuration
             Property Environment …
          endend
    2. 複製用於定義環境的內容集,如 MicroC.prp 檔案中所定義。例如,您可以複製以 "metaclass <Environment-name>" 開始且以 "end" 結束的區段,以及在這些記號之間定義的所有內容。
      例如,"Metaclass MainLoopSTM32" 及以 "Property " 開始一直到 "end" 標籤那行為止的所有行,並將複製的環境重新命名為新的環境名稱。
      Subject C_CG
          	Metaclass <Environment>
      				Property Property1
      				Property Property2
      				Property Property3
      				…      
      			end
      		end
    3. 變更內容環境的定義。例如,C_CG:<NewEnvironment>:AdaptorSearchPath,以指向新的配接器目錄:<Install-Dir>Share\LangC\mxf\Adaptors\MainLoop\<NewTargetFolder>$OMROOT\LangC\mxf\Adaptors\MainLoop\<NewTargetFolder>
      註: NewTaregtFolder 是您已選取在檔案系統上代表目標的名稱。
  2. 為該目標建立新的目錄(如 AdaptorSearchPath 中所定義),並將現有配接器中的檔案複製到新目錄。建議選擇與您的目標最類似的目標,如 <Install-Dir>\Share\LangC\mxf\Adaptors\MainLoop\Stm32x
  3. 透過在檔案 RiCOSTarget.c 中實作函數 RiCOSMainTask_WaitStep(通常使用硬體計時器來完成),來定義主要迴圈的步驟。請參閱 $OMROOT\LangC\mxf\Adaptors\MainLoop\Stm32x\RiCOSTarget.c 作為參照。
  4. 在檔案 RiCOS.h 中,將 #include 陳述式新增至 RiCOSMainloop.h
  5. 對於支援進階作業系統 (OS) 服務(如 mutexes、TCP 等)的目標,置換檔案 RiCOSTargetServices.c\.h 中的相關配接器 API。

    檔案 RiCOSMainloop.c 中每個可置換的 API 都是由前置處理器巨集所包圍:"<function-name> Defined"(使用#ifndef… #endif 編譯器指引)。若要置換 API,請在檔案 RiCOSTargetServices.h 中定義此編譯器巨集,並在檔案 RiCOSTargetServices.c 中新增實作。例如,請參閱「目標配接器 <Install-Dir>\Share\LangC\mxf\Adaptors\MainLoop\Linux 中 API "RiCOSEventsPoolMutex_init" 的置換」。

  6. 若要啟用目標監視(即在目標上執行時,應用程式的背景動畫),請根據目標上可用的通訊(上行鏈結)修改檔案 TargetMonitorProtocol.c\.h。如果不支援目標監視,請移除這些檔案。
  7. 建議變更計時器校準,以將一毫秒表示為一個時間單位。預期的預設值是 1 毫秒延遲 tm(1)
    1. C_CG::Configuration::TimerManagerTimeCycle 內容,用於 MXF 配置檔範本 C_CG:Configuration:mxfCfgTemplate, #define RICTIMERMANAGER_TIME_CYCLE $<Time ManagerTimeCicle> 中。

      此內容的值可定義在步驟 (3) 中所定義之硬體計時器的週期。希望將此數字保持為儘可能小的數字(整數),以便容許最大範圍及解析的逾時。

    2. C_CG::Configuration::TimerManagerDefaultTickTime 內容,用於 MXF 配置檔範本 C_CG:Configuration:mxfCfgTemplate, #define RICTIMERMANAGER_DEFAULT_TICK_TIME $<TimeManagerTickTime> 中。

      根據硬體計時器定義,此值在 MXF 的 TimerManager 中用作每個 OSTimer 時間計數的增量值。「硬體計時器」代表在兩個連續的硬體計時器時間計數之間通過的時間單位數。

    3. OSTIMER_INIT() C-Macro 是在 RiCOS.h 中定義,RiCOS.h 可使用硬體特定計時器起始設定來定義「硬體計時器」相關計數器的起始值。
  8. 若要執行應用程式,請採用以下方式實作 RiCOSMainTask_WaitStep 函數:執行在 (7.b) 步驟中定義的持續時間「休眠」(代表 MXF 計時器可以區分的最短時間間隔)。

回饋