YS電子工作ラボ

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)
 
   
# # Application configuration file generated by # Microchip Harmony Configurator (MHC) from Harmony version: 1.04 # mainmenu "MPLAB Harmony & Application Configuration" menu "Application Configuration" config APP_INSTANCES int "Number of Applications" default 1 range 1 10 # Must limit to 10 or application templates will need to be updated. config APP_AUTO_GENERATE_CODE # Used by MHC internally to selectively auto-generate app.h, app.c, and main.c bool default n source "$HARMONY_VERSION_PATH/utilities/mhc/config/gencode/framework/global_event/config/global_event_gencode.hconfig" source "$HARMONY_VERSION_PATH/utilities/mhc/config/app_name_idx_gencode.ftl" 10 instances menu "Exception Handling" config USE_EXCEPTION_HANDLER bool "Use MPLAB Harmony Exception Handler Template?" default y ---help--- Enter 'Y' if you want to include an exception handler template (system_exceptions.c) in this system configuration. Enter 'N' if you do not. ---endhelp--- config EXCEPTION_USE_SYS_DEBUG bool "Use debug services in exception handler?" depends on USE_EXCEPTION_HANDLER default y ---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--- config EXCEPTION_BREAKPOINT bool "Hit breakpoint when an exception occurs?" depends on USE_EXCEPTION_HANDLER && EXCEPTION_USE_SYS_DEBUG default y ---help--- Enter 'Y' if you want the exception handler to hit a breakpoint when an exception occurs. Enter 'N' if you do not. Note: Only works if debugging is enabled. ---endhelp--- endmenu # Exception Handling #insert application specific configuration here endmenu # Application Configuration source "$HARMONY_VERSION_PATH/config/harmony.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"になる。
   

enum DRV_GFX_CONTROLLER_LIST
"Low Cost Controllerless" ||
"GLCD" ||
"Epson S1D13517" ||
"SSD1926" ||
"OTM2201A" ||
"Generic Customizable Driver" ||
"None"


config DRV_GFX_CONTROLLER_TYPE
string "Select Controller Type"
range DRV_GFX_CONTROLLER_LIST
default "GLCD" if USE_DRV_GFX_GLCD_NEEDED
default "Low Cost Controllerless" if USE_DRV_GFX_LCC_NEEDED
default "Epson S1D13517" if USE_DRV_GFX_S1D13517_NEEDED
default "SSD1926" if USE_DRV_GFX_SSD1926_NEEDED
default "OTM2201A" if USE_DRV_GFX_OTM2201A_NEEDED
default "Low Cost Controllerless"


config USE_DRV_GFX_S1D13517
bool
select DRIVER
default y if DRV_GFX_CONTROLLER_TYPE = "Epson S1D13517"
default n


config DRIVER
bool
 




  ■ 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 といった形式で保存されます。(下記の例参照)
   *.hconfig  *.mhcの保存値
例1
config DRV_GFX_CONTROLLER_TYPE
string "Select Controller Type"
range DRV_GFX_CONTROLLER_LIST
default "GLCD" if USE_DRV_GFX_GLCD_NEEDED
default "Low Cost Controllerless" if USE_DRV_GFX_LCC_NEEDED
default "Epson S1D13517" if USE_DRV_GFX_S1D13517_NEEDED
default "SSD1926" if USE_DRV_GFX_SSD1926_NEEDED
default "OTM2201A" if USE_DRV_GFX_OTM2201A_NEEDED
default "Low Cost Controllerless" 
MHCのメニューの保存値が"Epson S1D13517"の場合

CONFIG_DRV_GFX_CONTROLLER_TYPE="Epson S1D13517"
例2
config DRV_GFX_CONTROLLER_TYPE_CUSTOM1
string "Select Controller Type"
default "SSD1963_INT035"
CONFIG_DRV_GFX_CONTROLLER_TYPE_CUSTOM1="SSD1963_INT035"


 ・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
# Project name: 03_MZ10_ssd_ShowBtn_MHC
# Configuration: default
# Device: PIC32MZ2048EFH100
# Harmony version: 2.03
#
#
# from $HARMONY_VERSION_PATH\apps\_WK\Study203b\gfx1\03 MZ10 ssd ShowBtn MHC\firmware\03_MZ10_ssd_ShowBtn_MHC.hconfig
#
CONFIG_APP_INSTANCES=1
#
# from $HARMONY_VERSION_PATH\utilities\mhc\config\app_name_idx_gencode.ftl
#
CONFIG_APP_MENU_IDX0=y
CONFIG_APP_NAME_0="app"
CONFIG_APP_AUTO_GENERATE_CODE0=n
#
.....
.....
.....

