1. 程式人生 > >KEIL-MDK的配置嚮導Configuration Wizard

KEIL-MDK的配置嚮導Configuration Wizard

問題

什麼是配置嚮導?它有什麼作用?

回答

配置嚮導是μVision最近新增的功能。它支援彙編器,C或偵錯程式初始化檔案的選單驅動配置。配置嚮導使用嵌入到配置檔案註釋中的控制元件項來構建這些選單。

MDK-ARM工具廣泛使用指令碼檔案,這些選單為使用者提供了一種顯示和修改指令碼和初始化檔案設定的簡便方法。

先看看圖片,有個直觀的感受:

Configuration Wizard Example

就是在程式碼裡面嵌入一些特定的註釋,KEIL-MDK可以將其“翻譯”為圖形使用者介面,以便在其中方便地更改配置。

啟用配置嚮導

1,註釋中必須包括以下特定內容,才能啟用配置嚮導。該註釋必須放在程式碼檔案的前100行以內。

// <<< Use Configuration Wizard in Context Menu >>>

2,可以新增以下注釋 ,以結束配置嚮導。此項是可選的。

// <<< end of configuration section >>>

分組語法

分組標題

使用<h>和</h>來標識一個分組。在配置嚮導中可以摺疊。

<h>
...
</h>

例如:

// <h> External Bus Interface (EBI)
//   <e1.13> Enable Chip Select 0 (CSR0)
//   </e>
//   <e1.13> Enable Chip Select 1 (CSR1)
//   </e>
// </h>

實現的效果為:

點選“+”可以展開,展開後的效果為:

使能標題

使用<e>和</e>來標識一個分組,並且該分組可以整體被使能/禁止。在配置嚮導中既可以摺疊,也可以使能/禁止。

<e>
...
</e>

例如:

//     <e1.5>      WSE: Enable Wait State Generation
//       <o1.2..4>   NWS: Number of Standard Wait States <1-8><#-1>
//     </e>

實現的效果為:當勾選標題行時,組內的內容正常顯示,可以編輯:

當取消選擇標題行時,組內的內容變灰,不能編輯:

幫助提示

<i> 表示對上一個配置項的提示。可以有多行。

// <i> Use MY_CPU_VARIANT, and set the include file

顯示效果為:

編輯配置項的值

預設情況下,可以在圖形使用者介面中更改相應的註釋項後面的第一個數值。 例如,在註釋中配置:

// <o> Program Entry Point
  PC = 0x04000000;

實現的效果為:

圖形使用者介面中的專案標題為<o>後面的文字內容,修改項為註釋後面的第一個數字。

可以在圖形使用者介面中編輯該配置項的值,比如,改為0x04008000

編輯後,程式碼中的值也會隨即改變。

跳過N個值

註釋中也可以配置為“跳過”接下來的N個值。比如:

//     <o1.9..11>  TDF: Data Float Output Time <0-7>
//                 <i> Number of Cycles Added after the Transfer
//   </e>
  _WDWORD(0xFFE00000, 0x01002489);   // EBI_CSR0: Flash

由於<o>後面有個數字1,則表示它編輯的數字要先跳過1個,即,此時編輯後,受影響的值不是_WDWORD函式的第一個引數,而是第二個引數。

編輯某些位

比如上例中,q1.4中的“.4"表示編輯數值的第4位(從bit0開始)。

也可以編輯連續多個位。比如下圖中<o1.9..11>中的”9..11“則代表編輯數字的第9位~第11位。

//     <o1.9..11>  TDF: Data Float Output Time <0-7>
//                 <i> Number of Cycles Added after the Transfer

  _WDWORD(0xFFE00004, 0x04003485);   // EBI_CSR1: RAM

在圖形使用者介面中,把0x02改為0x03:

程式碼中的數值也由0x04003485變為0x04003685:

資料項的編輯型別

數值型:<o>

數值型的修改項可以指定數值的範圍

可以指定數值範圍中的步長則表示有效範圍為:0x00000000 ~ 0xFFF0 0000,並且以0x10 0000為單位進行步進。顯示 為十六進位制。

可以設定為列舉型

顯示效果為:

在使用使用者輸入的數字之前,可以對輸入項進行運算,再合併到被修改項。支援加減乘除4種運算。格式舉例:

  • <#+1>
  • <#-1>
  • <#*8>
  • <#/5>

例如:

表示,NWS: Number of Standard Wait States的使用者可輸入範圍為1-8(小於1則取值為1,大於8則取值為8),最終合併到數值之前需要將使用者輸入的數字減去1。

比如,輸入8時:

程式碼中的數字變為0x040036BD:其中第2~4位為7(0b111) (0xBD = 0b1011 1101)

選擇型:<q>

例如,

//   <q1.4>        DRP: Data Read Protocol
//                      <0=> Standard Read
//                      <1=> Early Read
  _WDWORD(0xFFE00024, 0x00000010);   // EBI_MCR:  Data Read Protocol

在圖形使用者介面中的顯示效果為一個”複選框“: 。選中為1,取消選中為0.

取消勾選後,_WDWORD函式的第二個函式由0x00000010變為0x00000000了。

字串型:<s>

// <s> Change ID
// <s1.30> Change Password String
#define ID  "My User ID"
char pw[] = "My Password";

