hconfig ファイル for MHC メモ
<注意>hcofig学習過程でのメモです。メインテもしていません。間違いも多いと思いますのでご自分でよく検証してください。
■ 全般
・ MHCの画面は、hconfigファイルに記載されているテキストをもとに生成されています。 ・ 使用されている言語は Linux のKconfig language (日本語)をベースにして、マイクロチップが拡張したhconfig言語です。 ・ MPLAB Harmony Help のVolume II: MPLAB Harmony Configurator (MHC) > MPLAB Harmony Configurator Developer's Guide にhconfigファイルに関連する記述があります。 (→ URL) ・ MHCの設定追加により生成したドライバー等のフォルダやファイルは MHCでその設定を削除(解除)して"generate(生成)"を行っても自動的には削除されずに残っています。 したがってこれらのフォルダやファイルを削除したい場合はWindowsのエクスプローラで削除する必要があります。 尚、プロジェクトツリーは、MHCの設定どうりとなります。 |
■ 構成
■トップのhconfigファイル ・MHCはトップのhconfigファイルを起点として、細目に係る記載をするhconfigファイルを呼び出すツリー構造になっています。 ・MHCで使用されるhconfigファイルのトップは プロジェクトファイルの firmwareフォルダ直下に生成され、ファイル名は プロジェクト名.hconfig と命名されます 。 下記の例は プロジェクト名がmyTest1の場合です。 "C:\microchip\harmony\v2_03b\apps\_WK\Study203b\gfx2\myTest1\firmware\myTest1.hconfig" 尚、プロジェクト名の中に半角のスペースが含まれると_に変換されます。 (例)プロジェクト名:"myTest1 234" → "myTest1_234.hconfig" ・トップのhconfigファイルの内容は、下記に示すように プロジェクトに関係なく同じです。 ・sourceではじまるコード命令(太字の行)により、パスで指定されたツリー下部のhconfigファイルlファイルが呼び出されています。 |
|
<トップのhconfigファイル>(myTest1.hconfig) | |
|
|
<上記hconfigの実行結果(MHC画面)> | |
![]() |
■ プログラムの流れ |
|||
以下の例のようにシンボルの値がMHCからのアクションにより順次変化する形でプロセスが進行するインタプリタです。。 ① MHCのメニューリストDRV_GFX_CONTROLLER_LIST(アイテムの型名: 文字列型)から "Epson S1D13517" を選択する ② シンボルDRV_GFX_CONTROLLER_TYPEに"Epson S1D13517"の値が(MHCエンジンにより)セットされる。 ③ シンボル USE_DRV_GFX_S1D13517のif DRV_GFX_CONTROLLER_TYPE = "Epson S1D13517"が条件に合致するのでUSE_DRV_GFX_S1D13517が"y"になる。 ④ また、select DRIVERにより、DRIVERが"y"になる。 |
|||
|
■ hconfigファイルの場所
hconfigファイルは、MHCの場合 トップのhconfigファイル以外はすべて各フォルダの"config"フォルダの中に置かれています。
(例) "C:\microchip\harmony\v2_03b\utilities\mhc\config\harmony.hconfig"
"C:\microchip\harmony\v2_03b\framework\config\framework.hconfig"
"C:\microchip\harmony\v2_03b\framework\driver\config\driver.hconfig"
"C:\microchip\harmony\v2_03b\framework\driver\adc\config\drv_adc.hconfig"
■ *.ftl ファイル(テンプレートファイル)
hconfig 言語から FreeMakerで ドライバーファイルを生成したりします。 ファイル生成に於いてあらかじめファイルの雛形をつくっておいて、これとユーザのMHCでの選択を組み合わせて所要のファイルが生成されます。 この場合雛形となるファイルが拡張子がftlの *.ftl です。 通常 template フォルダや config フォルダ下に置かれています。 | |
(例) <#-- /******************************************************************************* ADC Driver Interrupt Handler Template File File Name: drv_adc_int.s Summary: This file contains source code necessary to initialize the system. Description: This file contains source code necessary to initialize the system. It implements the "SYS_Initialize" function, configuration bits, and allocates any necessary global system resources, such as the systemObjects structure that contains the object handles to all the MPLAB Harmony module objects in the system. *******************************************************************************/ /******************************************************************************* Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved. Microchip licenses to you the right to use, modify, copy and distribute Software only when embedded on a Microchip microcontroller or digital signal controller that is integrated into your product or third party product (pursuant to the sublicense terms in the accompanying license agreement). You should refer to the license agreement accompanying this Software for additional information regarding your rights and obligations. SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS. *******************************************************************************/ --> <#if (CONFIG_PIC32MZ == true) && (CONFIG_DRV_ADCHS_INTERRUPT_MODE == true)> /* ADC Interrupt */ <@RTOS_ISR VECTOR = CONFIG_INT_VECT_ADC NAME = "DrvAdc" PRIORITY = CONFIG_DRV_ADCHS_INTERRUPT_PRIORITY/> </#if> <#if (CONFIG_PIC32MX == true) && (CONFIG_DRV_ADC_INTERRUPT_MODE == true)> /* ADC Interrupt */ <@RTOS_ISR VECTOR = CONFIG_INT_VECT_ADC NAME = "DrvAdc" PRIORITY = CONFIG_DRV_ADC_INTERRUPT_PRIORITY/> </#if> <#-- /******************************************************************************* End of File */ --> |
■ MHC設定値の保存場所/*.mhcファイル
・MHCの設定は デフォルトでは、プロジェクトファイルの\firmware\src\system_config\default\default.mhcファイルに保存されます。 (例:フルパス表示) "C:\microchip\harmony\v2_03b\apps\_WK\Study203b\gfx2\myTest1\firmware\src\system_config\default\default.mhc" 尚、MHCから生成されたプロジェクトファイル情報は 1. 主としてプロジェクトのビルト、コンパイル情報、プロジェクトファイルの\firmware\src\system_config\default\configuration.xmlファイルに 保存されます。 (例:フルパス表示) "C:\microchip\harmony\v2_03b\apps\_WK\Study203b\gfx2\myTest1\firmware\src\system_config\default\configuration.xml" 2. また、プロジェクトのツリー構成情報は\firmware\myTest1.X\nbproject\configurations.xmlファイルに保存されます。 (例:フルパス表示) "C:\microchip\harmony\v2_03b\apps\_WK\Study203b\gfx2\myTest1\firmware\myTest1.X\nbproject\configurations.xml" ・*.mhcファイルは保存すると以前保存していた内容はすべて消去して、最終の内容だけが保存されます。 ・保存は configの内容がCONFIG_XXXXXXXX といった形式で保存されます。(下記の例参照)
・default .mhcの値が *.ftlの中で使用されたりします。(下記の例参照) 下記青字のdefault.mhcのCONFIG_DRV_PMP_DATA_SIZE="PMP_DATA_SIZE_8_BITS"は drv_gfx_ssd1926.c.ftlの中で使用されています。 |
||||||||||
(例 default.mhc 抜粋 )(下記) | ||||||||||
## Configuration generated by Microchip Harmony Configurator (MHC) v2.0.3.0 |
||||||||||
drv_gfx_ssd1926.c.ftl 抜粋(下記) | ||||||||||
... |
■ *.ftlファイル(FreeMaker) for MHC リファレンス
*.ftlファイルの中はhconfig 言語とは全く違う、FreeMaker専用の言語が使用されています。
■ <#--/-->
<#-- と -->で囲まれたテキストはコメント文となる。 行が変わってもOKです。 C言語の /* ......*/と同じです。
(例) <#-- Hellow World !!-->
■ <#if >/ <#elseif >/ <#else>
C言語の if /else if /else と同様な条件文が用意されています。
(例)
<#if CONFIG_1 == "8_BITS"> |
■<#macro (マクロ名) >/</#macro>
<@(マクロ名)></@(マクロ名)>
<#macro マクロ名> …… </#macro> によって、 ……にマクロ名のマクロを定義できます。 このマクロを呼び出して実行する場合は
<@(マクロ名)></@(マクロ名)>を用います。 省略して<@(マクロ名)/>としてもOKです。
繰り返し使用する場合、制御文をわかり易くしたい場合などに使えます。
(例1)
(定義部) <#macro greet |
(例2) (定義部) <#macro DRV_GFX_SSD1926_DRIVER_DEFINITION ID IDX> GFX_DriverInterfaces[${ID}].infoGet = &driverSSD1926InfoGet; GFX_DriverInterfaces[${ID}].contextInitialize = &driverSSD1926ContextInitialize; </#macro> (呼び出し) <@ DRV_GFX_SSD1926_DRIVER_DEFINITION ID IDX/> |
■ <#assign >
指定する。
<#assign GFX_DRIVER_COUNT = GFX_DRIVER_COUNT + 1>
■ ${(変数名)}
"${(変数名)}"という記述で変数にアクセスできます。 (例) IDと云う変数名の場合: ${ID}
■ ?has_content
シンボルに何か設定があるか否かを調べる。 設定内容があればtrueを、なければfalseを返す。
<#if !(DRV_TOUCH_INT035_TASKS?has_content)> |
■ # (要注意)
#は、予約記号ではありません。普通の文字として扱われます。 hconfig言語やKcofig言語では 行に#があると以下の行の文字が
すべてコメント文となりますが
FreeMakerの*.ftl文では 数字やアルファベットと同様のただの記号です。 MHCの場合 hconfig文から*.ftlを呼び出すので勘違いして
#を使わないように注意が必要です。
■ hconfigファイルのシンボル使用方法
hcongファイルのシンボルをftlファイルで使用する場合は CONFIG_を追加する。
(例) ys_USE_GFX_INT035 → CONFIG_ys_USE_GFX_INT035
ファイル名 | ソースコード |
ys_drv_gfx_display_types.hconfig |
.... |
ys_gfx_driver_def.c.ftl |
|
■ システム関係ファイル(system_*.h, system_*.c)のftlファイルがあるフォルダ
フォルダ | "C:\microchip\harmony\v2_03b\utilities\mhc\templates\app\system_config" |
ファイル名 | system_config.h.ftl system_definitions.h.ftl system_exceptions.c.ftl system_init.c.ftl system_interrupt.c.ftl system_tasks.c.ftl など(他もあり) |
■ menu/endmenu
構 文 |
menu <string> ... ... endmenu |
|
<string> 文字列 …… "my Added item" | ||
<機能> ・ メニューのブロックを定義する。 メニュー項目<string>を表示する ・ 項目開始の宣言に係る予約語です。必ずemdmenuで終わる文法となっている。 尚、システム全体の開始はmainmenuが用いられ、endmenuで終わる文法となっている。 |
||
例 | ####### MHCトップの hconfigファイルへの追加文
source "$HARMONY_VERSION_PATH/apps/_WK/myResources/ys_hconfig/ys_HP/ys_Top.hconfig" |
![]() |
####### ys_Top.hconfig ファイル # ys_Top.hconfig ファイル menu "ys_Configuration" endmenu |
||
ソースコード | MHC実行結果 |
■ ifblock /endif
構 文 |
ifbolck <expr> ... ... endif |
<機能> <expr>が真であれば endifまでが実行される | |
例 | ifblock USE_GFX_STACK add "<#include \"/framework/gfx/config/gfx_init.c.ftl\">" to list SYSTEM_INIT_C_SYS_INITIALIZE_DRIVERS file GFX_H "$HARMONY_VERSION_PATH/framework/gfx/hal/gfx.h" to "$PROJECT_HEADER_FILES/framework/gfx/hal/gfx.h" endif |
■ config
構文 |
config <symbol> <config option> |
|
<symbol> : ・ シンボルの名称、通常アルファベット大文字英数と_(アンダーバー)、 config の後の空白後に記載 ・ 全hconfig文でユニークであること。 重複すると実行時に表示可能であれば表示されるが outputに赤字でエラーがでる。 |
||
<機能>項目の諸元を定義する。 | ||
<config option> ① 型名 + 文字列: bool int hex string tristate + " " でくくられる文字列、 文字列は 文字列はチェックボックスや記入ボックスの脇に表示される。 ② 条件: depend on (config オプション名A) …… configオプション名Aが選択された場合に このconfig オプションは表示される。 range XXX YYY ……指定できる数値範囲の設定 (range 1 10 …… 設定できる数値範囲 1~10) ③デフォルト: default XXXX …… デフォルトでの状態を指定 型によって、XXXXは異なる。 (bool 型の場合 y or n 、int 型の場合 0,1,2,3,..... など) ④true/false: persistent …… 薄く表示はされるが、マウス、キーボードからアクセスできない (例1)シンボル CNF0をbool 型に定義した場合 config CNF0(例2) シンボルUSE_GFX_DRV をデフォルト(n=0)のbool型に定義した場合 config USE_GFX_DRV |
||
例 | ####### MHCトップの hconfigファイルへの追加文
source "$HARMONY_VERSION_PATH/apps/_WK/myResources/ys_hconfig/ys_HP/ys_Top.hconfig" |
![]() |
####### ys_Top.hconfig ファイルmenu "ys_Configuration" |
||
ソースコード | MHC実行結果 |
■ source
構文 |
source <prompt> |
<prompt> 呼び出されるファイル(含むファイルパス) | |
<機能>・指定した設定ファイルを読み込む ・フォルダーの区切りは/を用いる |
|
例 | ####### MHCトップの hconfigファイルへの追加文
source "$HARMONY_VERSION_PATH/apps/_WK/myResources/ys_hconfig/ys_HP/ys_Top.hconfig" |
■ enum
構文 | "enum" <enum set name> [exclusive] <string> [|| <string>]... | |
<全般>マイクロチップが拡張したhconfig言語専用のコマンドです。 <機能>ドロップダウンメニューの被選択項目群を定義する。 |
||
例 |
# ys_Top.hconfig ファイル |
![]() |
![]() |
||
![]() |
||
ソースコード | MHC実行結果 |
■ comment
構文 | comment <prompt> <comment options> |
|
<prompt> 文字列 …… " "に囲まれたテキスト文 (例) "Hellow World !!" | ||
<comment options> …… depneds on (X) Xが真の場合表示、Xが偽の場合は非表示、複数併記可 | ||
<機能> テキスト文を表示する。 depends on で表示に係る依存関係を指定できる。 | ||
例 |
# ys_Top.hconfig ファイル |
![]() |
![]() |
||
![]() |
||
ソースコード | MHC実行結果 |
■ choice
構文 | choice <choice options> <choice block> endchoice |
|
<choice options> | ||
<choice block> | ||
<機能>2個以上の項目から1個を排他的に選択する。 MHCではチェックボックスが使用されていますが、(Windowsのように)ラジオボタンの方が一般的にだと思われます。 将来、バージョンアップでラジオボタンになる? | ||
例 |
# ys_Top1.hconfig ファイル |
![]() |
ソースコード | MHC実行結果 |
■ prompt
構文 |
config prompt [if <expr>] |
|
<機能> ・メニュー項目の見出しの前に設定する。 ・表示に条件があればif文で設定する。 |
||
例 |
menu "ys_Configuration" |
![]() |
ソースコード | MHC実行結果 |
■ depends on
構文 | config/comment depends on <演算式> |
|
<全般> config、commentのオプションです。 <機能> ・ config や comment で依存を定める。 すなわちconfig や comment のアイテムの表示条件を定める。 ・ <演算式> config のシンボル項目やenum の列挙項目を &&, ||, =, ! などの演算子を用い 依存に係る演算をできる。 (例1)depends on CFG1 && CFG2 (例2)depends on (CFG1 = "Hellow World") 但し、CFG1、CFG2はconfig のシンボル項目 |
||
例 |
# ys_Top.hconfig ファイル |
![]() |
![]() |
||
ソースコード | MHC実行結果 |
■ select
構文 | config <親symbol> select <子symbol> [if <expression>] |
||
<全般> ・configのオプションです。 ・bool と tristate に対してのみ使用可能である。 <機能>親シンボルがチェックされると 、条件[if <expression>]が満足されれば 子シンボルがセットされる。 |
|||
例 |
menu "<option> select" |
起動直後 | ![]() |
チェック 追加後 |
![]() |
||
<ソースコード> (注)チェック後、 myINSTRUCTIONが 自動的にn→yに変化する |
<MHC実行後> |
■ persistent
構文 | config persistent [if <expression>] |
|
<全般> ・ configのオプションです。 commentでは使えません ・ マイクロチップが拡張したhconfig言語専用のコマンドです。 <機能> ・ 薄く表示はされるが、マウス、キーボードからアクセスできない ・ if 文で条件をつけることができる |
||
例 |
# ys_Top.hconfig ファイル |
![]() |
ソースコード | MHC実行結果 |
■ range
構 文 |
"range" <enum set name> ["if" <expr>] |
<全般> ・ ・ マイクロチップが拡張したhconfig言語専用のコマンドです。 <機能>値の設定可能範囲を設定する。 |
|
例 |
config APP_INSTANCES int "Number of Applications" default 1 range 1 10 #整数の設定範囲は 1 ~10の範囲となる。 |
■ add
構 文 |
add "<#include \".......*.ftl\">" to list XXXXXXX |
<機能> ftlファイルの内容の一部を関数のある部分に追加(コピー)することに係る処理の中間的なことを行う。 どこに追加するかについては list 以下のシンボルで一意的に指定される。 |
|
例 | add "<#include \"/framework/gfx/config/gfx_tasks.c.ftl\">" to list SYSTEM_TASKS_C_CALL_DRIVER_TASKS → ソースコードをgenerateすると GFX_Update( )がsystem_tasks( )のvoid SYS_Tasks ( void )の中に生成されます。 <補遺> ・ 下記例では SYSTEM_TASKS_C_CALL_DRIVER_TASKSだけでsystem_tasks.cを生成するテンプレートファイルgfx_tasks.c.ftlのSYS_tasks(void)の<#if LIST_SYSTEM_TASKS_C_CALL_DRIVER_TASKS?has_content></#if>の記述がある部分に追加される。 ・ <#if LIST_SYSTEM_TASKS_C_CALL_DRIVER_TASKS?has_content></#if> → リストの中に、SYSTEM_TASKS_C_CALL_DRIVER_TASKSがあれば 以下にaddで指定される内容を記述せよ |
"C:\microchip\harmony\v2_03b\framework\gfx\config\gfx_tasks.c.ftl" の抜粋(下記) | |
<#-- /**************************************************************/ --> // update the GFX Abstraction Layer GFX_Update(); <#-- /******************************************************************************* End of File */ --> |
|
"C:\microchip\harmony\v2_03b\utilities\mhc\templates\app\system_config\system_tasks.c.ftl"(下記) | |
/******************************************************************************* |
|
system_tasks.c 抜粋(下記) | |
... ... void SYS_Tasks ( void ) |
■ file
構 文 |
"file" <file name> <file path> [to <project logical path>] ["if" <expr>] |
<全般>マイクロチップが拡張したhconfig言語専用のコマンドです。 <機能>プロジェクトに<file name> のファイルを追加する。 プロジェクトのファイルパスが具体的に明示された場合はコピーを行う。 <file name> は仮名、代用でもよい。(?) <file name>は 動作に影響を与えない |
|
例 |
file GFX_H "$HARMONY_VERSION_PATH/framework/gfx/hal/gfx.h" to "$PROJECT_HEADER_FILES/framework/gfx/hal/gfx.h" |
■ template
構 文 |
"template" <template name> <template file path> to <project logical path> ["if" <expr>] | |
<全般>マイクロチップが拡張したhconfig言語専用のコマンドです。 <機能><template name> のテンプレートファイルをFileMakerのtemplate ファイルとして処理して<project logical path> に保存する。 <注意> コメントラインに日本語(シフト JIS)を使用すると文字化けします。(例2参照) 日本語に対応していないFreeMakerを使用する為でしょう。 fileは文字化けが発生しないので fileで足る場合はfileを代用する方法があります。 |
||
例1 |
template GFX_CONFIG_H "$HARMONY_VERSION_PATH/framework/gfx/hal/templates/gfx_config.h.ftl" to "$PROJECT_HEADER_FILES/app/system_config/$CONFIGURATION/framework/gfx/hal/gfx_config.h" |
|
例2 |
template DRV_GFX_INT035_C "$HARMONY_VERSION_PATH/framework/gfx/driver/controller/int035/templates/ys_drv_gfx_int035.c.ftl" to "$PROJECT_SOURCE_FILES/app/system_config/$CONFIGURATION/framework/gfx/driver/controller/int035/ys_drv_gfx_int035.c" |
|
![]() |
![]() |
|
ys_drv_gfx_int035.c.ftl | ys_drv_gfx_int035.c. |
■ コメントアウト文
・ Kconfig 文の中で #があると 以降の文字列が実行と関係なくなります。 C言語の // と同じ機能をはたします。
(例) # Application configuration file generated by
# Microchip Harmony Configurator (MHC) from Harmony version:
1.04
・ ---help--- と ---endhelp---で囲まれる文字列は実行と関係なくなります。
(例) ---help---
Enter 'Y' if you want the exception handler
to use the SYS_DEBUG service to report
exception information. Enter 'N' if you do not.
---endhelp---
・ help 単独でもコメント文表示ができます。 ヘルプの文章の終わりはインデントのレベルで 決まります。つまり最初の行より少ないインデントの行で終わる
ということです。