CONFIG_USE_DRV_PMP=y
CONFIG_DRV_PMP_IMPL="STATIC"
CONFIG_DRV_PMP_MODE="PMP_MASTER_READ_WRITE_STROBES_INDEPENDENT"
CONFIG_DRV_PMP_CALC_DATASETUPTIME=18
CONFIG_DRV_PMP_CALC_DATAWAITTIME=82
CONFIG_DRV_PMP_CALC_DATAHOLDTIME=0
CONFIG_DRV_PMP_WAITSTATES_DATASETUP="PMP_DATA_WAIT_ONE"
CONFIG_DRV_PMP_WAITSTATES_STROBE="PMP_STROBE_WAIT_5"
CONFIG_DRV_PMP_WAITSTATES_DATAHOLD="PMP_DATA_HOLD_1" CONFIG_DRV_PMP_DATA_SIZE="PMP_DATA_SIZE_8_BITS"
CONFIG_DRV_PMP_READSTROBE_ENABLE=y
CONFIG_DRV_PMP_READSTROBE_POLARITY="PMP_POLARITY_ACTIVE_LOW"
CONFIG_DRV_PMP_WRITESTROBE_ENABLE=y
CONFIG_DRV_PMP_WRITESTROBE_POLARITY="PMP_POLARITY_ACTIVE_LOW"
CONFIG_DRV_PMP_ADDRESSPORT_ENABLE=n
#
# from $HARMONY_VERSION_PATH\framework\driver\rtcc\config\drv_rtcc.hconfig
#
CONFIG_USE_DRV_RTCC=n
#
# from $HARMONY_VERSION_PATH\framework\driver\sample\config\drv_sample.hconfig
#
CONFIG_USE_DRV_SAMPLE=n
.....
.....
   drv_gfx_ssd1926.c.ftl 抜粋(下記)
 
      
..... ..... uint8_t drvSSD1926_GetRegister(uint16_t index, uint8_t* data)
{
uint16_t myReadBuffer = 0xff;

BSP_DisplaySetOff(); // Set Address Line Low

<#if CONFIG_DRV_PMP_DATA_SIZE == "PMP_DATA_SIZE_8_BITS">
DRV_PMP0_Write(0x00);
DRV_PMP0_Write(index >> 8);
DRV_PMP0_Write(index);
<#elseif CONFIG_DRV_PMP_DATA_SIZE == "PMP_DATA_SIZE_16_BITS">
DRV_PMP0_Write(index >> 8);
DRV_PMP0_Write(index << 8);
</#if>

BSP_DisplaySetOn(); //Set Address Line Low

myReadBuffer = DRV_PMP0_Read();
DRV_PMP0_Read();
.....
.....

...

■ *.ftlファイルFreeMaker) for MHC  リファレンス
     
    *.ftlファイルの中はhconfig 言語とは全く違う、FreeMaker専用の言語が使用されています。

  ■  <#--/-->
     <#-- と -->で囲まれたテキストはコメント文となる。 行が変わってもOKです。   C言語の /* ......*/と同じです。
    (例) <#-- Hellow World !!-->


  ■ <#if >/ <#elseif >/ <#else>
     C言語の if /else if /else と同様な条件文が用意されています。

   (例)
<#if CONFIG_1 == "8_BITS">
DRV_PMP0_Write(0x00);
<#elseif CONFIG_1 == "16_BITS">
DRV_PMP0_Write(0x01);
<#else>
DRV_PMP0_Write(0x02);
</#if>


  ■<#macro (マクロ名) >/</#macro>
   <@(マクロ名)></@(マクロ名)>

   <#macro  マクロ名> …… </#macro> によって、 ……にマクロ名のマクロを定義できます。 このマクロを呼び出して実行する場合は
   <@(マクロ名)></@(マクロ名)>を用います。 省略して<@(マクロ名)/>としてもOKです。
   繰り返し使用する場合、制御文をわかり易くしたい場合などに使えます。

  (例1)
(定義部)
<#macro greet
<font size="+2">Hello Joe!</font> </#macro>


(呼び出し例1) <@greet></@greet>

(呼び出し例2) <@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)>
<#assign DRV_TOUCH_INT035_TASKS = "TASK_CALL_NO_RTOS">
</#if>


  ■ # (要注意)
   #は、予約記号ではありません。普通の文字として扱われます。 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
....
....

config ys_USE_GFX_INT035
bool
default y if DRV_GFX_DISPLAY_TYPE = "INT035 3.5-inch 320x240(QVGA)"
default n
....
....
ys_gfx_driver_def.c.ftl 

....
....