其中<s1.30>表示跳過一個字串(編輯第二個字串”My Password"),最大長度為30,顯示效果為:

程式碼型:<c></c>

// <c1> Use MY_CPU_VARIANT
// <i> Use MY_CPU_VARIANT, and set the include file
#define MY_CPU_VARIANT
#include "MyCpuVariant.h"
// </c>

顯示效果為:

取消勾選後,程式碼內容變為:

還可以使用<!c>和</c>語法來標記程式碼段,與<c>...</c>的區別是,勾選後程式碼被註釋;取消勾選後程式碼有效。

參考

官方幫助:

例程全部程式碼:

//*** <<< Use Configuration Wizard in Context Menu >>> ***


FUNC void Setup (void) {

// <h> External Bus Interface (EBI)

//   <e1.13> Enable Chip Select 0 (CSR0)
//     <o1.20..31> BA: Base Address <0x0-0xFFF00000:0x100000><#/0x100000>
//                 <i> Start Address for Chip Select Signal
//     <o1.7..8>   PAGES: Page Size      <0=> 1M Byte    <1=> 4M Bytes
//                                       <2=> 16M Bytes  <3=> 64M Bytes
//                 <i> Selects Active Bits in Base Address
//     <o1.0..1>   DBW: Data Bus Width   <1=> 16-bit     <2=> 8-bit
//     <o1.12>     BAT: Byte Access Type <0=> Byte-write
//                                       <1=> Byte-select
//     <e1.5>      WSE: Enable Wait State Generation
//       <o1.2..4>   NWS: Number of Standard Wait States <1-8><#-1>
//     </e>
//     <o1.9..11>  TDF: Data Float Output Time <0-7>
//                 <i> Number of Cycles Added after the Transfer
//   </e>
  _WDWORD(0xFFE00000, 0x010024A9);   // EBI_CSR0: Flash

//   <e1.13> Enable Chip Select 1 (CSR1)
//     <o1.20..31> BA: Base Address <0x0-0xFFF00000:0x100000><#/0x100000>
//                 <i> Start Address for Chip Select Signal
//     <o1.7..8>   PAGES: Page Size      <0=> 1M Byte    <1=> 4M Bytes
//                                       <2=> 16M Bytes  <3=> 64M Bytes
//                 <i> Selects Active Bits in Base Address
//     <o1.0..1>   DBW: Data Bus Width   <1=> 16-bit     <2=> 8-bit
//     <o1.12>     BAT: Byte Access Type <0=> Byte-write
//                                       <1=> Byte-select
//     <e1.5>      WSE: Enable Wait State Generation
//       <o1.2..4>   NWS: Number of Standard Wait States <1-8><#-1>
//     </e>
//     <o1.9..11>  TDF: Data Float Output Time <0-7>
//                 <i> Number of Cycles Added after the Transfer
//   </e>
  _WDWORD(0xFFE00004, 0x040034A5);   // EBI_CSR1: RAM

//   <q1.4>        DRP: Data Read Protocol
//                      <0=> Standard Read
//                      <1=> Early Read
  _WDWORD(0xFFE00024, 0x00000010);   // EBI_MCR:  Data Read Protocol

  _WDWORD(0xFFE00020, 0x00000001);   // EBI_RCR:  Remap Command

// </h>

// <o> Program Entry Point
  PC = 0x04000000;

}

// <s> Change ID
// <s1.30> Change Password String
#define ID  "My User ID"
char pw[] = "My Password";


/*********************************************************/
/*  Example for enabling and disabling code              */

// <c1> Use MY_CPU_VARIANT
// <i> Use MY_CPU_VARIANT, and set the include file
#define MY_CPU_VARIANT
#include "MyCpuVariant.h"
// </c>

// <!c1> Disable log
// <i> Disable log file generation
#define _USE_LOG
// </c>

// <c1>  Example of inconsistent comment
// <i> a mix of commented and uncommented lines in the block create an inconsistency

// This type of comment, mixed with uncommented lines, creates the inconsistency
/* You can use this type of comment without creating an inconsistency */

   do_whatever;              // adding this type of comment here is allowed

// </c>


//*** <<< end of configuration section >>>    ***

配置嚮導註釋說明:

專案  跳過  文字  描述
<c> § 程式碼啟用:建立一個複選框以取消註釋或註釋程式碼。當您禁用複選框時,所有行(包括帶有空格的行)都會在第一個找到的字元處新增雙斜槓(//)註釋。配置嚮導中的紅色文字表示不一致。不要巢狀此專案。
<!c> § 程式碼禁用:建立一個複選框以註釋或取消註釋程式碼。當您啟用複選框時,所有行(包括帶有空格的行)都會在第一個找到的字元處新增雙斜槓(//)註釋。配置嚮導中的紅色文字表示不一致。不要巢狀此專案。
</c> 以<c>或<!c>開頭的程式碼啟用/禁用塊結束。
<h> 標題:以下選項屬於一個組。
<e> § 標題為啟用:以下選項屬於一個組,可以通過複選框啟用。
<e.4> § 標題為啟用:修改特定位(在本例中為第4位)。
</h>或</e> 標題或啟用結束。
<i> 前一項的工具提示幫助。
<q> § 可通過複選框設定的位值選項。
<o> § 帶選擇或數字輸入的選項。
<o.4..5> § 修改位範圍(例如:位4到5)。
<o.4> § 修改單個位(例如:位4)。
<s> § 帶ASCII字串條目的選項。
<s.10> § 帶ASCII字串條目的選項,大小限制為10個字元。
<0-31> 選項欄位的值範圍。
<0-100:10> 選項欄位的值範圍,步長為10。
<0x40-40x1000:0x10> 十六進位制格式的值範圍,步長為0x10。
<0=> 值和文字供選擇。

<#+1>

<#-1>

<#*8>

<#/3>

數字合併到欄位之前的值修改(加,減,乘,除)。