<#--追加 INT035の場合のif文-->
<#if CONFIG_ys_USE_GFX_INT035 = true>
<#include "/framework/gfx/driver/controller/int035/templates/ys_drv_gfx_int035_definition.ftl">
<@DRV_GFX_INT035_DRIVER_DEFINITION
ID = GFX_DRIVER_COUNT
IDX = 0/>
<#assign GFX_DRIVER_COUNT = GFX_DRIVER_COUNT + 1>
</#if>

....
....

 ■ システム関係ファイル(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
      など(他もあり)





■ hconfig言語 for MHC リファレンス

  ■  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
bool
(例2) シンボルUSE_GFX_DRV をデフォルト(n=0)のbool型に定義した場合
config USE_GFX_DRV
bool
default n

 例   ####### MHCトップの hconfigファイルへの追加文
source "$HARMONY_VERSION_PATH/apps/_WK/myResources/ys_hconfig/ys_HP/ys_Top.hconfig"

####### ys_Top.hconfig ファイル
menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n
endmenu
ソースコード 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 ファイル

menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n

comment "Please select your display."

# 1. A config option selected from a dropdown menu.
enum myCFG1_VAL
"display 1"
|| "display 2"
|| "display 3"

config myCFG0
depends on ys_HCONFIG_EXAMPLE
string "Graphics display"
range myCFG1_VAL
default "display 1"

comment "display1 is QVGA 320x240"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 1")

comment "display2 is WVGA 480x272"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 2")

comment "display3 is VGA 640x480"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 3")

config STR1
string "QVGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 1")


config STR2
string "WQVGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 2")

config STR3
string "VGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 3")


endmenu
  ソースコード  MHC実行結果




  ■ comment

構文    comment <prompt>
<comment options>
<prompt> 文字列 ……  " "に囲まれたテキスト文    (例) "Hellow World !!"   
<comment options> …… depneds on (X)    Xが真の場合表示、Xが偽の場合は非表示、複数併記可
 <機能> テキスト文を表示する。 depends on で表示に係る依存関係を指定できる。
例  
# ys_Top.hconfig ファイル

menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n

comment "Please select your display."

# 1. A config option selected from a dropdown menu.
enum myCFG1_VAL
"display 1"
|| "display 2"
|| "display 3"

config myCFG0
depends on ys_HCONFIG_EXAMPLE
string "Graphics display"
range myCFG1_VAL
default "display 1"

comment "display1 is QVGA 320x240"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 1")

comment "display2 is WVGA 480x272"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 2")

comment "display3 is VGA 640x480"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 3")

config STR1
string "QVGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 1")


config STR2
string "WQVGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 2")

config STR3
string "VGA"
depends on ys_HCONFIG_EXAMPLE
depends on (myCFG0 = "display 3")


endmenu
  ソースコード MHC実行結果




   ■ choice

構文    choice
<choice options>
<choice block>
endchoice
<choice options>
<choice block>
<機能>2個以上の項目から1個を排他的に選択する。  MHCではチェックボックスが使用されていますが、(Windowsのように)ラジオボタンの方が一般的にだと思われます。 将来、バージョンアップでラジオボタンになる?
例 
# ys_Top1.hconfig ファイル

menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n


choice
prompt "RS232C baud rate"
depends on ys_HCONFIG_EXAMPLE
default Baud2400

config Baud2400
bool "2400 bps"

config Baud9600
bool "9600 bps"

config Baud788K
bool "76.8K bps"
endchoice

endmenu
ソースコード MHC実行結果



   ■ prompt


構文 
config
  prompt [if <expr>]
<機能>
・メニュー項目の見出しの前に設定する。
・表示に条件があればif文で設定する。
例 
menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n


choice
prompt "RS232C baud rate"
depends on ys_HCONFIG_EXAMPLE
default Baud2400

config Baud2400
bool "2400 bps"

config Baud9600
bool "9600 bps"

config Baud788K
bool "76.8K bps"
endchoice

endmenu
 ソースコード  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 ファイル

menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n


config myCFG0
bool "exControl SW"
depends on ys_HCONFIG_EXAMPLE
default n


config myCFG100
int "Please set your year"
# depends on ys_HCONFIG_EXAMPLE && myCFG0
depends on ys_HCONFIG_EXAMPLE
depends on myCFG0
default 0

endmenu
ソースコード  MHC実行結果



■ select

構文  config <親symbol>
 select <子symbol> [if <expression>]
<全般>
・configのオプションです。
・bool と tristate に対してのみ使用可能である。
<機能>親シンボルがチェックされると 、条件[if <expression>]が満足されれば 子シンボルがセットされる。
例 
menu "<option> select"

config CONDITION_1
bool "Monitor is OK ?"
default n

config myINSTRUCTION
bool
default n

config USE_SHOW_myTEXT
bool "Show text ?"
select myINSTRUCTION if (CONDITION_1 = y)
default n

comment "Hellow World !!" depends on myINSTRUCTION

endmenu
起動直後
チェック
追加後
  <ソースコード>
(注)チェック後、 myINSTRUCTIONが 自動的にn→yに変化する
  <MHC実行後>



■ persistent

構文  config
persistent [if <expression>]
<全般>
・ configのオプションです。  commentでは使えません
・ マイクロチップが拡張したhconfig言語専用のコマンドです。
<機能>
・  薄く表示はされるが、マウス、キーボードからアクセスできない
・ if 文で条件をつけることができる
# ys_Top.hconfig ファイル

menu "ys_Configuration"

config ys_HCONFIG_EXAMPLE
bool "Use ys_Configuration ?"
default n
persistent

endmenu
 
ソースコード  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 File

File Name:
system_tasks.c

Summary:
This file contains source code necessary to maintain system's polled state
machines.

Description:
This file contains source code necessary to maintain system's polled state
machines. It implements the "SYS_Tasks" function that calls the individual
"Tasks" functions for all polled MPLAB Harmony modules in the system.

Remarks:
This file requires access to the systemObjects global data structure that
contains the object handles to all MPLAB Harmony module objects executing
polled in the system. These handles are passed into the individual module
"Tasks" functions to identify the instance of the module to maintain.
*******************************************************************************/

// DOM-IGNORE-BEGIN
/*******************************************************************************
Copyright (c) 2013-2015 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.
*******************************************************************************/
// DOM-IGNORE-END

<#include "/utilities/mhc/templates/freemarker_functions.ftl">
// *****************************************************************************
// *****************************************************************************
// Section: Included Files
// *****************************************************************************
// *****************************************************************************

#include "system_config.h"
#include "system_definitions.h"


// *****************************************************************************
// *****************************************************************************
// Section: System "Tasks" Routine
// *****************************************************************************
// *****************************************************************************

/*******************************************************************************
Function:
void SYS_Tasks ( void )

Remarks:
See prototype in system/common/sys_module.h.
*/

void SYS_Tasks ( void )
{
/* Maintain system services */
<#if LIST_SYSTEM_TASKS_C_CALL_SYSTEM_TASKS?has_content>
<@mhc_expand_list list=LIST_SYSTEM_TASKS_C_CALL_SYSTEM_TASKS/>
</#if>

/* Maintain Device Drivers */
<#if LIST_SYSTEM_TASKS_C_CALL_DRIVER_TASKS?has_content>
<@mhc_expand_list list=LIST_SYSTEM_TASKS_C_CALL_DRIVER_TASKS/>
</#if>

/* Maintain Middleware & Other Libraries */
<#if LIST_SYSTEM_TASKS_C_CALL_LIB_TASKS?has_content>
<@mhc_expand_list list=LIST_SYSTEM_TASKS_C_CALL_LIB_TASKS/>
</#if>

/* Maintain the application's state machine. */
<#if CONFIG_APP_IDX_0?has_content>
${CONFIG_APP_NAME_0?upper_case}_Tasks();
<#else>
App_Tasks();
</#if>
<#if CONFIG_APP_IDX_1?has_content>
<#if CONFIG_APP_IDX_1 == true>
${CONFIG_APP_NAME_1?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_2 == true>
${CONFIG_APP_NAME_2?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_3 == true>
${CONFIG_APP_NAME_3?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_4 == true>
${CONFIG_APP_NAME_4?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_5 == true>
${CONFIG_APP_NAME_5?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_6 == true>
${CONFIG_APP_NAME_6?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_7 == true>
${CONFIG_APP_NAME_7?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_8 == true>
${CONFIG_APP_NAME_8?upper_case}_Tasks();
</#if>
<#if CONFIG_APP_IDX_9 == true>
${CONFIG_APP_NAME_9?upper_case}_Tasks();
</#if>
</#if>
}


/*******************************************************************************
End of File
*/

system_tasks.c 抜粋(下記)

...
...

void SYS_Tasks ( void )
{
/* Maintain system services */
SYS_MSG_Tasks( (SYS_OBJ_HANDLE) sysObj.sysMsg0 );
SYS_TOUCH_Tasks(sysObj.sysTouchObject0);

/* Maintain Device Drivers */
DRV_TOUCH_ADC_Tasks(sysObj.drvTouchAdc);

// update the GFX Abstraction Layer
GFX_Update();



/* Maintain Middleware & Other Libraries */

// update the UI library
LibAria_Tasks();


/* Maintain the application's state machine. */
APP_Tasks();
}

... ...



 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 単独でもコメント文表示ができます。 ヘルプの文章の終わりはインデントのレベルで 決まります。つまり最初の行より少ないインデントの行で終わる
       ということです。

  


 MHCへの項目追加例           

 ■ INT035(グラフィック液晶)ライブラリ追加