Sync inav to Gitea
Make sure docs are updated / settings_md (push) Canceled after 0s
Build firmware / test (push) Canceled after 0s
Build firmware / build-SITL-Windows (push) Canceled after 0s
Build firmware / build-SITL-Mac (push) Canceled after 0s
Build firmware / build-SITL-Linux (push) Canceled after 0s
Build firmware / build-SITL-Linux-arm64 (push) Canceled after 0s
Build firmware / upload-artifacts (push) Canceled after 0s
Build firmware / build-single-target (push) Canceled after 0s
Build firmware / build (9) (push) Canceled after 0s
Build firmware / build (8) (push) Canceled after 0s
Build firmware / build (7) (push) Canceled after 0s
Build firmware / build (6) (push) Canceled after 0s
Build firmware / build (5) (push) Canceled after 0s
Build firmware / build (4) (push) Canceled after 0s
Build firmware / build (3) (push) Canceled after 0s
Build firmware / build (2) (push) Canceled after 0s
Build firmware / build (14) (push) Canceled after 0s
Build firmware / build (13) (push) Canceled after 0s
Build firmware / build (12) (push) Canceled after 0s
Build firmware / build (11) (push) Canceled after 0s
Build firmware / build (10) (push) Canceled after 0s
Build firmware / build (1) (push) Canceled after 0s
Build firmware / build (0) (push) Canceled after 0s
Build firmware / detect (push) Canceled after 0s
Build pre-release / build (push) Canceled after 0s
Build pre-release / Release (push) Canceled after 0s

This commit is contained in:
2026-08-03 16:37:40 +08:00
commit dac37fd077
14095 changed files with 5603119 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

@@ -0,0 +1,439 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Algorithm Functions</title>
<title>CMSIS-Pack: Algorithm Functions</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('algorithmFunc.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Algorithm Functions </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Blank Check</p>
<p>The following functions are available for creating new Flash programming algorithms: </p>
<table class="doxtable">
<tr>
<th>Function Name </th><th>Indication </th><th>Description </th></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#BlankCheck">BlankCheck</a> </td><td>optional </td><td>Check and compare patterns. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#EraseChip">EraseChip</a> </td><td>optional </td><td>Delete entire Flash memory content. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#EraseSector">EraseSector</a> </td><td>mandatory </td><td>Delete Flash memory content of a specific sector. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#Init">Init</a> </td><td>mandatory </td><td>Initialize and prepare device for Flash programming. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#ProgramPage">ProgramPage</a> </td><td>mandatory </td><td>Write the application into the Flash memory. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#UnInit">UnInit</a> </td><td>mandatory </td><td>De-initialize the microcontroller after one of the Flash programming steps. </td></tr>
<tr>
<td><a class="el" href="algorithmFunc.html#Verify">Verify</a> </td><td>optional </td><td>Compare Flash memory content with the program code. </td></tr>
</table>
<p>The following diagrams show how the functions of the <b>Flash Programming Algorithms</b> are executed by a development tool.</p>
<p>The <b>Flash Erase</b> sequence is executed to erase the Flash content.</p>
<div class="image">
<img src="FlashErase.png" alt="FlashErase.png"/>
<div class="caption">
Flash Erase</div></div>
<p> The <b>Flash Program</b> sequence is executed to program the Flash memory.</p>
<div class="image">
<img src="FlashProgram.png" alt="FlashProgram.png"/>
<div class="caption">
Flash Program</div></div>
<p> The <b>Flash Verify</b> sequence is executed to verify the content after flash programming.</p>
<div class="image">
<img src="FlashVerify.png" alt="FlashVerify.png"/>
<div class="caption">
Flash Verify</div></div>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="BlankCheck"></a>
BlankCheck</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> BlankCheck (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pat);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">adr</td><td>Block start address </td></tr>
<tr><td class="paramname">sz</td><td>Block size in bytes </td></tr>
<tr><td class="paramname">pat</td><td>Pattern to compare </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 when the block content is equal to the pattern pat.</li>
<li>1 when the block content differs from the pattern pat.</li>
</ul>
</dd></dl>
<p>The function <b>BlankCheck</b> can be used to check whether the specified block is empty, or whether the content is equal to a specific pattern defined in the argument <em>pat</em>.</p>
<p>The argument <em>adr</em> specifies the start address of the block that is to be verified.</p>
<p>The argument <em>sz</em> specifies the size of the block that is to be verified.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> BlankCheck (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pat) {</div>
<div class="line"> </div>
<div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i, j, k;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Recalculate address for External SDRAM addresses</span></div>
<div class="line"> <span class="keywordflow">if</span> (adr &gt;= SDRAM_START)</div>
<div class="line"> adr = adr - SDRAM_START + USER_OFFSET;</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">for</span> (i = 0; i &lt; sz; i += 256) {</div>
<div class="line"> <span class="comment">// Read 256 bytes</span></div>
<div class="line"> ReadPage_HW (adr+i, 256, &amp;rd_buf[0]);</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Determine size to compare</span></div>
<div class="line"> <span class="keywordflow">if</span> ((sz-i) &gt;= 256) k = 256;</div>
<div class="line"> <span class="keywordflow">else</span> k = (sz-i);</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Check up to 256 bytes if equal to pattern &quot;pat&quot;</span></div>
<div class="line"> <span class="keywordflow">for</span> (j = 0; j &lt; k; j++)</div>
<div class="line"> <span class="keywordflow">if</span> (rd_buf[j] != pat) <span class="keywordflow">return</span> (1); <span class="comment">// Memory is not blank</span></div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0); <span class="comment">// Memory is blank</span></div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="EraseChip"></a>
EraseChip</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> EraseChip (<span class="keywordtype">void</span>);</div>
</div><!-- fragment --> <dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 on success.</li>
<li>1 on failure.</li>
</ul>
</dd></dl>
<p>The function <b>EraseChip</b> deletes the content of the entire Flash memory. It is invoked whenever the uVision menu <b>Flash</b> - <b>Erase</b> is used, or whenever an attempt is made to download the program to Flash and the option <b>Erase Full Chip</b> has been set in the <b>Flash Download Setup</b> dialog. If this function is missing in the Flash Programming Algorithm, the <a class="el" href="algorithmFunc.html#EraseSector">EraseSector</a> function is executed until the entire content of the Flash memory area has been deleted.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> EraseChip (<span class="keywordtype">void</span>) {</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR |= FLASH_MER; <span class="comment">// Mass Erase Enabled</span></div>
<div class="line"> FLASH-&gt;CR |= FLASH_STRT; <span class="comment">// Start Erase</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">while</span> (FLASH-&gt;SR &amp; FLASH_BSY) {</div>
<div class="line"> IWDG-&gt;KR = 0xAAAA; <span class="comment">// Reload IWDG</span></div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR &amp;= ~FLASH_MER; <span class="comment">// Mass Erase Disabled</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0); <span class="comment">// Done</span></div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="EraseSector"></a>
EraseSector</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> EraseSector (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">adr</td><td>Sector address </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 on success.</li>
<li>1 on failure.</li>
</ul>
</dd></dl>
<p>The function <b>EraseSector</b> deletes the content of the sector starting at the address specified by the argument <em>adr</em>. The function is invoked whenever the uVision menu <b>Flash</b> - <b>Erase</b> is used, or whenever an attempt is made to download the program to Flash and the option <b>Erase Sectors</b> has been set in the <b>Flash Download Setup</b> dialog.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> EraseSector (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr) {</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR |= FLASH_PER; <span class="comment">// Page Erase Enabled</span></div>
<div class="line"> FLASH-&gt;AR = adr; <span class="comment">// Page Address</span></div>
<div class="line"> FLASH-&gt;CR |= FLASH_STRT; <span class="comment">// Start Erase</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">while</span> (FLASH-&gt;SR &amp; FLASH_BSY) {</div>
<div class="line"> IWDG-&gt;KR = 0xAAAA; <span class="comment">// Reload IWDG</span></div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR &amp;= ~FLASH_PER; <span class="comment">// Page Erase Disabled</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0); <span class="comment">// Done</span></div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="Init"></a>
Init</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> Init (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> clk, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fnc);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">adr</td><td>Device base address </td></tr>
<tr><td class="paramname">clk</td><td>Clock frequency (Hz) </td></tr>
<tr><td class="paramname">fnc</td><td>Function code </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 on success.</li>
<li>1 on failure.</li>
</ul>
</dd></dl>
<p>The function <b>Init</b> initializes the microcontroller for Flash programming. It is invoked whenever an attempt is made to download the program to Flash.</p>
<p>The argument <em>adr</em> specifies the base address of the device.</p>
<p>The argument <em>clk</em> specifies the clock frequency for prgramming the device.</p>
<p>The argument <em>fnc</em> is a number:</p>
<ul>
<li>1 stands for Erase.</li>
<li>2 stands for Program.</li>
<li>3 stands for Verify.</li>
</ul>
<p>Thus, different initialization sections can be implemented for each individual Flash programming step.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> Init (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> clk, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fnc) {</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Zero Wait State</span></div>
<div class="line"> FLASH-&gt;ACR = 0x00000000;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Unlock Flash</span></div>
<div class="line"> FLASH-&gt;KEYR = FLASH_KEY1;</div>
<div class="line"> FLASH-&gt;KEYR = FLASH_KEY2;</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Test if IWDG is running (IWDG in HW mode)</span></div>
<div class="line"> <span class="keywordflow">if</span> ((FLASH-&gt;OBR &amp; 0x04) == 0x00) {</div>
<div class="line"> <span class="comment">// Set IWDG time out to ~32.768 second</span></div>
<div class="line"> IWDG-&gt;KR = 0x5555; <span class="comment">// Enable write access to IWDG_PR and IWDG_RLR</span></div>
<div class="line"> IWDG-&gt;PR = 0x06; <span class="comment">// Set prescaler to 256</span></div>
<div class="line"> IWDG-&gt;RLR = 4095; <span class="comment">// Set reload value to 4095</span></div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0);</div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="ProgramPage"></a>
ProgramPage</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> ProgramPage (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">adr</td><td>Page start address </td></tr>
<tr><td class="paramname">sz</td><td>Page size </td></tr>
<tr><td class="paramname">buf</td><td>Data to be written </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 on success.</li>
<li>1 on failure.</li>
</ul>
</dd></dl>
<p>The function <b>ProgramPage</b> is used to write code into the Flash memory. It is invoked to download a program to Flash. As Flash memory is typically organized in blocks or pages, the parameters to the function <b>ProgramPage</b> must not cross alignment boundaries of these flash pages. The page size is specified in the struct FlashDevice with the value <b>Program Page Size</b>.</p>
<p>The argument <em>adr</em> specifies the start address of the page that is to be programmed. It is aligned by the host programming system to a start address of a flash page.</p>
<p>The argument <em>sz</em> specifies the data size in the data buffer. The host programming system ensures that page boundaries are not crossed.</p>
<p>The argument <em>buf</em> points to the data buffer containing the data to be programmed.</p>
<dl class="section note"><dt>Note</dt><dd>The host programming system ensures that the argument <em>adr</em> + <em>sz</em> never crosses any page boundary. The function <b>ProgramPage</b> does therefore not require any provisions for that.</dd></dl>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> ProgramPage (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf) {</div>
<div class="line"> </div>
<div class="line"> sz = (sz + 1) &amp; ~1; <span class="comment">// Adjust size for Half Words</span></div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">while</span> (sz) {</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR |= FLASH_PG; <span class="comment">// Programming Enabled</span></div>
<div class="line"> </div>
<div class="line"> M16(adr) = *((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *)buf); <span class="comment">// Program Half Word</span></div>
<div class="line"> <span class="keywordflow">while</span> (FLASH-&gt;SR &amp; FLASH_BSY);</div>
<div class="line"> </div>
<div class="line"> FLASH-&gt;CR &amp;= ~FLASH_PG; <span class="comment">// Programming Disabled</span></div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Check for Errors</span></div>
<div class="line"> <span class="keywordflow">if</span> (FLASH-&gt;SR &amp; (FLASH_PGERR | FLASH_WRPRTERR)) {</div>
<div class="line"> FLASH-&gt;SR |= FLASH_PGERR | FLASH_WRPRTERR;</div>
<div class="line"> <span class="keywordflow">return</span> (1); <span class="comment">// Failed</span></div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Go to next Half Word</span></div>
<div class="line"> adr += 2;</div>
<div class="line"> buf += 2;</div>
<div class="line"> sz -= 2;</div>
<div class="line"> </div>
<div class="line"> }</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0); <span class="comment">// Done</span></div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="UnInit"></a>
UnInit</h1>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> UnInit (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fnc);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">fnc</td><td>Function code </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>0 on success.</li>
<li>1 on failure.</li>
</ul>
</dd></dl>
<p>The function <b>UnInit</b> de-initializes the microcontroller and is invoked at the end of an erasing, programming, or verifying step.</p>
<p>The argument <em>fnc</em> is a number:</p>
<ul>
<li>1 stands for Erase.</li>
<li>2 stands for Program.</li>
<li>3 stands for Verify.</li>
</ul>
<p>Thus, different de-initialization sections can be implemented for each individual Flash programming step.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> UnInit (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> fnc) {</div>
<div class="line"> </div>
<div class="line"> <span class="comment">// Lock Flash</span></div>
<div class="line"> FLASH-&gt;CR |= FLASH_LOCK;</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (0);</div>
<div class="line">}</div>
</div><!-- fragment --><p>&#160;</p>
<hr/>
<h1><a class="anchor" id="Verify"></a>
Verify</h1>
<div class="fragment"><div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Verify (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf);</div>
</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">adr</td><td>Start address </td></tr>
<tr><td class="paramname">sz</td><td>Size in bytes </td></tr>
<tr><td class="paramname">buf</td><td>Data to be compared </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>status information:<ul>
<li>the sum of (adr+sz) - on success.</li>
<li>any other number - on failure, and represents the failing address.</li>
</ul>
</dd></dl>
<p>The function <b>Verify</b> compares the content of the Flash memory with the program code <em>*buf</em>.</p>
<p>The argument <em>adr</em> specifies the start address for the verification.</p>
<p>The argument <em>sz</em> specifies the size of the verification.</p>
<p>The argument <em>buf</em> points to the buffer containing the data to be verified.</p>
<p><b>Code Example</b> </p>
<div class="fragment"><div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Verify (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> adr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sz, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *buf) {</div>
<div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i, adr_dest, in_page_ofs;</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span> (adr &lt; block_size) { <span class="comment">// Verifying 2-nd level bootloader data</span></div>
<div class="line"> adr_dest = adr + page_usr_size; <span class="comment">// skip page 0 of block 0</span></div>
<div class="line"> } <span class="keywordflow">else</span> { <span class="comment">// Verifying program data</span></div>
<div class="line"> FindBlock(adr, 0);</div>
<div class="line"> adr_dest = nand_block_offset + (adr &amp; (block_size-1));</div>
<div class="line"> }</div>
<div class="line"> in_page_ofs = adr_dest &amp; (page_usr_size-1);</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">if</span> (ReadPage_HW(adr_dest, page_usr_size, data_buf)) <span class="keywordflow">return</span> (1);</div>
<div class="line"> <span class="keywordflow">for</span> (i=0; i&lt;sz; i++)</div>
<div class="line"> <span class="keywordflow">if</span> (buf[i] != data_buf[i+in_page_ofs])</div>
<div class="line"> <span class="keywordflow">break</span>;</div>
<div class="line"> </div>
<div class="line"> <span class="keywordflow">return</span> (adr+i);</div>
<div class="line">}</div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="flashAlgorithm.html">Flash Programming</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,471 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Configuration Wizard Annotations</title>
<title>CMSIS-Pack: Configuration Wizard Annotations</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('configWizard.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Configuration Wizard Annotations </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="configWizard_annotations"></a>
Annotation Rules</h1>
<p><b>Configuration Wizard Annotations</b> consist of annotation items and annotation modifiers. They create GUI-like elements in IDEs for configuration files (see <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>). Using a GUI-like approach makes it easier for the user to check and adapt configuration files to the application needs. The following rules apply:</p>
<ul>
<li>The Configuration Wizard section must begin within the first 100 lines of code and must start with the following comment line: <div class="fragment"><div class="line"><span class="comment">// &lt;&lt;&lt; Use Configuration Wizard in Context Menu &gt;&gt;&gt;</span></div>
</div><!-- fragment --></li>
<li>The Configuration Wizard section can end with the following optional comment: <div class="fragment"><div class="line"><span class="comment">// &lt;&lt;&lt; end of configuration section &gt;&gt;&gt;</span></div>
</div><!-- fragment --></li>
<li>Annotations are written as comments in the code. Each annotation line must start with a double forward slash (//).</li>
<li>By default, the next code symbol that follows the annotation is modified.</li>
<li>Items marked with * in the table below can be followed by a skip-value. A skip-value omits a number of code symbols (see <em>skip example</em> in table). This overwrites the previous rule.</li>
<li>A descriptive text can be added to items. This text is displayed on screen (see table).</li>
<li>Whitespace characters are ignored in annotation items or annotation modifiers (text excluded).</li>
<li>You must not use &lt; or &gt; within configuration wizard lines other than for enclosing annotation items.</li>
</ul>
<p>The following table lists the Configuration Wizard Annotations:</p>
<table class="cmtable" summary="Annotations Tab">
<tr>
<th>Item </th><th>Text </th><th>Description </th></tr>
<tr>
<td>&lt;h&gt; </td><td>yes </td><td>Heading. Creates a header section. All items and options enclosed by &lt;h&gt; and &lt;/h&gt; belong to one group and can be expanded. This entry makes no changes to code symbols. It is just used to group other items and modifiers. <br/>
Excerpt from the <a class="el" href="configWizard.html#configWizard_codeExample">Code Example</a> <div class="fragment"><div class="line"><span class="comment">// &lt;h&gt;Thread Configuration -- header without checkbox to group other items</span></div>
<div class="line"><span class="comment">// ...</span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
</div><!-- fragment --> Is the header entry as shown in <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>. </td></tr>
<tr>
<td>&lt;e&gt;<sup>*</sup> </td><td>yes </td><td>Heading with enable. Creates a header section with a checkbox to enabled or disabled all items and options enclosed by &lt;e&gt; and &lt;/e&gt;. Excerpt from the <a class="el" href="configWizard.html#configWizard_codeExample">Code Example</a>. <div class="fragment"><div class="line"><span class="comment">// &lt;e&gt;Round-Robin Thread switching -- header with checkbox</span></div>
<div class="line"><span class="comment">// ===============================</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Enables Round-Robin Thread switching. -- tooltip information for the header</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_ROBIN</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define OS_ROBIN 1 -- this value is set through the checkbox</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span><span class="comment">// &lt;o&gt;Round-Robin Timeout [ticks] &lt;1-1000&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines how long a thread will execute before a thread switch.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 5</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_ROBINTOUT</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define OS_ROBINTOUT 5</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor">// &lt;/e&gt;</span></div>
</div><!-- fragment --> The entry <code>&lt;e&gt;Round-Robin Thread switching ... &lt;/e&gt;</code> sets OS_ROBIN to <span class="XML-Token">1</span> (checkbox enabled) or <span class="XML-Token">0</span> (checkbox disabled) and encloses the <em>OS_ROBINTOUT</em> (Round-Robin Timeout) setting. See screen outcome in <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>. </td></tr>
<tr>
<td>&lt;e.<em>i</em>&gt;<sup>*</sup> </td><td>yes </td><td>Heading with Enable: modifies a specific bit (<em>i</em>) (example: &lt;e.4&gt; - changes bit 4 of a value). <div class="fragment"><div class="line"><span class="comment">// &lt;e.4&gt;Serial Number</span></div>
<div class="line"><span class="comment">// &lt;i&gt;Enable Serial Number String.</span></div>
<div class="line"><span class="comment">// &lt;i&gt;If disabled, Serial Number String will not be assigned to USB Device.</span></div>
<div class="line"><span class="preprocessor">#define USBD0_STR_DESC_SER_EN 1</span></div>
</div><!-- fragment --> The example creates the heading <span class="XML-Token">Serial Number</span> and a checkbox to set the value. If enabled, then bit 4 of <span class="XML-Token">USBD0_STR_DESC_SER_EN</span> is set. </td></tr>
<tr>
<td>&lt;/h&gt;, &lt;/e&gt;, or &lt;/c&gt; </td><td>yes </td><td>Heading, Enable, or Comment end. </td></tr>
<tr>
<td>&lt;n&gt; </td><td>yes </td><td>Notification text displayed <div class="fragment"><div class="line"><span class="comment">// &lt;n&gt; This is shown as plain text</span></div>
</div><!-- fragment --> </td></tr>
<tr>
<td>&lt;i&gt; </td><td>yes </td><td>Tooltip help for previous item. <div class="fragment"><div class="line"><span class="comment">// &lt;i&gt;This is shown as a tooltip when hovering over a text.</span></div>
</div><!-- fragment --> Many examples in this table have tooltip examples. </td></tr>
<tr>
<td>&lt;c&gt;<sup>*</sup> </td><td>yes </td><td>Code enable: creates a checkbox to uncomment or comment code. All lines, including those with white spaces, get commented with double slashes (//) at the first found character when you disable the checkbox. <div class="fragment"><div class="line"><span class="comment">// &lt;c1&gt; Comment sequence block until block end when disabled</span></div>
<div class="line"><span class="comment">//&lt;i&gt; This may carry the block&#39;s description</span></div>
<div class="line"></div>
<div class="line">foo</div>
<div class="line"></div>
<div class="line">+bar</div>
<div class="line"></div>
<div class="line">-xFoo</div>
<div class="line"><span class="comment">// &lt;/c&gt;</span></div>
</div><!-- fragment --> In this example, the item is enabled, so that the sequence block is not commented. </td></tr>
<tr>
<td>&lt;!c&gt;<sup>*</sup> </td><td>yes </td><td>Code disable: creates a checkbox to comment or uncomment code. All lines, including those with white spaces, get commented with double slashes (//) at the first found character when you enable the checkbox. <div class="fragment"><div class="line"><span class="comment">// &lt;!c1&gt; Comment sequence block until block end when enabled</span></div>
<div class="line"><span class="comment">//&lt;i&gt; This may carry the block&#39;s description</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">//foo</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">//+bar</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">//-xFoo</span></div>
<div class="line"><span class="comment">// &lt;/c&gt;</span></div>
</div><!-- fragment --> In this example, the item is enabled, so that the sequence block is commented. </td></tr>
<tr>
<td>&lt;q&gt;<sup>*</sup> </td><td>yes </td><td>Option for bit values which can be set via a checkbox. <div class="fragment"><div class="line"><span class="comment">// &lt;h&gt; Chip-select control</span></div>
<div class="line"><span class="comment">// &lt;q&gt; ASYNCWAIT: Wait signal during asynchronous transfer</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Enables the FSMC to use the wait signal even during an asynchronous protocol.</span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
<div class="line"><span class="preprocessor">#define RTE_FSMC_BCR1_ASYNCWAIT 0 -- this is changed via a checkbox</span></div>
</div><!-- fragment --> </td></tr>
<tr>
<td>&lt;o&gt;<sup>*</sup> </td><td>yes </td><td>Option with selection or number entry. <div class="fragment"><div class="line"><span class="comment">// &lt;o&gt;Round-Robin Timeout [ticks] &lt;1-1000&gt; -- text displayed on screen. Range of [ticks] is [1..1000] </span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines how long a thread will execute before a thread switch. -- tooltip info</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 5 -- tooltip info. Both displayed in one tooltip.</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_ROBINTOUT</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define OS_ROBINTOUT 5</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor">// &lt;/e&gt;</span></div>
</div><!-- fragment --> The example creates an option with the text <span class="XML-Token">Round-Robin Timeout [ticks]</span> and a field to enter values that can range between {1..1000]. </td></tr>
<tr>
<td>&lt;o <em>key-identifier</em>&gt;<sup>* (new!)</sup> </td><td>yes </td><td><p class="starttd">Option with identifier selection replacing the identifier after the specified key-identifier: </p>
<div class="fragment"><div class="line"><span class="comment">// &lt;o TIMESTAMP_SRC&gt;Time Stamp Source</span></div>
<div class="line"><span class="comment">// &lt;dwt=&gt; DWT Cycle Counter</span></div>
<div class="line"><span class="comment">// &lt;systick=&gt; SysTick</span></div>
<div class="line"><span class="comment">// &lt;user=&gt; User Timer </span></div>
<div class="line"><span class="comment">// &lt;i&gt;Selects source for 32-bit time stamp</span></div>
<div class="line"><span class="preprocessor">#define TIMESTAMP_SRC dwt</span></div>
</div><!-- fragment --><p> The example creates an option with the text <span class="XML-Token">Time Stamp Source</span> and a drop down-list showing the text items <span class="XML-Token">DWT Cycle Counter</span>, <span class="XML-Token">SysTick</span> and <span class="XML-Token">User Timer</span>. The corresponding identifier within the tag &lt;...=&gt; will be used for replacement.</p>
<p class="endtd">Use case for an assignment of an enumeration to a variable: </p>
<div class="fragment"><div class="line"><span class="comment">// &lt;o redPortMode&gt; Red port mode </span></div>
<div class="line"><span class="comment">// &lt;OutPushPull_GPIO=&gt; PushPull</span></div>
<div class="line"><span class="comment">// &lt;OutOpenDrain_GPIO=&gt; OpenDrain</span></div>
<div class="line"><span class="comment">// &lt;i&gt;Selects GPIO output</span></div>
<div class="line">ledConf.redPortMode = OutOpenDrain_GPIO;</div>
</div><!-- fragment --><p> The example creates an option with the text <span class="XML-Token">Red port mode</span> and a drop down-list showing the text items <span class="XML-Token">PushPull</span> and <span class="XML-Token">OpenDrain</span>. The corresponding identifier <span class="XML-Token">OutPushPull_GPIO</span> or <span class="XML-Token">OutOpenDrain_GPIO</span> will be used to replace the identifier after the key-identifier <span class="XML-Token">redPortMode</span>. </p>
</td></tr>
<tr>
<td>&lt;o.<em>i</em>&gt;<sup>*</sup> </td><td>yes </td><td>Modify a single bit (example: &lt;e.4&gt; - modifies bit 4). <div class="fragment"><div class="line"><span class="comment">// &lt;o.4&gt; &lt;o.0&gt;High-speed</span></div>
<div class="line"><span class="comment">// &lt;i&gt;Enable High-speed functionality (if device supports it).</span></div>
<div class="line"><span class="preprocessor">#define USBD0_HS 0</span></div>
</div><!-- fragment --> The example creates a heading with the text <span class="XML-Token">High-speed</span> and a checkbox. If enabled, then bit 4 of <span class="XML-Token">USBD0_HS</span> is set. </td></tr>
<tr>
<td>&lt;o.<em>x</em>..<em>y</em>&gt;<sup>*</sup> </td><td>yes </td><td>Modify a range of bits. (example: &lt;o.4..5&gt; - bit 4 to 5). <div class="fragment"><div class="line"><span class="comment">// &lt;h&gt;String Settings</span></div>
<div class="line"><span class="comment">// &lt;i&gt;These settings are used to create the String Descriptor.</span></div>
<div class="line"><span class="comment">// &lt;o.0..15&gt;Language ID &lt;0x0000-0xFCFF&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt;English (United States) = 0x0409.</span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
<div class="line"><span class="preprocessor">#define USBD0_STR_DESC_LANGID 0x0409</span></div>
</div><!-- fragment --> This example creates an expandable header with the text <span class="XML-Token">String Settings</span> and an option <span class="XML-Token">Language ID</span>. The range of values is set to <span class="XML-Token">&lt;0x0000-0xFCFF&gt;</span>. Users can enter a value from within that range. The option changes the bits <span class="XML-Token">0..15</span>. </td></tr>
<tr>
<td>&lt;s&gt;<sup>*</sup> </td><td>yes </td><td>Option with ASCII string entry. <div class="fragment"><div class="line"><span class="comment">// &lt;s&gt;Manufacturer String</span></div>
<div class="line"><span class="comment">// &lt;i&gt;String Descriptor describing Manufacturer.</span></div>
<div class="line"><span class="preprocessor">#define USBD0_STR_DESC_MAN L&quot;Keil Software&quot;</span></div>
</div><!-- fragment --> Displays an option with the text <span class="XML-Token">Manufacturer String</span> and creates a field in which the user can enter a text. The size of the string is not limited. </td></tr>
<tr>
<td>&lt;s.<em>i</em>&gt;<sup>*</sup> </td><td>yes </td><td>Option with ASCII string entry and a size limit of <em>i</em> characters. <div class="fragment"><div class="line"><span class="comment">// &lt;s.126&gt;Manufacturer String</span></div>
<div class="line"><span class="comment">// &lt;i&gt;String Descriptor describing Manufacturer.</span></div>
<div class="line"><span class="preprocessor">#define USBD0_STR_DESC_MAN L&quot;Keil Software&quot;</span></div>
</div><!-- fragment --> The example sets a size limit of 126 character. Default string is "Keil Software". </td></tr>
<tr>
<td><em>skip example</em> <br/>
&lt;q<em>i&gt;</em>; <br/>
&lt;o<em>i&gt;</em>; &lt;o<em>i</em>.<em>x&gt;</em>; <br/>
&lt;s<em>i&gt;</em>; &lt;s<em>i</em>.<em>x&gt;</em> </td><td>yes </td><td>Skip <em>i</em> items. Can be applied to all annotation items marked with a * in this table. <div class="fragment"><div class="line"><span class="comment">// &lt;o2&gt;Skip 2 and modify the third item after this entry &lt;1-9&gt;</span></div>
<div class="line"><span class="preprocessor">#define VALUE1 1000</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define VALUE2 2000</span></div>
<div class="line"><span class="preprocessor">#define MODIFY_THIS 3000</span></div>
</div><!-- fragment --> The example skips 2 items and modifies the third. </td></tr>
<tr>
<th>Modifier </th><th>&#160; </th><th>Description </th></tr>
<tr>
<td>&lt;0-31&gt; </td><td>no </td><td>Value range for option fields. </td></tr>
<tr>
<td>&lt;0-100:10&gt; </td><td>no </td><td>Value range for option fields with step 10. </td></tr>
<tr>
<td>&lt;0x40-0x1000:0x10&gt; </td><td>no </td><td>Value range in hex format and step 10. </td></tr>
<tr>
<td>&lt;<em>value</em>=&gt; </td><td>yes </td><td>Creates a drop down-list and displays the <em><b>text</b></em>. <em><b>value</b></em> is written to the next item. Excerpt from the <a class="el" href="configWizard.html#configWizard_codeExample">Code Example</a>. <div class="fragment"><div class="line"><span class="comment">// &lt;o&gt;Timer Thread Priority -- creates a drop-down with the list below.</span></div>
<div class="line"><span class="comment">// &lt;1=&gt; Low</span></div>
<div class="line"><span class="comment">// &lt;2=&gt; Below Normal &lt;3=&gt; Normal &lt;4=&gt; Above Normal</span></div>
<div class="line"><span class="comment">// &lt;5=&gt; High</span></div>
<div class="line"><span class="comment">// &lt;6=&gt; Realtime (highest)</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines priority for Timer Thread -- tooltip info</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: High -- tooltip info</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TIMERPRIO</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define OS_TIMERPRIO 5</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
</div><!-- fragment --> In this example, the screen would show the option <span class="XML-Token">Timer Thread Priority</span>. The field Value would display the text <span class="XML-Token">High</span>. OS_TIMERPRIO is set to <span class="XML-Token">5</span>. When clicking on the field, a drop-down would show all options. See <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>. </td></tr>
<tr>
<td>&lt;<em>identifier</em>=&gt; </td><td>yes </td><td>Creates a drop down-list and displays the <em><b>text</b></em> following the definition of the identifiers <span class="XML-Token">dwt</span>, <span class="XML-Token">systick</span> and <span class="XML-Token">user</span>. Note that this must only be used in the context of &lt;o key-identifier&gt;! The <em><b>identifier</b></em> corresponding to the selected text replaces the identifier following the key-identifier specified by the &lt;o ...&gt; tag. <div class="fragment"><div class="line"><span class="comment">// &lt;o TIMESTAMP_SRC&gt;Time Stamp Source</span></div>
<div class="line"><span class="comment">// &lt;dwt=&gt; DWT Cycle Counter</span></div>
<div class="line"><span class="comment">// &lt;systick=&gt; SysTick</span></div>
<div class="line"><span class="comment">// &lt;user=&gt; User Timer </span></div>
<div class="line"><span class="comment">// &lt;i&gt;Selects source for 32-bit time stamp</span></div>
<div class="line"><span class="preprocessor">#define TIMESTAMP_SRC dwt</span></div>
</div><!-- fragment --> In this example, the screen would show the option <span class="XML-Token">Time Stamp Source</span>. The field value would display the text <span class="XML-Token">DWT Cycle Counter</span>. TIMESTAMP_SRC is set to <span class="XML-Token">dwt</span>. When clicking on the field, a drop-down would show all options. See <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>. </td></tr>
<tr>
<td>&lt;#+1&gt;&#160;&#160; &lt;#-1&gt;<br/>
&lt;#*8&gt;&#160;&#160; &lt;#/3&gt; </td><td>no </td><td>Modifies the entered or displayed value according to the operator (add, sub, mul, div). The changed value is set for the code symbol. <br/>
Excerpt from <a class="el" href="configWizard.html#configWizard_codeExample">Code Example</a>. <div class="fragment"><div class="line"><span class="comment">// &lt;o&gt;Default Thread stack size [bytes] &lt;64-4096:8&gt;&lt;#/4&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines default stack size for threads with osThreadDef stacksz = 0</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 200</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_STKSIZE</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define OS_STKSIZE 50</span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
</div><!-- fragment --> The option <em>Default Thread stack size [bytes]</em> accepts values in the range <span class="XML-Token">[64..4096]</span>. The value (here <span class="XML-Token">200</span>) set in the field is divided by <span class="XML-Token">4</span> (&lt;#/4&gt;) . The result of the division (200/4) is put into the code symbol <em>OS_STKSIZE</em>, which was set to <span class="XML-Token">50</span>. The screen will display the number <span class="XML-Token">200</span>. See <a class="el" href="configWizard.html#configWizard_display">Tool-specific display</a>. </td></tr>
</table>
<h1><a class="anchor" id="configWizard_codeExample"></a>
Code Example</h1>
<p>You can copy the code into a C-file and check the outcome in the uVision Editor.</p>
<div class="fragment"><div class="line"><span class="comment">//-------- &lt;&lt;&lt; Use Configuration Wizard in Context Menu &gt;&gt;&gt; -----------------</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;h&gt;Thread Configuration</span></div>
<div class="line"><span class="comment">// =======================</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;o&gt;Number of concurrent running threads &lt;0-250&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines max. number of threads that will run at the same time.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 6</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TASKCNT</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TASKCNT 6</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Default Thread stack size [bytes] &lt;64-4096:8&gt;&lt;#/4&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines default stack size for threads with osThreadDef stacksz = 0</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 200</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_STKSIZE</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_STKSIZE 50</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Main Thread stack size [bytes] &lt;64-32768:8&gt;&lt;#/4&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines stack size for main thread.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 200</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_MAINSTKSIZE</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_MAINSTKSIZE 50</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Number of threads with user-provided stack size &lt;0-250&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines the number of threads with user-provided stack size.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 0</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_PRIVCNT</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_PRIVCNT 0</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Total stack size [bytes] for threads with user-provided stack size &lt;0-1048576:8&gt;&lt;#/4&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines the combined stack size for threads with user-provided stack size.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 0</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_PRIVSTKSIZE</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_PRIVSTKSIZE 0</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;q&gt;Check for stack overflow</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Includes the stack checking code for stack overflow.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Note that additional code reduces the Kernel performance.</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_STKCHECK</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_STKCHECK 1</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Processor mode for thread execution </span></div>
<div class="line"><span class="comment">// &lt;0=&gt; Unprivileged mode </span></div>
<div class="line"><span class="comment">// &lt;1=&gt; Privileged mode</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: Privileged mode</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_RUNPRIV</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_RUNPRIV 1</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="comment">// &lt;h&gt;RTX Kernel Timer Tick Configuration</span></div>
<div class="line"><span class="comment">// ======================================</span></div>
<div class="line"><span class="comment">// &lt;q&gt; Use Cortex-M SysTick timer as RTX Kernel Timer</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Use the Cortex-M SysTick timer as a time-base for RTX.</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_SYSTICK</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_SYSTICK 1</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;o&gt;Timer clock value [Hz] &lt;1-1000000000&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines the timer clock value.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 12000000 (12MHz)</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_CLOCK</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_CLOCK 12000000</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Timer tick value [us] &lt;1-1000000&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines the timer tick value.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 1000 (1ms)</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TICK</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TICK 1000</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="comment">// &lt;h&gt;System Configuration</span></div>
<div class="line"><span class="comment">// =======================</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;e&gt;Round-Robin Thread switching</span></div>
<div class="line"><span class="comment">// ===============================</span></div>
<div class="line"><span class="comment">//</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Enables Round-Robin Thread switching.</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_ROBIN</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_ROBIN 1</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Round-Robin Timeout [ticks] &lt;1-1000&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines how long a thread will execute before a thread switch.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 5</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_ROBINTOUT</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_ROBINTOUT 5</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;/e&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="comment">// &lt;e&gt;User Timers</span></div>
<div class="line"><span class="comment">// ==============</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Enables user Timers</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TIMERS</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TIMERS 1</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Timer Thread Priority</span></div>
<div class="line"><span class="comment">// &lt;1=&gt; Low</span></div>
<div class="line"><span class="comment">// &lt;2=&gt; Below Normal &lt;3=&gt; Normal &lt;4=&gt; Above Normal</span></div>
<div class="line"><span class="comment">// &lt;5=&gt; High</span></div>
<div class="line"><span class="comment">// &lt;6=&gt; Realtime (highest)</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines priority for Timer Thread</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: High</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TIMERPRIO</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TIMERPRIO 5</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Timer Thread stack size [bytes] &lt;64-4096:8&gt;&lt;#/4&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Defines stack size for Timer thread.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 200</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TIMERSTKSZ</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TIMERSTKSZ 50</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;o&gt;Timer Callback Queue size &lt;1-32&gt;</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Number of concurrent active timer callback functions.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 4</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_TIMERCBQS</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_TIMERCBQS 4</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;/e&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="comment">// &lt;o&gt;ISR FIFO Queue size&lt;4=&gt; 4 entries &lt;8=&gt; 8 entries</span></div>
<div class="line"><span class="comment">// &lt;12=&gt; 12 entries &lt;16=&gt; 16 entries</span></div>
<div class="line"><span class="comment">// &lt;24=&gt; 24 entries &lt;32=&gt; 32 entries</span></div>
<div class="line"><span class="comment">// &lt;48=&gt; 48 entries &lt;64=&gt; 64 entries</span></div>
<div class="line"><span class="comment">// &lt;96=&gt; 96 entries</span></div>
<div class="line"><span class="comment">// &lt;i&gt; ISR functions store requests to this buffer,</span></div>
<div class="line"><span class="comment">// &lt;i&gt; when they are called from the interrupt handler.</span></div>
<div class="line"><span class="comment">// &lt;i&gt; Default: 16 entries</span></div>
<div class="line"><span class="preprocessor">#ifndef OS_FIFOSZ</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define OS_FIFOSZ 16</span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#endif</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">// &lt;/h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="comment">//------------- &lt;&lt;&lt; end of configuration section &gt;&gt;&gt; -----------------------</span></div>
</div><!-- fragment --><h1><a class="anchor" id="configWizard_display"></a>
Tool-specific display</h1>
<p>It is left to the development tool to interpret and display Configuration Wizard Annotations. The uVision IDE displays the code above in the following way:</p>
<div class="image">
<img src="RTX_Conf_CM_Wizard_View.png" alt="RTX_Conf_CM_Wizard_View.png"/>
<div class="caption">
Configuration Wizard Display</div></div>
<p> <b>Where</b></p>
<p><em>Option</em> are device properties, which can be represented in a tree structure. Each item can have an explanatory tooltip.</p>
<p><em>Value</em> sets the option value. Can contain controls to encapsulate data in predefined drop-down lists. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,132 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Debug Setup with CMSIS-Pack</title>
<title>CMSIS-Pack: Debug Setup with CMSIS-Pack</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('coresight_setup.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Debug Setup with CMSIS-Pack </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>CMSIS-Pack offers two ways to simplify the debug setup:</p>
<ul>
<li>A <a class="el" href="debug_description.html">Debug Description</a> declares a set of standardized debug and trace methods are automatically executed by the debugger. Implementation-specific steps can be described using an XML syntax. This concept is easy to implement for basic chip configurations that mostly rely on a standard implementation of the CoreSight architecture. Most single-core devices should be able to be specified completely with debug descriptions.</li>
<li>For more complex topologies and multi-core devices, a <a class="el" href="sdf_pg.html">System Description File</a> helps debuggers to connect to the target and access all available cores via trace. An SDF file is more complex (although also specified in XML), but is also more flexible with regards to the underlying debug architecture. </li>
</ul>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:01 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,36 @@
var coresight_setup =
[
[ "Debug Description", "debug_description.html", [
[ "Concept", "debug_description.html#das_concept", null ],
[ "Debug description elements", "debug_description.html#das_elements", null ],
[ "Debug access sequences", "debug_description.html#pdsc_SequenceNameEnum_pg", null ],
[ "Usage of debug access sequences", "debug_description.html#usage_of_sequences", null ],
[ "Default debug access sequences", "debug_description.html#default_sequences", [
[ "DebugPortSetup", "debug_description.html#debugPortSetup", null ],
[ "DebugPortStart", "debug_description.html#debugPortStart", null ],
[ "DebugPortStop", "debug_description.html#debugPortStop", null ],
[ "DebugCoreStart", "debug_description.html#debugCoreStart", null ],
[ "DebugCoreStop", "debug_description.html#debugCoreStop", null ],
[ "ResetSystem", "debug_description.html#resetSystem", null ],
[ "ResetProcessor", "debug_description.html#resetProcessor", null ],
[ "ResetHardware", "debug_description.html#resetHardware", null ],
[ "ResetHardwareAssert", "debug_description.html#resetHardwareAssert", null ],
[ "ResetHardwareDeassert", "debug_description.html#resetHardwareDeassert", null ],
[ "ResetCatchSet", "debug_description.html#resetCatchSet", null ],
[ "ResetCatchClear", "debug_description.html#resetCatchClear", null ]
] ],
[ "Examples of non-standard debug access sequences", "debug_description.html#nonstdExamples", [
[ "TraceStart", "debug_description.html#traceStart", null ],
[ "DebugDeviceUnlock", "debug_description.html#debugDeviceUnlock", null ],
[ "User-defined hardware reset sequence", "debug_description.html#hwReset", null ],
[ "Calling sequences in a control block", "debug_description.html#sequenceExample", null ]
] ],
[ "Writing debug access sequences", "debug_description.html#writing_sequences", [
[ "Debug access syntax rules", "debug_description.html#DebugSyntaxRules", null ],
[ "Expression rules", "debug_description.html#ExpressionType", null ],
[ "Debug access functions", "debug_description.html#DebugFunctions", null ],
[ "Debug access variables", "debug_description.html#DebugVars", null ],
[ "Using external tools", "debug_description.html#externalTools", null ]
] ]
] ]
];
@@ -0,0 +1,134 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>XML Editors</title>
<title>CMSIS-Pack: XML Editors</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cp_Editors.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">XML Editors </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Some text editors are capable of verifying XML code against a schema file. This is helpful to identify syntactical or structural problems in a PDSC or SVD file early in the development process. Useful editors are:</p>
<ul>
<li><a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a></li>
<li><a href="http://www.visualstudio.com/" target="_blank">Visual Studio (Express)</a></li>
</ul>
<p>Usually, the XML file that is to be validated and its corresponding schema file need to reside in the same directory. The CMSIS-Pack schema file <b>Pack.xsd</b> and the CMSIS-SVD schema file <b>CMSIS-SVD.xsd</b> are available in the directory <b>.\CMSIS\Utilities</b> of the <b>ARM::CMSIS</b> Pack. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="createPackUtil.html">Utilities for Creating Packs</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,399 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Overview</title>
<title>CMSIS-Pack: Overview</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cp_Packs.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Overview </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <b>CMSIS-Pack</b> format is used to deliver a software package and is aimed to be scalable for future requirements. It provides a management process and supports a tool independent distribution for:</p>
<ul>
<li><a class="el" href="createPack_DFP.html">Device Support</a> for tool chains and software applications to target a specific device:<ul>
<li>Information about the processor and it's features.</li>
<li>C and assembly files for the device startup and access to the memory mapped peripheral registers.</li>
<li>Parameters, technical information, and data sheets about the device family and the specific devices.</li>
<li>Device description and available peripherals.</li>
<li>Memory layout of internal and external RAM and ROM address ranges.</li>
<li><a class="el" href="flashAlgorithm.html">Flash algorithms</a> for programming the device.</li>
<li>Debug and trace configurations as well as System View Description files for device specific display of the memory mapped peripheral registers.</li>
</ul>
</li>
<li><a class="el" href="createPackBoard.html">Board Support</a> for rapid development in the prototyping stage:<ul>
<li>Information about the development board and it's features.</li>
<li>Parameters, technical information, and data sheets about the board, the mounted microcontroller and peripheral devices.</li>
<li>Drivers for on-board peripheral devices</li>
</ul>
</li>
<li><a class="el" href="cp_SWComponents.html">Software Components</a> simplify the re-use of software and the management of 3rd party software. They contain:<ul>
<li>A collection of source modules, header and <a class="el" href="configWizard.html">configuration files</a> as well as libraries.</li>
<li>Documentation of the software, including features and APIs.</li>
</ul>
</li>
<li><a class="el" href="cp_SWComponents.html#cp_API">Application Programming Interfaces</a> specify one or more APIs for <a class="el" href="cp_SWComponents.html#cp_Components">software components</a> that are part of another <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><a class="el" href="cp_SWComponents.html#cp_Examples">Example Projects</a> can be used as a reference and starting point for similar applications. They contain:<ul>
<li>Fully defined application projects that work out of the box in the specified build and debug environments.</li>
<li>Documentation about the purpose of the example, how to build, configure and execute the application.</li>
</ul>
</li>
<li><a class="el" href="cp_SWComponents.html#cp_CodeTemplates">User Code Templates</a> help to understand the basic concepts of a software component better and to give the user a good starting point for implementing his application.</li>
</ul>
<h1><a class="anchor" id="cp_Components"></a>
Software Components</h1>
<p>A software component encapsulates a set of related functions. Software components can contain C/C++ source files, object code, assembler files, header files, or libraries. The interfaces of software components should be defined with <a class="el" href="cp_SWComponents.html#cp_API">API</a>headers" to make them substitutable by other compatible components at design time. In addition, CMSIS software components should contain documentation for the software component. They may provide user code templates that give a starting point for the application developer, and can have optional debug view descriptions for debuggers.</p>
<p>CMSIS software components can also refer to multiple interfaces of other software components. This could be also a hardware abstraction layer for a device peripheral.</p>
<p>Configuration files contain application specific parameters for a software component. These files are typically copied to the user project workspace; all other files are not modified by the user and can remain in a separate location which avoids that a project workspace is polluted by many source files that should be considered as “black-box” elements by the application programmer.</p>
<div class="image">
<img src="software_component.png" alt="software_component.png"/>
</div>
<p><a class="anchor" id="cp_CompDetails"></a></p>
<h2>Technical Details </h2>
<p>A component lists the files that belong to it and that are relevant for a project. The component itself or each individual file may refer to a <a class="el" href="pdsc_conditions_pg.html#element_condition">condition</a> that must resolve to true; if it is false, the component or file is not applicable in the given context.</p>
<p>Each software component must have the following attributes that are used to identify the component:</p>
<ul>
<li>Component Class (<code>Cclass</code>): A component class which is a top-level component name, for example <b>CMSIS</b>, <b>Device</b>, <b>File</b> <b>System</b> </li>
<li>Component Group (<code>Cgroup</code>): A component group name, for example <b>CMSIS:RTOS</b>, <b>Device:Startup</b>, <b>File</b> <b>System:CORE</b> </li>
<li>Component Version (<code>Cversion</code>): the version number of the software component.</li>
</ul>
<p>Optionally, a software component may have additional attributes:</p>
<ul>
<li>Component Sub-Group (<code>Csub</code>): A component sub-group that is used when multiple compatible implementations of a component are be available. For example <b>CMSIS:RTOS:MyRTOS</b>, <b>Device:Driver</b> <b>USBD:Full-speed</b> </li>
<li>Component Variant (<code>Cvariant</code>): A variant of the software component is typically used when the same implementation has multiple top-level configurations, like debug and release.</li>
<li>Component Vendor (<code>Cvendor</code>): the supplier of the software component.</li>
<li>Cbundle: allows to combine multiple software components into a software bundle. For example if a network stack is used, all interfaces must match to that component.</li>
<li>Instances: allow to deploy multiple instances of a software component. Each instance can have a separate configuration file.</li>
</ul>
<p>The <code>Cclass</code>, <code>Cgroup</code>, <code>Csub</code>, <code>Cvariant</code> and <code>Cversion</code> attributes are used together with the vendor specified by the pack to identify a component. A component vendor must ensure that the combination <code>Cclass</code>, <code>Cgroup</code>, <code>Csub</code> and <code>Cversion</code> is unique and not used by multiple components within the same Pack. Advertise a set of attributes to be used by other software components using the <a class="el" href="element_taxonomy.html">/package/taxonomy element</a>.</p>
<p>For a list of established Cclasses, refer to <a class="el" href="cp_Packs.html#pack_Cclass">Software Component Cclasses</a>.</p>
<p>In case multiple interdependent components (belonging to the same <code>Cclass</code>) form part of a solution, these can be grouped in a so called <a class="el" href="cp_SWComponents.html#cp_Bundles">bundle</a>.</p>
<p>Use the following syntax to reference to software components and APIs:<br/>
<b>&lt;Vendor&gt;::&lt;Cclass&gt;:&lt;Cgroup&gt;:&lt;Csub&gt;</b></p>
<p><b>Examples:</b> </p>
<ul>
<li><b>::CMSIS:RTOS (API)</b> - the CMSIS-RTOS API.</li>
<li><b>ARM::CMSIS:DSP</b> - the CMSIS-DSP Library.</li>
<li><b>::File System:Drive:NOR</b> - the NOR Flash Drive of a file system.</li>
</ul>
<p>Here is an example for the display of software components in a development tool:</p>
<div class="image">
<img src="ComponentDisplay.png" alt="ComponentDisplay.png"/>
<div class="caption">
Display of a software component in development tools</div></div>
<h2>Software Component Files </h2>
<p>Each software component consists of a certain number of files. Each file has at least the following attributes:</p>
<ul>
<li><code>name:</code> File path, file name, and file extension in the format path/name.extension. The file path is relative to the root directory of the Pack.</li>
<li><code>category:</code> Defines the purpose of the file. Select the predefined value as listed in the table <a class="el" href="pdsc_components_pg.html#FileCategoryEnum">File Categories</a>.</li>
</ul>
<p>Optionally, every file may have the following attributes:</p>
<ul>
<li><code>attr:</code> Defines the special use and handling of a file. Select a predefined value as defined in the table <a class="el" href="pdsc_components_pg.html#FileAttributeEnum">File Attributes</a>.</li>
<li><code>condition:</code> Enter the identifier (attribute <em><b>id</b></em>) of a <a class="el" href="pdsc_conditions_pg.html#element_condition">condition</a>. The element is used if the condition resolves to <span class="XML-Token">true</span>.</li>
<li><code>select:</code> Brief description and purpose of the file. The <b><em>select</em></b> attribute is <b>required</b> when <b><em>attr</em></b> is set to <span class="XML-Token">template</span> or <span class="XML-Token">interface</span>. When multiple template files of a component have the same <b><em>select</em></b> string, they are treated as a single selectable template. This way, multiple template or interface files can be bundled.</li>
<li><code>src:</code> Path information. The path is specified relative to the Pack Description File (PDSC).</li>
<li><code>version:</code> File-specific version information. This is used particularly for files copied into the project workspace. Before a file gets copied, a version check avoids unnecessary copy actions. If a file does not have a version, then the component version is used.</li>
</ul>
<h1><a class="anchor" id="cp_Cond"></a>
References to other software components</h1>
<p>Software components can reference other software components (either within the same pack or in other packs) using conditions:</p>
<div class="image">
<img src="conditions.png" alt="conditions.png"/>
</div>
<p>A condition describes dependencies on:</p>
<ul>
<li>a specific device</li>
<li>a certain processor</li>
<li>tool attributes</li>
<li>the presence of other components (pcak internal or external)</li>
</ul>
<p>Conditions can be used to ensure that specific software components are either present in the system or can prevent that illegal combinations of software components are chosen by the user.</p>
<p>Conditions are used to define <b>AND/OR</b> rules that make components conditional and therefore only available under certain circumstances, for example for specific devices or processors. Conditions are also used to express dependencies between software components.</p>
<p>Each condition has an <b>id</b> that is unique within the scope of a the PDSC file. An id can be referenced in the <code>condition</code> attribute of components, APIs, examples, files and other conditions. All attributes set in a <b>accept</b>, <b>require</b>, or <b>deny</b> element must resolve to true for the element to become true. A condition becomes true when:</p>
<ul>
<li>At least one <b>accept</b> element is true, <em>AND</em> </li>
<li>all <b>require</b> elements are true, <em>AND</em> </li>
<li>no <b>deny</b> element is true.</li>
</ul>
<p>If a condition resolves to false during processing, the respective element will be ignored.</p>
<h1><a class="anchor" id="cp_Requirements"></a>
Requirements</h1>
<p>Packs can require other packs to be available (and can even ask for a specific version of a pack):</p>
<div class="image">
<img src="requirements.png" alt="requirements.png"/>
</div>
<p>There are three different requirement types:</p>
<ul>
<li>The <code>packages</code> section lists CMSIS Packs that have been used to configure the project. This includes the specification of a version range to ensure compatibility. If no version is provided, the latest installed version is used. If not yet installed, the latest available version will be installed before resolving the configuration.</li>
<li>The <code>compilers</code> section specifies the toolchains that are supported by this example. The required compiler version is specified using the version element. If no compiler is specified, it is assumed that any toolchain will work.</li>
<li>The <code>languages</code> section allows to specify requirements regarding the programming language, for example C99 standard. If no language requirements are set, ANSI C is assumed.</li>
</ul>
<h1><a class="anchor" id="cp_APIDef"></a>
Central API definition</h1>
<p>The CMSIS-Pack system allows a central API definition that shares header file information and documentation of an <a class="el" href="pdsc_apis_pg.html#element_api">API interface</a>.</p>
<div class="image">
<img src="api.png" alt="api.png"/>
</div>
<p>This single API interface definition ensures consistency when it is used across multiple implementations that consume the interface. The API interface definition can be distributed separately or as part of the software component that consumes this interface.</p>
<p>An example is the <b>CMSIS-Driver</b> pack that contains various hardware interface drivers that all compatible with the CMSIS-Driver APIs (that are published in the CMSIS Pack).</p>
<h1><a class="anchor" id="cp_RTECompH"></a>
Inventory header file: RTE_Components.h</h1>
<p>Frequently, the behavior or features of a software component depend on the presence of other software components in the application. For example, a network stack can interface to Ethernet or serial PPP (UART). Depending on the presence of interface components, the implementation may behave differently.</p>
<p>To simplify application configuration, the file <b>RTE_Components.h</b> is generated before the project build step. It contains the inventory of all selected components. For each selected software component, it contains #define statements that are specified by the component meta data. The following example shows an RTE_Components.h file:</p>
<div class="fragment"><div class="line"><span class="comment">/* </span></div>
<div class="line"><span class="comment"> Auto generated Run-Time-Environment Component Configuration File </span></div>
<div class="line"><span class="comment"> * Do not modify ! *** </span></div>
<div class="line"><span class="comment"> */</span> </div>
<div class="line"></div>
<div class="line"><span class="preprocessor">#ifndef RTE_COMPONENTS_H </span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define RTE_COMPONENTS_H </span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="comment">/* </span></div>
<div class="line"><span class="comment"> Define the Device Header File: </span></div>
<div class="line"><span class="comment"> */</span> </div>
<div class="line"></div>
<div class="line"><span class="preprocessor">#define CMSIS_device_header &quot;stm32f10x.h&quot; </span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor">#define RTE_Network_Interface_ETH_0 </span><span class="comment">/* Network Interface ETH 0 */</span><span class="preprocessor"> </span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define RTE_Network_Socket_BSD </span><span class="comment">/* Network Socket BSD */</span><span class="preprocessor"> </span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define RTE_Network_Socket_TCP </span><span class="comment">/* Network Socket TCP */</span><span class="preprocessor"> </span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#define RTE_Network_Socket_UDP </span><span class="comment">/* Network Socket UDP */</span><span class="preprocessor"> </span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor">#endif </span><span class="comment">/* RTE_COMPONENTS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --><p>Use this information in other header files to control features that depend on the inclusion to other software components. For example:</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include &quot;RTE_Components.h&quot;</span> </div>
<div class="line"><span class="preprocessor">#ifdef RTE_Network_Interface_ETH_0 // if component is included </span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor">#include &quot;Net_Config_ETH_0.h&quot;</span> <span class="comment">// add related configuration file </span></div>
<div class="line"><span class="preprocessor">#endif</span></div>
</div><!-- fragment --><h1><a class="anchor" id="cp_Combine"></a>
Combining software components</h1>
<p>When using software components, you can use the conditions to automatically resolve dependencies on other components. Use this to combine components for a project in a certain way, while combining them differently for another project. In the following example, a network stack transfers data via Ethernet. The network stack requires a MAC and PHY to do this. The selected device from silicon vendor A that contains an on-chip MAC, thus only requiring a PHY to be selected:</p>
<div class="image">
<img src="internal_mac_example.png" alt="internal_mac_example.png"/>
<div class="caption">
Example with internal MAC</div></div>
<p> You can copy the project, select a different device from silicon vendor B for example and let the run-time environment manager do the exchange of the components. As the new devices do not have an on-chip MAC, you need to select a different component to fulfill the requirement for the network stack:</p>
<div class="image">
<img src="external_mac_example.png" alt="external_mac_example.png"/>
<div class="caption">
Example with external MAC and PHY</div></div>
<p> This reduces the development time drastically, as the developer does not need to care for the correct dependency between software components, but can concentrate on the implementation of his own application code.</p>
<h1><a class="anchor" id="cp_PackSteps"></a>
Steps to Create a Pack</h1>
<p>The following image shows the basic steps that are required to create a Software Pack:</p>
<div class="image">
<img src="PackCreateSteps.png" alt="PackCreateSteps.png"/>
</div>
<ol type="1">
<li><b>Produce input:</b> Create the files that will be delivered with the Pack.</li>
<li><b>Organize files:</b> Use directories to separate the content of the Pack.</li>
<li><b>Create PDSC file:</b> The XML based PDSC file can be created using any text editor. Editors that can validate XML code against a schema file help to find bugs early in the Pack development stage.</li>
<li><b>Generate Pack:</b> Any compression tool supporting the ZIP format can be used to create a Pack file. <a class="el" href="packChk.html">packChk.exe</a> is helpful for the validation of the contents of a Pack.</li>
</ol>
<p>The following pages will show how to create a Software Pack from scratch. The page <a class="el" href="cp_SWComponents.html">Pack with Software Components</a> will start with a simple Pack containing only the PDSC file and a single software component and will then explain further elements of a Pack in more detail. The page <a class="el" href="createPack_DFP.html">Pack with Device Support</a> adds information on the additional requirements that a DFP has, while <a class="el" href="createPackBoard.html">Pack with Board Support</a> will elaborate on the content specific to a BSP.</p>
<h1><a class="anchor" id="PackTutorials"></a>
Pack Tutorial</h1>
<p>The <b>ARM::CMSIS</b> Pack contains tutorials that are explained on the following pages. In the <b>\CMSIS\Pack\Tutorials</b> directory the following three ZIP files are available: </p>
<table class="doxtable">
<tr>
<th>ZIP File </th><th>Documentation </th></tr>
<tr>
<td>Pack_with_Software_Components.zip </td><td><a class="el" href="cp_SWComponents.html">Pack with Software Components</a> </td></tr>
<tr>
<td>Pack_with_Device_Support.zip </td><td><a class="el" href="createPack_DFP.html">Pack with Device Support</a> </td></tr>
<tr>
<td>Pack_with_Board_Support.zip </td><td><a class="el" href="createPackBoard.html">Pack with Board Support</a> </td></tr>
</table>
<h1><a class="anchor" id="PackFilenames"></a>
Pack Conventions</h1>
<p>A <a class="el" href="cp_SWComponents.html">Software Pack</a> is a collection of files located in directories that are archived in a file with the extension *.pack using the standard <a href="http://en.wikipedia.org/wiki/Zip_%28file_format%29" target="_blank">ZIP file format</a>. The Pack Description file (PDSC) with the file extension *.pdsc contains the <a class="el" href="packFormat.html">meta information</a>, describing the content of a pack based on <a href="https://en.wikipedia.org/wiki/XML" target="_blank">XML</a>. The PDSC file must be:</p>
<ul>
<li>included in the <a class="el" href="cp_SWComponents.html">Software Pack</a></li>
<li>located in the base folder of the archive</li>
<li>compliant with the <a class="el" href="cp_SWComponents.html">Software Pack</a> file <a class="el" href="cp_Packs.html#pack_filename">naming convention</a></li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>The <em>base folder</em> is defined to be the root folder './' of a zip archive and it is imperative that the whole <a class="el" href="cp_SWComponents.html">Software Pack</a> only contains a single PDSC file.</li>
<li>Future tools shall support this case: if the PDSC file is located in an immediate subdirectory, then the subdirectory becomes the base folder. The <a class="el" href="cp_SWComponents.html">Software Pack</a> is installed as if the subdirectory does not exist. All files and directories located in the root folder are ignored and do not get installed.</li>
</ul>
</dd></dl>
<h2><a class="anchor" id="pack_filename"></a>
Pack File Name</h2>
<p>A <a class="el" href="cp_SWComponents.html">Software Pack</a> must have a unique filename. Therefore it is constructed from vendor, packname and version and the file extension *.pack.</p>
<p><b>&lt;vendor&gt;.&lt;name&gt;.&lt;version&gt;.pack</b>.</p>
<p>Where:</p>
<ul>
<li><b>&lt;vendor&gt;</b> is the name of the supplier or vendor of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>&lt;name&gt;</b> is the name of the <a class="el" href="cp_SWComponents.html">Software Pack</a>. All packs that are published by a vendor must have a unique pack name.</li>
<li><b>&lt;release version="X.Y.Z"&gt;</b>specifies the <a class="el" href="pdsc_package_pg.html#VersionType">version number</a> of the release for the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>.pack</b> is the file extension identifying a <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>The XML elements <b>&lt;vendor&gt;</b>, <b>&lt;name&gt;</b>, and the version attribute of the <b>&lt;release&gt;</b> are specified in the <a class="el" href="packFormat.html#Filenames">PDSC</a> file. PDSC, Pack filenames are case sensitive and need to match exactly.</li>
<li><b>&lt;vendor&gt;</b> and <b>&lt;name&gt;</b> <em>must</em> <em>not</em> contain spaces.</li>
<li>The PDSC file needs to reside in the base folder of the Pack. All file references are relative to the location of the PDSC file.</li>
</ul>
</dd></dl>
<h2><a class="anchor" id="pack_Cclass"></a>
Software Component Cclasses</h2>
<p>If you add a software component in the PDSC file, you have to specify a component class (CClass), component group (Cgroup), and the component's version number (Cversion). For more information refer to <a class="el" href="cp_SWComponents.html#cp_Components">Software Components</a>.</p>
<p>If applicable, try to map the <b>Cclass</b> of your software component to one of the following predefined or already well established classes listed below. These <b>Cclass</b> names are pre-defined in the CMSIS pack using the <a class="el" href="element_taxonomy.html">taxonomy</a> element.</p>
<table class="doxtable">
<tr>
<th align="left">Cclass </th><th align="left">Description </th></tr>
<tr>
<td align="left">Audio </td><td align="left">Software components for audio processing </td></tr>
<tr>
<td align="left">Board Support </td><td align="left">Generic interfaces for evaluation and development boards </td></tr>
<tr>
<td align="left">Board Part * </td><td align="left">Drivers that support an external component available on an evaluation board </td></tr>
<tr>
<td align="left">CMSIS </td><td align="left"><em>Cortex Microcontroller Software Interface Standard</em> components </td></tr>
<tr>
<td align="left">CMSIS Driver </td><td align="left">Unified device drivers compliant to the CMSIS-Driver specification </td></tr>
<tr>
<td align="left">Compiler </td><td align="left">Arm Compiler software extensions </td></tr>
<tr>
<td align="left">Data Exchange </td><td align="left">Data exchange components or data formatter, for example JSON </td></tr>
<tr>
<td align="left">Device </td><td align="left">Startup and system setup components </td></tr>
<tr>
<td align="left">Extension Board * </td><td align="left">Drivers that support an extension boards or shield </td></tr>
<tr>
<td align="left">File System* </td><td align="left">File drive support and file system </td></tr>
<tr>
<td align="left">Graphics* </td><td align="left">Graphical libraries for user interfaces </td></tr>
<tr>
<td align="left">IoT Client * </td><td align="left">IoT cloud client connectors </td></tr>
<tr>
<td align="left">IoT Utility * </td><td align="left">IoT specific utilities, i.e. a socket interface </td></tr>
<tr>
<td align="left">Network* </td><td align="left">Network stack using Internet protocols </td></tr>
<tr>
<td align="left">RTOS* </td><td align="left">Real-time operating systems </td></tr>
<tr>
<td align="left">Security* </td><td align="left">Encryption for secure communication or storage </td></tr>
<tr>
<td align="left">USB* </td><td align="left">Universal Serial Bus stack </td></tr>
<tr>
<td align="left">Utility </td><td align="left">Generic software utility components </td></tr>
</table>
<p>Classes with a * should always be used together with a <a class="el" href="pdsc_components_pg.html#Component_Bundle">bundle</a> to avoid conflicts with other software components.</p>
<p>If you wish to standardize a new Cclass, please send an inquiry to <a href="#" onclick="location.href='mai'+'lto:'+'cms'+'is'+'@ar'+'m.'+'com'; return false;">cmsis<span style="display: none;">.nosp@m.</span>@arm<span style="display: none;">.nosp@m.</span>.com</a> or raise an issue on the public <a href="https://github.com/ARM-software/CMSIS_5/issues">CMSIS GitHub development repository</a>. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,538 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Pack with Software Components</title>
<title>CMSIS-Pack: Pack with Software Components</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cp_SWComponents.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Pack with Software Components </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>This section is a tutorial that explains how to create a Software Pack. Initially, a Software Pack with a simple PDSC file is created that contains only one software component. This Software Pack is then extended to show the various features for describing software components.</p>
<p><b>Preparations</b></p>
<ol type="1">
<li>Create a working directory on you PC, for example <b>C:\temp\working</b>.</li>
<li>Go to the directory <b>\CMSIS\Pack\Tutorials</b> available in the <b>ARM::CMSIS</b> Pack installation. Please consult your development tool's documentation for more information on the Pack installation directory structure. In a standard µVision installation, you will find it below <b>C:\Keil_v5\ARM\Pack\ARM\CMSIS\<em>version</em></b>.</li>
<li>Open the file <b>Pack_with_Software_Components.zip</b>.</li>
<li>Copy the <em>content</em> of the ZIP file's <b>01_Create_PDSC</b> directory into your working directory.</li>
<li>Make sure that files/directories are not write protected (remove read-only flag).</li>
<li>Copy from the directory <b>\CMSIS\Utilities</b> available in the <b>ARM::CMSIS</b> Pack installation the following files into your working directory:<ul>
<li>PackChk.exe</li>
<li>PACK.xsd</li>
</ul>
</li>
</ol>
<h1><a class="anchor" id="cp_CreatePDSC"></a>
Create PDSC File</h1>
<ol>
<li>
<p class="startli">Open the file <b>vendor.pack_name.pdsc</b> in an editor and change it like this: </p>
<div class="fragment"><div class="line">&lt;?xml version=<span class="stringliteral">&quot;1.0&quot;</span> encoding=<span class="stringliteral">&quot;UTF-8&quot;</span>?&gt;</div>
<div class="line">&lt;<span class="keyword">package </span>schemaVersion=&quot;1.4&quot; xmlns:xs=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xs:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;&gt;</span></div>
<div class="line"> &lt;vendor&gt;MyVendor&lt;/vendor&gt;</div>
<div class="line"> &lt;name&gt;MyPack&lt;/name&gt;</div>
<div class="line"> &lt;description&gt;Internal Software Pack&lt;/description&gt;</div>
<div class="line"> &lt;url&gt;&lt;/url&gt;</div>
<div class="line"> &lt;supportContact&gt;&lt;/supportContact&gt;</div>
<div class="line"> &lt;license&gt;Docs/license.txt&lt;/license&gt;</div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>All code examples in this and the following sections can be found in the <code>snippets.xml</code> file in the <b>01_Create_PDSC</b> directory.</dd></dl>
<p>A PDSC file starts with information on the XML version and the encoding. The <a class="el" href="pdsc_package_pg.html">&lt;package&gt;</a> element declares the version of the schema file and the XSD file that is used to validate the PDSC file (hence the copy of the PACK.xsd file into the working directory):</p>
<ul>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;name&gt;</a> specifies the name of the Pack and <em>must</em> <em>not</em> contain spaces. <b>Example:</b> <code>MyPack</code> and <code>My_Pack</code> are ok, <code>My</code> <code>Pack</code> is not ok.</li>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;description&gt;</a> describes the Pack in a few words</li>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;vendor&gt;</a> states the name of the Pack's vendor and <em>must</em> <em>not</em> contain spaces. <b>Example:</b> <code>ACMECorp</code> and <code>ACME_Corp</code> are OK, <code>ACME</code> <code>Corporation</code> is not OK.</li>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;url&gt;</a> defines the download URL of the Pack (may be left empty) <dl class="section note"><dt>Note</dt><dd><ul>
<li>In this tutorial, the URL is not specified. This means that the Pack will be marked in Pack Installer as <b>Offline</b> and needs to be updated manually. To resolve this issue, it is possible to specify the file "download" location using a <a href="https://en.wikipedia.org/wiki/File_URI_scheme" target="_blank">file URI</a>. For Windows users, this would look like the following: <pre class="fragment"> &lt;url&gt;file:///c:/temp/working&lt;/url&gt;</pre></li>
<li>It is important to understand how the &lt;url&gt; element works. If you specify a URL, for example <a href="http://www.keil.com/pack/" target="_blank">http://www.keil.com/pack</a>, then you have to make the PDSC file and the corresponding Pack file(s) available for download at that exact location. The naming of the files follow the standard naming rules. For example, the ARM::CMSIS PDSC and Pack files are available here:<br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.pdsc" target="_blank">http://www.keil.com/pack/ARM.CMSIS.pdsc</a> and <br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.4.3.0.pack" target="_blank">http://www.keil.com/pack/ARM.CMSIS.4.3.0.pack</a> and <br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.4.2.0.pack" target="_blank">http://www.keil.com/pack/ARM.CMSIS.4.2.0.pack</a> and ... <br/>
At the specified location, you need to have one (unversioned) PDSC file and can have multiple versioned Pack files, but at least the latest one.</li>
</ul>
</dd></dl>
</li>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;supportContact&gt;</a> may provide an email address or web page URL for Pack specific questions/problems</li>
<li><a class="el" href="pdsc_package_pg.html#element_package">&lt;license&gt;</a> links to an optional license file that will be shown during the installation of the Pack. The installation in development tools will abort if the license agreement is not accepted. </li>
</ul>
</li>
<li>
<p class="startli">Add release information and keywords: </p>
<div class="fragment"><div class="line">&lt;releases&gt;</div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;1.0.0&quot;</span> date=<span class="stringliteral">&quot;2015-03-09&quot;</span>&gt;</div>
<div class="line"> Initial version</div>
<div class="line"> &lt;/release&gt;</div>
<div class="line">&lt;/releases&gt;</div>
<div class="line"> </div>
<div class="line">&lt;keywords&gt;</div>
<div class="line"> &lt;keyword&gt;MyVendor&lt;/keyword&gt;</div>
<div class="line"> &lt;keyword&gt;My Software Component&lt;/keyword&gt;</div>
<div class="line">&lt;/keywords&gt;</div>
</div><!-- fragment --><p> The information from the <a class="el" href="element_releases.html">&lt;releases&gt;</a> section will be used for:</p>
<ul>
<li>Determining the Pack version (required for the file name of the Pack file)</li>
<li>Display of release information</li>
</ul>
<p class="endli"><a class="el" href="element_keywords.html">&lt;keywords&gt;</a> may be used for better visibility for search engines. </p>
</li>
<li>
Add a <a class="el" href="pdsc_components_pg.html">&lt;components&gt;</a> section with the following: <div class="fragment"><div class="line">&lt;components&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;MyClass&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span> Csub=<span class="stringliteral">&quot;MySubGroup&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;MySWComp&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/MySWComp.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/header_mylib.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/config/config_mylib.h&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/mylib_one.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/mylib_two.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line">&lt;/components&gt;</div>
</div><!-- fragment --> <dl class="section note"><dt>Note</dt><dd>If you are using a header file with the attribute <span class="XML-Token">config</span>, save it in a separate directory from all other header files as in this example. Configuration files are copied into the project folder and are adopted specifically for that project but chances are that due to the include path search order of the compiler, the unmodified header file in the pack repository is found first and used by the compiler (creating unexpected results).</dd></dl>
More information on <b>&lt;components&gt;</b> will be given in section <a class="el" href="cp_SWComponents.html#cp_Components">Software Components</a>. Save the file and close your editor. In the next section, the generation of a Pack will be explained in detail. </li>
</ol>
<h1><a class="anchor" id="cp_GeneratePack"></a>
Generate a Pack</h1>
<ol>
<li>
Rename the file <b>vendor.pack_name.pdsc</b> to <b>MyVendor.MyPack.pdsc</b>. </li>
<li>
Open the batch file <b>gen_pack.bat</b> from your working directory in a text editor. Check if the following line of code reflects your setup: <div class="fragment"><div class="line"><span class="stringliteral">&quot;C:\Program Files\7-Zip\7z.exe&quot;</span> a %PackName% Files -tzip</div>
</div><!-- fragment --> If you do not have <a href="http://www.7-zip.org/" target="_blank">7-Zip</a> installed on your PC, you can specify any other ZIP tool that supports command line calls. In that case you have to adapt the command line arguments accordingly. </li>
<li>
Having saved <b>gen_pack.bat</b>, you can execute it either by double-clicking or by using the command line which is recommended to see the output of PackChk.exe (open a command window at the location of the files and enter <code>gen_pack.bat</code>). The batch file will:<ul>
<li>Check the availability of the PDSC file</li>
<li>Copy the PDSC file to the <b>Files</b> directory</li>
<li>Run PackChk.exe on the <b>Files</b> directory<br/>
</li>
<li>Create a Pack file in the working directory. It will be called <b>MyVendor.MyPack.1.0.0.pack</b>. </li>
</ul>
</li>
<li>
<p class="startli">Install the Pack by double-clicking it. Depending on the development software that is used, the display of the Pack contents may differ:</p>
<div class="image">
<img src="simplepack_rte.png" alt="simplepack_rte.png"/>
<div class="caption">
MyClass:MyGroup:MySubGroup shown in development tool</div></div>
</li>
</ol>
<h1><a class="anchor" id="cp_Components"></a>
Software Components</h1>
<p>A component lists the files that belong to it and that are relevant for a project. The component itself or each individual file may refer to a <a class="el" href="pdsc_conditions_pg.html#element_condition">condition</a> that must resolve to true; if it is false, the component or file is not applicable in the given context.</p>
<p>Each software components must have the following attributes that are used to identify the component:</p>
<ul>
<li>Component Class (<code>Cclass</code>): examples are <b>CMSIS</b>, <b>Device</b>, <b>File</b> <b>System</b> </li>
<li>Component Group (<code>Cgroup</code>): examples are <b>CMSIS:RTOS</b>, <b>Device:Startup</b>, <b>File</b> <b>System:CORE</b> </li>
<li>Component Version (<code>Cversion</code>): the version number of the software component.</li>
</ul>
<p>Optionally, a software component may have additional attributes:</p>
<ul>
<li>Component Sub-Group (<code>Csub</code>): examples are <b>CMSIS:RTOS:MyRTOS</b>, <b>Device:Driver</b> <b>USBD:Full-speed</b> </li>
<li>Component Variant (<code>Cvariant</code>): a variant of the software component.</li>
<li>Component Vendor (<code>Cvendor</code>): the supplier of the software component.</li>
</ul>
<p>The <code>Cclass</code>, <code>Cgroup</code>, <code>Csub</code>, <code>Cvariant</code> and <code>Cversion</code> attributes are used together with the vendor specified by the Pack to identify a component. A component vendor must ensure that the combination <code>Cclass</code>, <code>Cgroup</code>, <code>Csub</code> and <code>Cversion</code> is unique and not used by multiple components within the same Pack.</p>
<p>For a list of established Cclasses, refer to <a class="el" href="cp_Packs.html#pack_Cclass">Software Component Cclasses</a>.</p>
<p>In case multiple interdependent components (belonging to the same <code>Cclass</code>) form part of a solution, these can be grouped in a so called <a class="el" href="cp_SWComponents.html#cp_Bundles">bundle</a>.</p>
<p>Use the following syntax to reference to software components and APIs:<br/>
<b>&lt;Vendor&gt;::&lt;Cclass&gt;:&lt;Cgroup&gt;:&lt;Csub&gt;</b></p>
<p><b>Examples:</b> </p>
<ul>
<li><b>::CMSIS:RTOS (API)</b> - the CMSIS-RTOS API.</li>
<li><b>ARM::CMSIS:DSP</b> - the CMSIS-DSP Library.</li>
<li><b>::File System:Drive:NOR</b> - the NOR Flash Drive of a file system.</li>
</ul>
<p>Here is an example for the display of software components in a development tool:</p>
<div class="image">
<img src="ComponentDisplay.png" alt="ComponentDisplay.png"/>
<div class="caption">
Display of a software component in development tools</div></div>
<h2>Software Component Files </h2>
<p>Each software component consists of a certain number of files. Each file has at least the following attributes:</p>
<ul>
<li><code>name:</code> File path, file name, and file extension in the format path/name.extension. The file path is relative to the root directory of the Pack.</li>
<li><code>category:</code> Defines the purpose of the file. Select the predefined value as listed in the table <a class="el" href="pdsc_components_pg.html#FileCategoryEnum">File Categories</a>.</li>
</ul>
<p>Optionally, every file may have the following attributes:</p>
<ul>
<li><code>attr:</code> Defines the special use and handling of a file. Select a predefined value as defined in the table <a class="el" href="pdsc_components_pg.html#FileAttributeEnum">File Attributes</a>.</li>
<li><code>condition:</code> Enter the identifier (attribute <em><b>id</b></em>) of a <a class="el" href="pdsc_conditions_pg.html#element_condition">condition</a>. The element is used if the condition resolves to <span class="XML-Token">true</span>.</li>
<li><code>select:</code> Brief description and purpose of the file. The <b><em>select</em></b> attribute is <b>required</b> when <b><em>attr</em></b> is set to <span class="XML-Token">template</span> or <span class="XML-Token">interface</span>. When multiple template files of a component have the same <b><em>select</em></b> string, they are treated as a single selectable template. This way, multiple template or interface files can be bundled.</li>
<li><code>src:</code> Path information. The path is specified relative to the Pack Description File (PDSC).</li>
<li><code>version:</code> File-specific version information. This is used particularly for files copied into the project workspace. Before a file gets copied, a version check avoids unnecessary copy actions. If a file does not have a version, then the component version is used.</li>
</ul>
<h1><a class="anchor" id="cp_Conditions"></a>
Conditions</h1>
<p>A condition describes dependencies on:</p>
<ul>
<li>a specific device</li>
<li>a certain processor</li>
<li>tool attributes</li>
<li>the presence of other components</li>
</ul>
<p>Conditions are used to define <b>AND/OR</b> rules that make components conditional and therefore only available under certain circumstances, for example for specific devices or processors. Conditions are also used to express dependencies between software components.</p>
<p>Each condition has an <b>id</b> that is unique within the scope of a the PDSC file. An id can be referenced in the <code>condition</code> attribute of components, APIs, examples, files and other conditions. All attributes set in a <b>accept</b>, <b>require</b>, or <b>deny</b> element must resolve to true for the element to become true. A condition becomes true when:</p>
<ul>
<li>At least one <b>accept</b> element is true, <em>AND</em> </li>
<li>all <b>require</b> elements are true, <em>AND</em> </li>
<li>no <b>deny</b> element is true.</li>
</ul>
<p>If a condition resolves to false during processing, the respective element will be ignored.</p>
<p>Let's modify the example from the <a class="el" href="cp_SWComponents.html#cp_CreatePDSC">Create PDSC File</a> section by adding the requirement for a CMSIS-RTOS and libraries that are specific to a certain Cortex-M class core:</p>
<ul>
<li><code>mylib_cm0.lib</code> for use with a Cortex-M0 and Cortex-M0+ processor</li>
<li><code>mylib_cm3.lib</code> for use with a Cortex-M3 processor</li>
<li><code>mylib_cm4.lib</code> for use with a Cortex-M4 or Cortex-M7 processor</li>
</ul>
<p>Copy the <em>content</em> of the <b>02_Conditions</b> directory of the <b>Pack_with_Software_Components.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add a <a class="el" href="pdsc_conditions_pg.html">&lt;conditions&gt;</a> section with the following: <div class="fragment"><div class="line">&lt;conditions&gt; </div>
<div class="line"> &lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;ARM Compiler&quot;</span>&gt;</div>
<div class="line"> &lt;require Tcompiler=<span class="stringliteral">&quot;ARMCC&quot;</span>/&gt;</div>
<div class="line"> &lt;/condition&gt;</div>
<div class="line"> &lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;CM0&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Cortex-M0 based device&lt;/description&gt;</div>
<div class="line"> &lt;require condition=<span class="stringliteral">&quot;ARM Compiler&quot;</span>/&gt;</div>
<div class="line"> &lt;accept Dcore=<span class="stringliteral">&quot;Cortex-M0&quot;</span>/&gt;</div>
<div class="line"> &lt;accept Dcore=<span class="stringliteral">&quot;Cortex-M0+&quot;</span>/&gt;</div>
<div class="line"> &lt;/condition&gt;</div>
<div class="line"> &lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;CM3&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Cortex-M3 based device&lt;/description&gt;</div>
<div class="line"> &lt;require condition=<span class="stringliteral">&quot;ARM Compiler&quot;</span>/&gt;</div>
<div class="line"> &lt;accept Dcore=<span class="stringliteral">&quot;Cortex-M3&quot;</span>/&gt;</div>
<div class="line"> &lt;/condition&gt;</div>
<div class="line"> &lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;CM4_CM7&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Cortex-M4 based device&lt;/description&gt;</div>
<div class="line"> &lt;require condition=<span class="stringliteral">&quot;ARM Compiler&quot;</span>/&gt;</div>
<div class="line"> &lt;accept Dcore=<span class="stringliteral">&quot;Cortex-M4&quot;</span>/&gt;</div>
<div class="line"> &lt;accept Dcore=<span class="stringliteral">&quot;Cortex-M7&quot;</span>/&gt;</div>
<div class="line"> &lt;/condition&gt;</div>
<div class="line"> &lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;CMSIS Core with RTOS&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;CMSIS Core with RTOS <span class="keywordflow">for</span> Cortex-M processor&lt;/description&gt;</div>
<div class="line"> &lt;accept condition=<span class="stringliteral">&quot;CM0&quot;</span>/&gt;</div>
<div class="line"> &lt;accept condition=<span class="stringliteral">&quot;CM3&quot;</span>/&gt;</div>
<div class="line"> &lt;accept condition=<span class="stringliteral">&quot;CM4_CM7&quot;</span>/&gt;</div>
<div class="line"> &lt;require Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;Core&quot;</span>/&gt;</div>
<div class="line"> &lt;require Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;RTOS&quot;</span>/&gt;</div>
<div class="line"> &lt;/condition&gt;</div>
<div class="line">&lt;/conditions&gt;</div>
</div><!-- fragment --> </li>
<li>
Change the first line of the already existing <b>component</b> by adding the condition and increasing the version number of the component: <div class="fragment"><div class="line">&lt;component Cclass=<span class="stringliteral">&quot;MyClass&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span> Csub=<span class="stringliteral">&quot;MySubGroup&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.1&quot;</span> condition=<span class="stringliteral">&quot;CMSIS Core with RTOS&quot;</span>&gt;</div>
</div><!-- fragment --> </li>
<li>
Add the following code to the already existing <b>component</b>: <div class="fragment"><div class="line">&lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM0&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm0.lib&quot;</span>/&gt;</div>
<div class="line">&lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM3&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm3.lib&quot;</span>/&gt;</div>
<div class="line">&lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM4_CM7&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm4.lib&quot;</span>/&gt;</div>
</div><!-- fragment --> Note that library files should always have a condition with regards to a specific C/C++ compiler. To accomplish this, each processor condition has the additional requirement for the Arm C/C++ compiler. </li>
<li>
Add a new version number to the header of the PDSC file so that a Pack with a new version number will be created: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.1&quot;</span>&gt;</div>
<div class="line"> Conditions added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.0.</p>
<div class="image">
<img src="ConditionsDisplay.png" alt="ConditionsDisplay.png"/>
<div class="caption">
Display of conditionally added files for a Cortex-M3 device in development tools</div></div>
</li>
</ol>
<dl class="section note"><dt>Note</dt><dd>PackChk.exe will will now display an <b>M362</b> warning: <div class="fragment"><div class="line"> WARNING M362: (Line 80)</div>
<div class="line"> Not all Component Dependencies <span class="keywordflow">for</span> <span class="stringliteral">&#39;Cclass=MyClass, Cgroup=MyGroup, Csub=MySubGroup, Cversion=1.0.1, Capiversion=&#39;</span> can be resolved.</div>
<div class="line">M502: RTE Model reports: #error 511: MyVendor::MyClass:MyGroup:MySubGroup : Additional software components required</div>
<div class="line">M504: RTE Model reports: MISSING: -- require CMSIS:CORE</div>
<div class="line">M504: RTE Model reports: MISSING: -- require CMSIS:RTOS</div>
</div><!-- fragment --> This is because it cannot resolve and check dependencies on components that are not part of this Pack (in this case the CMSIS components CORE and RTOS). You can either safely ignore these warnings or include the ARM.CMSIS.pdsc in the checking process, so that the correctness of the references to the CMSIS pack can be validated. <div class="fragment"><div class="line">PackChk.exe &lt;InFile.pdsc&gt; -i &lt;path to installed CMSIS pack&gt;\ARM.CMSIS.pdsc</div>
</div><!-- fragment --></dd></dl>
<h1><a class="anchor" id="cp_Variants"></a>
Variants</h1>
<p>Software components may have <b>variants</b>, for example:</p>
<ul>
<li>Debug version with or release version without diagnostic output</li>
<li>Long/short file names</li>
<li>Fast/slow modes</li>
</ul>
<p>Variants are mutually exclusive (only one variant can be chosen at a time). <code>Cvariant</code> is an optional part of the component ID. The variant specifier is a brief string (e.g. <code>release</code>, <code>debug</code>).</p>
<dl class="section note"><dt>Note</dt><dd>Version management relies on variants to <b>remain unchanged between versions</b>.</dd></dl>
<p>The following example introduces a new component to the Pack in two variants: <code>debug</code> and <code>release</code>. Copy the <em>content</em> of the <b>03_Variants</b> directory of the <b>Pack_with_Software_Components.zip</b> file to the <b>Files</b> directory in your working environment. </p>
<ol>
<li>
Add the following lines to the <b>components</b> section in your PDSC file: <div class="fragment"><div class="line">&lt;component Cclass=<span class="stringliteral">&quot;MyVariant&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span> Cvariant=<span class="stringliteral">&quot;Release&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.2&quot;</span> condition=<span class="stringliteral">&quot;CMSIS Core with RTOS&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Release version of MyVariant&lt;/description&gt;</div>
<div class="line"> &lt;RTE_Components_h&gt;</div>
<div class="line"> &lt;!-- the following content goes into file <span class="stringliteral">&#39;RTE_Components.h&#39;</span> --&gt;</div>
<div class="line"> #define RTE_MyVariant_Release <span class="comment">/* MyVariant Release Version */</span></div>
<div class="line"> &lt;/RTE_Components_h&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/MySWComp.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/header_mylib.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/config/config_mylib.h&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/mylib_one.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/mylib_two.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM0&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm0.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM3&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm3.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM4_CM7&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/mylib_cm4.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
<div class="line">&lt;component Cclass=<span class="stringliteral">&quot;MyVariant&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span> Cvariant=<span class="stringliteral">&quot;Debug&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.2&quot;</span> condition=<span class="stringliteral">&quot;CMSIS Core with RTOS&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Debug version of MyVariant&lt;/description&gt;</div>
<div class="line"> &lt;RTE_Components_h&gt;</div>
<div class="line"> &lt;!-- the following content goes into file <span class="stringliteral">&#39;RTE_Components.h&#39;</span> --&gt;</div>
<div class="line"> #define RTE_MyVariant_Debug <span class="comment">/* MyVariant Debug Version */</span></div>
<div class="line"> &lt;/RTE_Components_h&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/MySWComp.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/header_mylib.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/config/debug_config_mylib.h&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/debug_mylib_one.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/debug_mylib_two.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM0&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/debug_mylib_cm0.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM3&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/debug_mylib_cm3.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;library&quot;</span> condition=<span class="stringliteral">&quot;CM4_CM7&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Lib/debug_mylib_cm4.lib&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new revision to reflect the changes in a newly generated Pack: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.2&quot;</span>&gt;</div>
<div class="line"> Variants introduced</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.1.</p>
<div class="image">
<img src="VariantDisplay.png" alt="VariantDisplay.png"/>
<div class="caption">
Display of MyVariant in development tools</div></div>
</li>
</ol>
<h1><a class="anchor" id="cp_RTEComponents_h"></a>
RTE_Components.h</h1>
<p>Sometimes, software components need to know of other components. Depending on the availability or configuration of another component, certain settings may be required. A distinct header file is available to make components aware of each other: <b>RTE_Components.h</b>. To add a line of C code to this header file, simply add this to your component:</p>
<pre class="fragment">&lt;RTE_Components_h&gt;
#define RTE_MyVariant_Debug /* MyVariant Debug Version */
&lt;/RTE_Components_h&gt;
</pre><p> The <code>#define</code> can be checked by other components in a project.</p>
<dl class="section note"><dt>Note</dt><dd>The RTE_components.h file needs to be included somewhere in your source files. Refer to <a class="el" href="pdsc_components_pg.html#RTE_Components_h">RTE_Components.h</a> for more information.</dd></dl>
<h1><a class="anchor" id="cp_Bundles"></a>
Bundles</h1>
<p>A bundle is basically a variant on the <code>Cclass</code> level. It specifies the attributes <code>Cclass</code>, <code>Cversion</code> and optionally <code>Cgroup</code> and <code>Cvendor</code> for a collection of interdependent components. Components within a bundle inherit the attributes set by the bundle and must not set these attributes again. Bundles ensure consistency of attributes across multiple interworking components and restrict the mix and match of components within a <code>Cclass</code> from different solutions. In addition to components, a bundle has the mandatory elements <code>description</code> and <code>doc</code> (for documentation).</p>
<p>An example of a <b>bundle</b> is shown in the <a class="el" href="createPackBoard.html#cp_BundleExample">Create a BSP Bundle</a> section where the bundle is used to deliver board support files for a certain development platform.</p>
<h1><a class="anchor" id="cp_Instances"></a>
Instances</h1>
<p>Some <a class="el" href="pdsc_components_pg.html">software components</a> allow several instances. This is useful if more than one peripheral can be connected.</p>
<ol>
<li>
Adding the information about a maximum number of instances is easy. Change the first component (::MyClass:MyGroup:MySub) as follows: <div class="fragment"><div class="line">&lt;component Cclass=<span class="stringliteral">&quot;MyClass&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span> Csub=<span class="stringliteral">&quot;MySubGroup&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.3&quot;</span> condition=<span class="stringliteral">&quot;CMSIS Core with RTOS&quot;</span> maxInstances=<span class="stringliteral">&quot;3&quot;</span>&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.3&quot;</span>&gt;</div>
<div class="line"> Maximum number of instances specified</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.2. When selecting a certain number of instances of the component, causes the development tool to copy the required configuration files multiple times into the project. This ensures that each component instance can be configured separately.</p>
<div class="image">
<img src="maxInstancesDisplay.png" alt="maxInstancesDisplay.png"/>
<div class="caption">
Display of component instances in development tools</div></div>
</li>
</ol>
<h1><a class="anchor" id="cp_API"></a>
API Interface</h1>
<p>An <a class="el" href="pdsc_apis_pg.html">API</a> is a special form of a software component that only defines a C/C++ Application Programming Interface (API). An API does not contain the actual implementation (usually provided by source code or library files) and cannot be selected in a development tool. One example is the CMSIS-RTOS API, which is specified as part of CMSIS. However, the actual RTOS implementation is provided by different vendors. An API consists of a name, a brief description as well as one or more header files, and a document containing a detailed specification of the API.</p>
<p>Copy the <em>content</em> of the <b>05_APIs</b> directory of the <b>Pack_with_Software_Components.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add a <a class="el" href="pdsc_apis_pg.html">&lt;apis&gt;</a> section with the following: <div class="fragment"><div class="line">&lt;api Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;MyAPI&quot;</span> exclusive=<span class="stringliteral">&quot;0&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;API <span class="keywordflow">for</span> MyAPI&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/API/MyAPI.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;API/Include/MyAPI.h&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/api&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.4&quot;</span>&gt;</div>
<div class="line"> MyAPI added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.3. Most likely, you will see none as APIs are not selectable and are thus not displayed in the tools. </li>
</ol>
<h1><a class="anchor" id="cp_CodeTemplates"></a>
User Code Templates</h1>
<p>User code templates provide a quick start for implementing an application. To add user code templates, add source files with the attribute <code>attr=“template”</code> in a <code>&lt;component&gt;</code>. The <code>select</code> attribute is used to identify template files. Template files with the same <code>select</code> attribute will be added to a project simultaneously.</p>
<p>Copy the <em>content</em> of the <b>06_User_Code_Templates</b> directory of the <b>Pack_with_Software_Components.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add the following code to both variants (<code>debug</code> and <code>release</code>) of the ::MyVariant:MyGroup component: <div class="fragment"><div class="line">&lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Templates/mylib_template1.c&quot;</span> attr=<span class="stringliteral">&quot;template&quot;</span> select=<span class="stringliteral">&quot;Easy Template&quot;</span>/&gt;</div>
<div class="line">&lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Templates/mylib_template2.c&quot;</span> attr=<span class="stringliteral">&quot;template&quot;</span> select=<span class="stringliteral">&quot;Complex Template&quot;</span>/&gt;</div>
<div class="line">&lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Templates/mylib_template3.c&quot;</span> attr=<span class="stringliteral">&quot;template&quot;</span> select=<span class="stringliteral">&quot;Complex Template&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.5&quot;</span>&gt;</div>
<div class="line"> User Code Templates added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.4.</p>
<div class="image">
<img src="UserCodeTemplatesDisplay.png" alt="UserCodeTemplatesDisplay.png"/>
<div class="caption">
Display of user code templates in development tools</div></div>
</li>
</ol>
<h1><a class="anchor" id="cp_Examples"></a>
Example Projects</h1>
<p>Example projects help to understand a certain MCU or development board better. An example and each individual file of it may refer to a condition that must resolve to true; if it is false, the example or file will be ignored. The board element is used to reference to one or more board descriptions using the board vendor and name an example is targeted for. Each example can specify attributes listing related components using <code>Cclass</code>, <code>Cgroup</code>, <code>Csub</code> and <code>Cversion</code>. The <b>&lt;project&gt;</b> element contains the names of the supported development tools and the project files to be loaded.</p>
<p>Copy the <em>content</em> of the <b>07_Example_Projects</b> directory of the <b>Pack_with_Software_Components.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add an <a class="el" href="pdsc_examples_pg.html">&lt;examples&gt;</a> section with the following: <div class="fragment"><div class="line">&lt;examples&gt;</div>
<div class="line"> &lt;example name=<span class="stringliteral">&quot;MyDevBoard Example&quot;</span> doc=<span class="stringliteral">&quot;Abstract.txt&quot;</span> folder=<span class="stringliteral">&quot;MyPackExample&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;CMSIS-RTOS based example&lt;/description&gt;</div>
<div class="line"> &lt;board name=<span class="stringliteral">&quot;MyDevBoard&quot;</span> vendor=<span class="stringliteral">&quot;MyVendor&quot;</span>/&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> &lt;environment name=<span class="stringliteral">&quot;uv&quot;</span> load=<span class="stringliteral">&quot;MyPackExample.uvprojx&quot;</span>/&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;attributes&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;Core&quot;</span>/&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;Startup&quot;</span>/&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;RTOS&quot;</span>/&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;MyVariant&quot;</span> Cgroup=<span class="stringliteral">&quot;MyGroup&quot;</span>/&gt;</div>
<div class="line"> &lt;/attributes&gt;</div>
<div class="line"> &lt;/example&gt;</div>
<div class="line">&lt;/examples&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.6&quot;</span>&gt;</div>
<div class="line"> Example project added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.5.</p>
<div class="image">
<img src="ExampleDisplay.png" alt="ExampleDisplay.png"/>
<div class="caption">
Display of example projects in development tools</div></div>
</li>
</ol>
<p>Example projects rely on a development board to be present (as the code needs to run on real hardware). In the code above you will notice that a development board called "MyDevBoard" was specified. <a class="el" href="createPackBoard.html">Pack with Board Support</a> explains how to integrate boards into a Pack. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,130 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>ZIP Compression Tools</title>
<title>CMSIS-Pack: ZIP Compression Tools</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cp_ZIPTool.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">ZIP Compression Tools </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Any ZIP software utility supporting the compression method <a href="http://en.wikipedia.org/wiki/DEFLATE" target="_blank">DEFLATE</a> can be used to create a Pack file. Simply, create the ZIP file and rename it to *.pack.</p>
<p>The compression tool <a href="http://www.7-zip.org/" target="_blank">7-Zip</a> supports command line calls and can be used in batch scripts like <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> for automated Pack file creation (and verification with <a class="el" href="packChk.html">packChk.exe</a>). Installers for 7-Zip are available for 32-bit and 64-bit Windows operating systems. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="createPackUtil.html">Utilities for Creating Packs</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,753 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Project Description (*.cpdsc) Format</title>
<title>CMSIS-Pack: Project Description (*.cpdsc) Format</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('cpdsc_pg.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Project Description (*.cpdsc) Format </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The CPDSC format provides the XML elements for defining CMSIS software projects. The CPDSC file content is considered static, so you do not have to keep the projects synchronized.</p>
<p>The scope of the description includes:</p>
<ul>
<li>CMSIS Run-Time Environment configuration (RTE)</li>
<li>Project build, including linker script generation</li>
<li>Flash programming</li>
<li>Basic configuration of debug probs</li>
</ul>
<p>The project format creates a basic project configuration and does not reflect tool-specific features or configurations. The import and conversion from the CPDSC format into a toolchain-specific format is the responsibility of the tool vendor.</p>
<h1><a class="anchor" id="cpdsc_definition"></a>
Definition of CMSIS project</h1>
<p>A CMSIS software project is a collection of files in a directory structure. The CPDSC file is located in the base folder of the directory structure. Only one CPDSC file is allowed. A CPDSC file can describe one or more projects.</p>
<p><b>Example</b> CMSIS Project Description File (*.cpdsc): </p>
<div class="fragment"><div class="line">&lt;?xml version=<span class="stringliteral">&quot;1.0&quot;</span> encoding=<span class="stringliteral">&quot;UTF-8&quot;</span> standalone=<span class="stringliteral">&quot;no&quot;</span> ?&gt;</div>
<div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;&gt;</span></div>
<div class="line"> &lt;vendor&gt;Keil&lt;/vendor&gt;</div>
<div class="line"> &lt;name&gt;STM32F407_Flash&lt;/name&gt;</div>
<div class="line"> &lt;description&gt;CMSIS RTOS Blinky for STM32F407 microcontroller using Keil &#39;MCBSTM32F400 Evaluation Board.&lt;/description&gt;</div>
<div class="line"> &lt;url&gt;www.keil.com/pack/Keil.STM32F4xx_DFP.pdsc&lt;/url&gt;</div>
<div class="line"></div>
<div class="line"> &lt;releases&gt;</div>
<div class="line"> &lt;release version=&quot;5.25.1&quot;&gt;Generated 2018-02-20T09:10:26&lt;/release&gt;</div>
<div class="line"> &lt;/releases&gt;</div>
<div class="line"></div>
<div class="line"> &lt;requirements&gt;</div>
<div class="line"> &lt;packages&gt;</div>
<div class="line"> &lt;package name=&quot;CMSIS&quot; vendor=&quot;ARM&quot;/&gt;</div>
<div class="line"> &lt;package name=&quot;MDK-Middleware&quot; vendor=&quot;Keil&quot;/&gt; </div>
<div class="line"> &lt;package name=&quot;STM32F4xx_DFP&quot; vendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;/packages&gt;</div>
<div class="line"> &lt;/requirements&gt;</div>
<div class="line"></div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> &lt;target Ddsp=&quot;NO_DSP&quot; Dendian=&quot;Little-endian&quot; Dfpu=&quot;SP_FPU&quot; Dname=&quot;STM32F407IGHx&quot; Dtz=&quot;NO_TZ&quot; Dvendor=&quot;STMicroelectronics:13&quot;&gt;</div>
<div class="line"> &lt;output debug=&quot;1&quot; name=&quot;Blinky&quot; type=&quot;exe&quot;/&gt;</div>
<div class="line"> &lt;debugProbe coreClock=&quot;10000000&quot; name=&quot;ULINK2&quot; protocol=&quot;swd&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rx&quot; default=&quot;1&quot; name=&quot;IROM1&quot; size=&quot;0x100000&quot; start=&quot;0x8000000&quot; startup=&quot;1&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rw&quot; default=&quot;1&quot; init=&quot;1&quot; name=&quot;IRAM1&quot; size=&quot;0x20000&quot; start=&quot;0x20000000&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rw&quot; default=&quot;0&quot; init=&quot;1&quot; name=&quot;IRAM2&quot; size=&quot;0x10000&quot; start=&quot;0x10000000&quot;/&gt;</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> &lt;select&gt;</div>
<div class="line"> &lt;component Cclass=&quot;CMSIS&quot; Cgroup=&quot;CORE&quot; Cvendor=&quot;ARM&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;CMSIS&quot; Cgroup=&quot;RTOS&quot; Csub=&quot;Keil RTX&quot; Cvendor=&quot;ARM&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; name=&quot;CMSIS/RTOS/RTX/Templates/RTX_Conf_CM.c&quot; version=&quot;4.70.1&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cbundle=&quot;MCBSTM32F400&quot; Cclass=&quot;Board Support&quot; Cgroup=&quot;A/D Converter&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cbundle=&quot;MCBSTM32F400&quot; Cclass=&quot;Board Support&quot; Cgroup=&quot;Buttons&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cbundle=&quot;MCBSTM32F400&quot; Cclass=&quot;Board Support&quot; Cgroup=&quot;LED&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube Framework&quot; Csub=&quot;Classic&quot; Cvendor=&quot;Keil&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;header&quot; name=&quot;CMSIS/Driver/Config/RTE_Device.h&quot; version=&quot;2.4.4&quot;/&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;header&quot; name=&quot;MDK/Templates/Inc/stm32f4xx_hal_conf.h&quot; version=&quot;1.6.0&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;ADC&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;Common&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;Cortex&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;DMA&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;GPIO&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;PWR&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;RCC&quot; Cvendor=&quot;Keil&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;Startup&quot; Cvendor=&quot;Keil&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; condition=&quot;STM32F407xx_ARMCC&quot; name=&quot;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f407xx.s&quot; version=&quot;2.6.0&quot;/&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; name=&quot;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&quot; version=&quot;2.6.0&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;/select&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;group name=&quot;Source Files&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Blinky.c&quot;/&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Thread_LED.c&quot;/&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Thread_ADC.c&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;group name=&quot;Documentation&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;doc&quot; name=&quot;./Abstract.txt&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><h1><a class="anchor" id="cpdsc_structure"></a>
CPDSC top level structure</h1>
<p>The CPDSC file format shares the schema file (PACK.xsd) with the PDSC and GPDSC format. However, a CPDSC file can only contain the top level elements listed in this table.</p>
<h1><a class="anchor" id="element_package_cpdsc"></a>
/package (for CPDSC)</h1>
<table class="cmtable" summary="Element: CPDSC package">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td>root </td><td colspan="3">description root point for CPDSC </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>schemaVersion </td><td>Version of PACK.xsd the description is compatible with </td><td>VersionType </td><td>required </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td>name </td><td>Name of the CPDSC <a class="el" href="cp_SWComponents.html">Software Pack</a> file. Could be displayed by an installer. </td><td>RestrictedString </td><td>1..1 </td></tr>
<tr>
<td>vendor </td><td>Creator or owner of the CPDSC file. </td><td>RestrictedString </td><td>1..1 </td></tr>
<tr>
<td>description </td><td>High level description of the projects. </td><td>xs:string </td><td>1..1 </td></tr>
<tr>
<td>url </td><td>File location if generated, link to the Pack this file belongs to. If left empty, the Pack cannot be updated automatically from a server location. </td><td>xs:anyURI </td><td>1..1 </td></tr>
<tr>
<td>supportContact </td><td>Email or web page for reporting errors or problems related to this project. </td><td>xs:string </td><td>0..1 </td></tr>
<tr>
<td>license </td><td>Reference to a license file relative to this CPDSC. </td><td>xs:string </td><td>0..1 </td></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_requirements">requirements</a> </td><td>Specify required packs, compiler, and programming languages for the project. </td><td>RequirementsType </td><td>1..1 </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_create_pg">create</a> </td><td>Section capturing the project configuration. </td><td>CreateType </td><td>1..1 </td></tr>
<tr>
<td><a class="el" href="element_releases.html">releases</a> </td><td>Release history and release notes for tracking changes to this project. The attributes <b>&lt;deprecated&gt;</b> and <b>&lt;replacement&gt;</b> are not supported in the context of CPDSC files. </td><td>ReleasesType </td><td>1..1 </td></tr>
</table>
<p>You can refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a> for more details.</p>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="cpdsc_create_pg"></a>
/package/create</h1>
<p>This element groups one or more projects, which should be related. For example, the Secure and Non-secure part of an application, or a set of library projects and the final application project. We recommend to use different CPDSC files for each individual project.</p>
<table class="cmtable" summary="Element: create">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_package_cpdsc">package</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_package_cpdsc">/package</a> </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project">project</a> </td><td>Grouping element to add project descriptions </td><td>ProjectType </td><td>1..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_project"></a>
/package/create/project</h1>
<p>This element bundles one project.</p>
<p><b>Example</b> <em>project</em> section: </p>
<div class="fragment"><div class="line">&lt;?xml version=<span class="stringliteral">&quot;1.0&quot;</span> encoding=<span class="stringliteral">&quot;UTF-8&quot;</span> standalone=<span class="stringliteral">&quot;no&quot;</span> ?&gt;</div>
<div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project name=&quot;STM32F429_Flash&quot; documentation=&quot;./Abstract.txt&quot;&gt;</div>
<div class="line"> &lt;target Dendian=&quot;Little-endian&quot; Dfpu=&quot;SP_FPU&quot; Dname=&quot;STM32F429ZITx&quot; Dvendor=&quot;STMicroelectronics:13&quot;&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> &lt;select&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/select&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: project">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_create_pg">create</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_create_pg">/package/create</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Name of the project. Will be used as file name as well. If not specified, then the name on the package level is used. </td><td>RestrictedString </td><td>optional </td></tr>
<tr>
<td>documentation </td><td>Path and file name of a document relative to the CPDSC file, or an url providing detailed information about the software project. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>public </td><td>Set publishing permissions for the documentation. If <em>&lt;public&gt;</em> is <span class="XML-Token">true</span>, then the vendor gives permission to extract the documentation from the pack and publish it on a web-page. Links to web pages are assumed to be public. The default value is <span class="XML-Token">false</span>. </td><td>xs:boolean </td><td>optional </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">target</a> </td><td>Section containing details, for example about the board, device, memory, debug, or algorithms. </td><td>TargetType </td><td>1..1 </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_select_pg">select</a> </td><td>Specify the software components selected in the Run-Time Environment (RTE). </td><td>SelectType </td><td>0..1 </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_files_pg">files</a> </td><td>List all files used for the project build, which are not configured using components. </td><td>ProjectFilesType </td><td>0..1 </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="cpdsc_target_pg"></a>
/package/create/project/target</h1>
<p>This element describes the hardware target, including memory layout, debug probes, or flash programming algorithms.</p>
<p><b>Example</b> <em>target</em> section:</p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;target Dendian=&quot;Little-endian&quot; Dfpu=&quot;SP_FPU&quot; Dname=&quot;STM32F429ZITx&quot; Dvendor=&quot;STMicroelectronics:13&quot;&gt;</div>
<div class="line"> &lt;output debug=&quot;1&quot; name=&quot;Blinky&quot; type=&quot;exe&quot;/&gt;</div>
<div class="line"> &lt;debugProbe coreClock=&quot;10000000&quot; name=&quot;ST-Link&quot; protocol=&quot;swd&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rx&quot; default=&quot;1&quot; name=&quot;IROM1&quot; size=&quot;0x200000&quot; start=&quot;0x8000000&quot; startup=&quot;1&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rw&quot; default=&quot;1&quot; init=&quot;1&quot; name=&quot;IRAM1&quot; size=&quot;0x30000&quot; start=&quot;0x20000000&quot;/&gt;</div>
<div class="line"> &lt;memory access=&quot;rw&quot; default=&quot;0&quot; init=&quot;1&quot; name=&quot;IRAM2&quot; size=&quot;0x10000&quot; start=&quot;0x10000000&quot;/&gt;</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: target">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project">project</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_project">/package/create/project</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>Bvendor </td><td>Board vendor name. Either a board vendor and board name with optional board revision, or a device vendor and a device name. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Bname </td><td>SPecify the board name. Either a board vendor and board name with optional board revision, or a device vendor and a device name. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Bversion </td><td>Board version. Either a board vendor and board name with optional board revision, or a device vendor and a device name. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Dvendor </td><td>Device vendor name. Either a board vendor and board name with optional board revision, or a device vendor and a device name. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Dname </td><td>Device name. Either a board vendor and board name with optional board revision, or a device vendor and a device name. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Pname </td><td>Processor instance name. In case of multi-processor devices, this processor ID is required. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Dfpu </td><td>Selects the floating point unit option that is active for the project. <b>Note</b>, even if the device implements an FPU, setting <span class="XML-Token">Dfpu=0</span> here, will disable FPU code generation. Use predefined values from the table <a class="el" href="pdsc_family_pg.html#DfpuEnum">Device FPU</a>. </td><td>DfpuEnum </td><td>optional </td></tr>
<tr>
<td><p class="starttd">Dendian</p>
<p class="endtd"></p>
</td><td>Selects the endianness to be used for the project. Note that selecting an endianness that is not supported by the device, will result in a build that will not run on the device. Use predefined values from the table <a class="el" href="pdsc_family_pg.html#DendianEnum">DendianEnum</a>. </td><td>DendianEnum </td><td>optional </td></tr>
<tr>
<td>Dmpu </td><td>Selects the memory protection unit to be enabled or disabled for the project. Use predefined values from the table <a class="el" href="pdsc_family_pg.html#DmpuEnum">Device MPU</a>. </td><td>DmpuEnum </td><td>optional </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_output">output</a> </td><td>Configure the build output name and type, and specify whether to include debug information. </td><td>OutputType </td><td>1..1 </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_target_memory">memory</a> </td><td>Specify the memory configuration for this application. Based on the memory layout, the linker script will be generated by the toolchain. </td><td>TargetMemoryType </td><td>0..* </td></tr>
<tr>
<td>stack </td><td>Specify the stack size in bytes allocated by the linker to the application. This element consists of one attribute named <em>&lt;size&gt;</em>. Set the value for this attribute. Only positive numbers are allowed. </td><td>StackType </td><td>1..1 </td></tr>
<tr>
<td>heap </td><td>Specify the heap size in bytes allocated by the linker to the application. This element consists of one attribute named <em>&lt;size&gt;</em>. Set the value for this attribute. Only positive numbers are allowed. </td><td>HeapType </td><td>1 </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_target_algorithm">algorithm</a> </td><td>Selects from the list of available flash programming algorithms specified for this device in the corresponding Device Family Pack. Target and RAM memory ranges can be reconfigured from the defaults specified in the device description. </td><td>TargetAlgorithmType </td><td>0..* </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_debugProbe">debugProbe</a> </td><td>Selects and configures the debug probe to be used for this project. </td><td>DebugProbeType </td><td>0..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_target_algorithm"></a>
/package/create/project/target/algorithm</h1>
<p><b>Example</b> <em>algorithm</em> element </p>
<div class="fragment"><div class="line">...</div>
<div class="line"> &lt;project name=<span class="stringliteral">&quot;STM32F429_Flash&quot;</span> documentation=<span class="stringliteral">&quot;./Abstract.txt&quot;</span>&gt;</div>
<div class="line"> &lt;target Dendian=<span class="stringliteral">&quot;Little-endian&quot;</span> Dfpu=<span class="stringliteral">&quot;SP_FPU&quot;</span> Dname=<span class="stringliteral">&quot;STM32F429ZITx&quot;</span> Dvendor=<span class="stringliteral">&quot;STMicroelectronics:13&quot;</span>&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;algorithm name=<span class="stringliteral">&quot;CMSIS/Flash/STM32F4xx_1024.FLM&quot;</span> start=<span class="stringliteral">&quot;0x08000000&quot;</span> size=<span class="stringliteral">&quot;0x100000&quot;</span> RAMstart=0x20000000 RAMsize=0x1000/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line">...</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: algorithm">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">target</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">/package/create/project/target</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>Pname </td><td>Processor name </td><td>xs:string </td><td>RestrictedString </td></tr>
<tr>
<td>name </td><td>References the name (without path) of the flash programming algorithm as defined by the DFP. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>start </td><td>Overrides the predefined programming start address of the flash programming algorithm as specified in the DFP. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>size </td><td>Overrides the predefined programming size of the flash programming algorithm as specified in the DFP. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>RAMstart </td><td>Overrides the predefined start address in RAM where the flash programming algorithm is loaded as specified in the DFP. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>RAMsize </td><td>Overrides the predefined RAM size in RAM where the flash programming algorithm is loaded as specified in the DFP. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>default </td><td>Sets this algorithm as the default algorithm for flash programming when the value is set to <span class="XML-Token">1</span>. The defualt value is <span class="XML-Token">0</span> - false. </td><td>xs:boolean </td><td>optional </td></tr>
<tr>
<td>style </td><td>Sets flash programming format. The default value is <span class="XML-Token">Keil</span>. Use the predefinde values as listed in the table <a class="el" href="pdsc_family_pg.html#AlgorithmStyleEnum">Algorithm Styles</a>. </td><td>AlgorithmStyleType </td><td>optional </td></tr>
<tr>
<td>parameter </td><td>Parameter string passed when invoking the algorithm. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>endian </td><td>Specify the endianness of the algorithm. Default value is <span class="XML-Token">Little-endian</span>. Use the predefined values as listed in the table <a class="el" href="pdsc_family_pg.html#DendianEnum">Endinaness</a>. </td><td>DendianEnum </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_debugProbe"></a>
/package/create/project/target/debugProbe</h1>
<p>Specify the attributes of a debug probe.</p>
<p><b>Example</b> <em>debugProbe</em> element </p>
<div class="fragment"><div class="line">...</div>
<div class="line"> &lt;project name=<span class="stringliteral">&quot;STM32F429_Flash&quot;</span> documentation=<span class="stringliteral">&quot;./Abstract.txt&quot;</span>&gt;</div>
<div class="line"> &lt;target Dendian=<span class="stringliteral">&quot;Little-endian&quot;</span> Dfpu=<span class="stringliteral">&quot;SP_FPU&quot;</span> Dname=<span class="stringliteral">&quot;STM32F429ZITx&quot;</span> Dvendor=<span class="stringliteral">&quot;STMicroelectronics:13&quot;</span>&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;debugProbe coreClock=<span class="stringliteral">&quot;10000000&quot;</span> name=<span class="stringliteral">&quot;ST-Link&quot;</span> protocol=<span class="stringliteral">&quot;swd&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line">...</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: debugProbe">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">target</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">/package/create/project/target</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Name of of the debug probe, for example <span class="XML-Token">JLink</span>, <span class="XML-Token">ULink2</span>, <span class="XML-Token">ULinkPro</span>, <span class="XML-Token">CMSIS-DAP</span>, or <span class="XML-Token">ST-Link</span>. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>protocol </td><td>Select the debug protocol, for example, <span class="XML-Token">swd</span>. Use the predefined values listed in the table <a class="el" href="pdsc_family_pg.html#DebugProtocolEnum">Debug Protocol Type</a>. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>coreClock </td><td>Clock frequency of the core once the system is initialized. </td><td>NonNegativeInteger </td><td>required </td></tr>
<tr>
<td>tpiuClock </td><td>Clock frequency of the TPIU block of the CoreSight debug logic. Only relevant for tracing. </td><td>NonNegativeInteger </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_target_memory"></a>
/package/create/project/target/memory</h1>
<p>Specify the memory layout. The linker script file will be genereted according to these settings.</p>
<p><b>Example</b> <em>memory</em> element </p>
<div class="fragment"><div class="line">...</div>
<div class="line"> &lt;project name=<span class="stringliteral">&quot;STM32F429_Flash&quot;</span> documentation=<span class="stringliteral">&quot;./Abstract.txt&quot;</span>&gt;</div>
<div class="line"> &lt;target Dendian=<span class="stringliteral">&quot;Little-endian&quot;</span> Dfpu=<span class="stringliteral">&quot;SP_FPU&quot;</span> Dname=<span class="stringliteral">&quot;STM32F429ZITx&quot;</span> Dvendor=<span class="stringliteral">&quot;STMicroelectronics:13&quot;</span>&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;memory access=<span class="stringliteral">&quot;rx&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span> name=<span class="stringliteral">&quot;IROM1&quot;</span> size=<span class="stringliteral">&quot;0x200000&quot;</span> start=<span class="stringliteral">&quot;0x8000000&quot;</span> startup=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;memory access=<span class="stringliteral">&quot;rw&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span> init=<span class="stringliteral">&quot;1&quot;</span> name=<span class="stringliteral">&quot;IRAM1&quot;</span> size=<span class="stringliteral">&quot;0x30000&quot;</span> start=<span class="stringliteral">&quot;0x20000000&quot;</span>/&gt;</div>
<div class="line"> &lt;memory access=<span class="stringliteral">&quot;rw&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;0&quot;</span> init=<span class="stringliteral">&quot;1&quot;</span> name=<span class="stringliteral">&quot;IRAM2&quot;</span> size=<span class="stringliteral">&quot;0x10000&quot;</span> start=<span class="stringliteral">&quot;0x10000000&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line">...</div>
</div><!-- fragment --><p><br/>
</p>
<table class="cmtable" summary="Element: memory">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">target</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">/package/create/project/target</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>Pname </td><td>Identifies the processor. </td><td>RestrictedString </td><td>optional </td></tr>
<tr>
<td>id </td><td>Eunmerated ID of memory. <span class="XML-Token">Deprecated since version 1.4.4</span> </td><td>MemoryIDTypeEnum </td><td>optional </td></tr>
<tr>
<td>name </td><td>Reference to the name of the memory as defined by the DFP. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>start </td><td>Overrides the predefined memory start address. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>size </td><td>Overrides the predefined memory size. </td><td>NonNegativeInteger </td><td>optional </td></tr>
<tr>
<td>access </td><td>Overrides the predefined access permissions for the memory as specified in the DFP. The default value is <span class="XML-Token">r</span>, for 'read' permission. Use the predefined values defined in the table <a class="el" href="pdsc_family_pg.html#MemoryAccessTypeString">MemoryAccessTypeString</a>. </td><td>AccessType </td><td>optional </td></tr>
<tr>
<td>alias </td><td>Reference by 'name' to another memory to express that the same physical memory is mapped at another address. </td><td>AccessType </td><td>optional </td></tr>
<tr>
<td>init </td><td><span class="XML-Token">Deprecated; do not use! Ignore!!!</span>. </td><td>xs:boolean </td><td>optional </td></tr>
<tr>
<td>default </td><td>Use to define the default memory for the linker. </td><td>xs:boolean </td><td>optional </td></tr>
<tr>
<td>startup </td><td>Specify whether the memory is used by the linker for the startup. The default value is <span class="XML-Token">0</span> - false. </td><td>xs:boolean </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_output"></a>
/package/create/project/target/output</h1>
<p>Specify the characteristics for the build output file.</p>
<p><b>Example</b> <em>output</em> element </p>
<div class="fragment"><div class="line">&lt;project name=<span class="stringliteral">&quot;STM32F429_Flash&quot;</span> documentation=<span class="stringliteral">&quot;./Abstract.txt&quot;</span>&gt;</div>
<div class="line"> &lt;target Dendian=<span class="stringliteral">&quot;Little-endian&quot;</span> Dfpu=<span class="stringliteral">&quot;SP_FPU&quot;</span> Dname=<span class="stringliteral">&quot;STM32F429ZITx&quot;</span> Dvendor=<span class="stringliteral">&quot;STMicroelectronics:13&quot;</span>&gt;</div>
<div class="line"> &lt;output debug=<span class="stringliteral">&quot;1&quot;</span> name=<span class="stringliteral">&quot;Blinky&quot;</span> type=<span class="stringliteral">&quot;exe&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/target&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/project&gt;</div>
</div><!-- fragment --><p><br/>
</p>
<table class="cmtable" summary="Element: output">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">target</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_target_pg">/package/create/project/target</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Name of the build output file. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>type </td><td>Select the build target to be <span class="XML-Token">lib</span> - library or <span class="XML-Token">exe</span> - executable. You can use the wildcard <span class="XML-Token">*</span> for </td><td>CompilerOutputType </td><td>required </td></tr>
<tr>
<td>debug </td><td>Select whether the output will contain debug information. Use the values <span class="XML-Token">1;0</span> for true and false. </td><td>xs:boolean </td><td>required </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="cpdsc_select_pg"></a>
/package/create/project/select</h1>
<p>This element lists all software components that are selected within the Manage Run-Time Environment.</p>
<p><b>Example</b> <em>select</em> section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;select&gt;</div>
<div class="line"> &lt;component Cclass=&quot;CMSIS&quot; Cgroup=&quot;Core&quot; Cvendor=&quot;ARM&quot; Cversion=&quot;4.1.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;CMSIS&quot; Cgroup=&quot;RTOS&quot; Csub=&quot;Keil RTX&quot; Cvendor=&quot;ARM&quot; Cversion=&quot;4.78.0&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; name=&quot;CMSIS/RTOS/RTX/Templates/RTX_Conf_CM.c&quot; version=&quot;4.70.1&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cbundle=&quot;STM32F429I-Discovery&quot; Cclass=&quot;Board Support&quot; Cgroup=&quot;Buttons&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.0.0&quot;/&gt;</div>
<div class="line"> &lt;component Cbundle=&quot;STM32F429I-Discovery&quot; Cclass=&quot;Board Support&quot; Cgroup=&quot;LED&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.0.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube Framework&quot; Csub=&quot;Classic&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;header&quot; name=&quot;CMSIS/Driver/Config/RTE_Device.h&quot; version=&quot;2.3.1&quot;/&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;header&quot; name=&quot;MDK/Templates/Inc/stm32f4xx_hal_conf.h&quot; version=&quot;1.4.2&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;Common&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;Cortex&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;GPIO&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;PWR&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;STM32Cube HAL&quot; Csub=&quot;RCC&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;1.4.0&quot;/&gt;</div>
<div class="line"> &lt;component Cclass=&quot;Device&quot; Cgroup=&quot;Startup&quot; Cvendor=&quot;Keil&quot; Cversion=&quot;2.4.0&quot;&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; condition=&quot;STM32F429xx_ARMCC&quot; name=&quot;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429xx.s&quot; version=&quot;2.4.2&quot;/&gt;</div>
<div class="line"> &lt;file attr=&quot;config&quot; category=&quot;source&quot; name=&quot;Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c&quot; version=&quot;2.4.2&quot;/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;/select&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: select">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project">project</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_project">/package/create/project</a> </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_component">component</a> </td><td>Group element for defining the selected software components. </td><td>ComponentSelectType </td><td>1..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_project_component"></a>
/package/create/project/select/component</h1>
<p>Specify the software components.</p>
<p><b>Example</b> <em>component</em> element </p>
<div class="fragment"><div class="line">...</div>
<div class="line"> &lt;select&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;Core&quot;</span> Cvendor=<span class="stringliteral">&quot;ARM&quot;</span> Cversion=<span class="stringliteral">&quot;4.1.0&quot;</span>/&gt;</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;STM32Cube Framework&quot;</span> Csub=<span class="stringliteral">&quot;Classic&quot;</span> Cvendor=<span class="stringliteral">&quot;Keil&quot;</span> Cversion=<span class="stringliteral">&quot;1.4.0&quot;</span>&gt;</div>
<div class="line"> &lt;file attr=<span class="stringliteral">&quot;config&quot;</span> category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;CMSIS/Driver/Config/RTE_Device.h&quot;</span> version=<span class="stringliteral">&quot;2.3.1&quot;</span>/&gt;</div>
<div class="line"> &lt;file attr=<span class="stringliteral">&quot;config&quot;</span> category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MDK/Templates/Inc/stm32f4xx_hal_conf.h&quot;</span> version=<span class="stringliteral">&quot;1.4.2&quot;</span>/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;/select&gt;</div>
<div class="line">...</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: component">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_select_pg">select</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_select_pg">/package/create/project/select</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>Cvendor </td><td>Vendor name of the component. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Cbundle </td><td>Name of bundle to which the selected component belongs. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>Cclass </td><td>Component class name. Predefined values can be used as listed in the table <a class="el" href="element_taxonomy.html#CclassType">Component Classes</a>. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>Cgroup </td><td>Component group name following the taxonomy. Predefined values can be used as listed in the table <a class="el" href="element_taxonomy.html#CgroupType">Component Groups</a>. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>Csub </td><td>Component sub group name following the taxonomy (string may be empty) </td><td>CsubType </td><td>optional </td></tr>
<tr>
<td>Cvariant </td><td>Name of the variant of the selected component. </td><td>CvariantType </td><td>optional </td></tr>
<tr>
<td>Cversion </td><td>Version of the selected component. Note, a higher version number can be entered in case the matching version is not available. </td><td>ComponentVersionType </td><td>optional </td></tr>
<tr>
<td>Capiversion </td><td>Implemented api version defined for the corresponding Cclass:Cgroup:Csub. Set the value only for components that have an associated <em>&lt;api&gt;</em>. </td><td>ComponentVersionType </td><td>optional </td></tr>
<tr>
<td>instances </td><td>Number of instances created for the component. Set the value only for components that are multi-instance capable. Defaults to <span class="XML-Token">1</span> if not set. </td><td>InstancesType </td><td>optional </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_component_file">file</a> </td><td>Specify configuration files from the selected component. </td><td>ComponentSelectType </td><td>0..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_component_file"></a>
/package/create/project/select/component/file</h1>
<p>Specify the configuration files for the selected component. These files must already exist in the project folder structure and contain a configuration setup specifically for the project.</p>
<p><b>Example</b> <em>file</em> element </p>
<div class="fragment"><div class="line">...</div>
<div class="line"> &lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;STM32Cube Framework&quot;</span> Csub=<span class="stringliteral">&quot;Classic&quot;</span> Cvendor=<span class="stringliteral">&quot;Keil&quot;</span> Cversion=<span class="stringliteral">&quot;1.4.0&quot;</span>&gt;</div>
<div class="line"> &lt;file attr=<span class="stringliteral">&quot;config&quot;</span> category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;CMSIS/Driver/Config/RTE_Device.h&quot;</span> version=<span class="stringliteral">&quot;2.3.1&quot;</span>/&gt;</div>
<div class="line"> &lt;file attr=<span class="stringliteral">&quot;config&quot;</span> category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MDK/Templates/Inc/stm32f4xx_hal_conf.h&quot;</span> version=<span class="stringliteral">&quot;1.4.2&quot;</span>/&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line">...</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: file">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_component">component</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_project_component">/package/create/project/select/component</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>condition </td><td>Condition id being used at the time of runtime configuration. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>category </td><td>File type, for example <span class="XML-Token">header</span>. Use predefined values from the table <a class="el" href="pdsc_components_pg.html#FileCategoryEnum">File Category</a>. </td><td>FileCategoryType </td><td>required </td></tr>
<tr>
<td>attr </td><td>File action attribute, for example <span class="XML-Token">copy</span>. Use predefined values from the table <a class="el" href="pdsc_components_pg.html#FileCategoryEnum">File Category</a>. </td><td><a class="el" href="pdsc_components_pg.html#FileAttributeEnum">FileAttributeType</a> </td><td>optional </td></tr>
<tr>
<td>name </td><td>File path and name within pack it originates from. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>version </td><td>Version of the configuration file being used in the example. </td><td><a class="el" href="pdsc_package_pg.html#VersionType">VersionType</a> </td><td>required </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="cpdsc_files_pg"></a>
/package/create/project/files</h1>
<p>The files section specifies files to be included into the project build that are not managed through software components. Files can be sorted into named groups.</p>
<p><b>Example</b> <em>files</em> section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;group name=&quot;Source Files&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Blinky.c&quot;/&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Thread_LED.c&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;group name=&quot;Documentation&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;doc&quot; name=&quot;./Abstract.txt&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: files">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project">project</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_project">/package/create/project</a> </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_file">file</a> </td><td>Specify a file. </td><td>ProjectFileType </td><td>0..* </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_group">group</a> </td><td>Specify a group of files. </td><td>GroupType </td><td>0..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_project_file"></a>
/package/project/create/files/.../file</h1>
<p>Specify files that are not included through software components.</p>
<table class="cmtable" summary="Element: file">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_files_pg">files</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_files_pg">/package/create/project/files</a> </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_group">group</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#element_project_group">/package/create/project/files/.../group</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Path and name of the file, relative to CPDSC location. </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>category </td><td>Type of file, for example, whether the file is a C or assembler file. Use the predefined values from the table <a class="el" href="pdsc_components_pg.html#FileCategoryEnum">File Categories</a>. </td><td>FileCategoryType </td><td>required </td></tr>
<tr>
<td>src </td><td>Folder specifying the source code location for a library. </td><td>xs:string </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_project_group"></a>
/package/create/project/files/.../group</h1>
<p>Nesting of groups is supported. It is tool dependent how grouping is represented in the tool, because the grouping of files has no impact on the build by default.</p>
<p><b>Example</b> <em>files</em> section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;create&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;group name=&quot;Source&quot;&gt;</div>
<div class="line"> &lt;group name=&quot;C&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Blinky.c&quot;/&gt;</div>
<div class="line"> &lt;file category=&quot;sourceC&quot; name=&quot;./Thread_LED.c&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;group name=&quot;ASM&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;sourceAsm&quot; name=&quot;./startup_add.s&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;group name=&quot;Documentation&quot;&gt;</div>
<div class="line"> &lt;file category=&quot;doc&quot; name=&quot;./Abstract.txt&quot;/&gt;</div>
<div class="line"> &lt;/group&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;/create&gt;</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p> <br/>
</p>
<table class="cmtable" summary="Element: group">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#cpdsc_files_pg">files</a> </td><td colspan="3"><a class="el" href="cpdsc_pg.html#cpdsc_files_pg">/package/create/project/files</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>name of the group of files </td><td>RestrictedString </td><td>required </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_file">file</a> </td><td>Specify a file. </td><td>ProjectFileType </td><td>0..* </td></tr>
<tr>
<td><a class="el" href="cpdsc_pg.html#element_project_group">group</a> </td><td>Specify a group (nesting). </td><td>GroupType </td><td>0..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:01 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,256 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Pack with Board Support</title>
<title>CMSIS-Pack: Pack with Board Support</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('createPackBoard.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Pack with Board Support </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>A <a class="el" href="cp_SWComponents.html">Software Pack</a> that contains a <a class="el" href="pdsc_boards_pg.html">&lt;board&gt;</a> element is called Board Support Pack (BSP). A BSP may contain additional <b>Software Components</b>, <b>Example Projects</b>, as well as <b>Code Templates</b>. The typical content of a BSP is:</p>
<ul>
<li>Source code, libraries, header/configuration files for the underlying hardware and documentation (for example user manuals, getting started guides, and schematics).</li>
<li><a class="el" href="cp_SWComponents.html#cp_Examples">Example Projects</a> that show the usage of the development board and its peripherals.</li>
<li><a class="el" href="cp_SWComponents.html#cp_CodeTemplates">User Code Templates</a> that can be used as a starting point for using the development board or the mounted device.</li>
</ul>
<p>This section is a tutorial that explains how to create a BSP. Initially the PDSC file in the BSP only describes an evaluation board. This BSP is then extended to contain also software components that interface with the hardware of the board. Example projects and code templates may be added as described in the section <a class="el" href="cp_SWComponents.html">Pack with Software Components</a>.</p>
<h2>BSP Use Cases </h2>
<p>A BSP is typically provided by a Board Vendor and is used to <b>extend development tools</b> with support for development boards. In general, the BSP enables Board Vendors to distribute tool independent board support for their development platforms.<br/>
BSPs can also be used to provide information for the display on <b>web sites</b>. One example is the new boards page on <a href="http://www.keil.com/boards2/" class="el" target="_blank">www.keil.com/boards2/</a>:</p>
<div class="image">
<img src="BoardsSectionMCB1500.png" alt="BoardsSectionMCB1500.png"/>
<div class="caption">
Board information on a web site extracted from a BSP</div></div>
<h1><a class="anchor" id="cp_SpecDevBoard"></a>
Specify a Development Board</h1>
<p><b>Preparations</b></p>
<ol type="1">
<li>Install the Software Pack <a href="http://www.keil.com/dd2/arm/armcm3/" class="el" target="_blank">Keil::ARMCortex_DFP</a> as this will be required for the BSP to function properly.</li>
<li>Create a working directory on your PC, for example <b>C:\temp\working_bsp</b>.</li>
<li>Go to the directory <b>\CMSIS\Pack\Tutorials</b> available in the <b>ARM::CMSIS</b> Pack installation. Please consult your development tool's documentation for more information on the Pack installation directory structure. In a standard µVision installation, you will find it below <b>C:\Keil_v5\ARM\Pack\ARM\CMSIS\<em>version</em></b>.</li>
<li>Open the file <b>Pack_with_Board_Support.zip</b>.</li>
<li>Copy the <em>content</em> of the ZIP file's <b>01_Specify_Dev_Board</b> directory into your working directory.</li>
<li>Make sure that files/directories are not write protected (remove read-only flag).</li>
<li>Copy from the directory <b>\CMSIS\Utilities</b> available in the <b>ARM::CMSIS</b> Pack installation the following files into your working directory:<ul>
<li>packChk.exe</li>
<li>PACK.xsd</li>
</ul>
</li>
<li>Open the <b>MyVendor.MyBSP.pdsc</b> file in an editor.</li>
</ol>
<p><b>Code Example</b> </p>
<ol>
<li>
Add a <a class="el" href="pdsc_boards_pg.html#element_boards">&lt;boards&gt;</a> section in the PDSC file with the following: <div class="fragment"><div class="line">&lt;boards&gt;</div>
<div class="line"> &lt;board vendor=<span class="stringliteral">&quot;MyVendor&quot;</span> name=<span class="stringliteral">&quot;MyDevBoard&quot;</span> revision=<span class="stringliteral">&quot;V1&quot;</span> salesContact=<span class="stringliteral">&quot;sales@keil.com&quot;</span> orderForm=<span class="stringliteral">&quot;http://www.keil.com&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;MyVendor MyDevBoard Board Description&lt;/description&gt;</div>
<div class="line"> &lt;image small=<span class="stringliteral">&quot;Images/MyDevBoard_small.png&quot;</span> large=<span class="stringliteral">&quot;Images/MyDevBoard_large.png&quot;</span>/&gt;</div>
<div class="line"> &lt;book category=<span class="stringliteral">&quot;setup&quot;</span> name=<span class="stringliteral">&quot;Docs/MyDevBoard/MyDevBoard_setup.pdf&quot;</span> title=<span class="stringliteral">&quot;Getting Started&quot;</span>/&gt;</div>
<div class="line"> &lt;book category=<span class="stringliteral">&quot;schematic&quot;</span> name=<span class="stringliteral">&quot;Docs/MyDevBoard/MyDevBoard_schematics.pdf&quot;</span> title=<span class="stringliteral">&quot;Schematics&quot;</span>/&gt;</div>
<div class="line"> &lt;book category=<span class="stringliteral">&quot;manual&quot;</span> name=<span class="stringliteral">&quot;Docs/MyDevBoard/MyDevBoard_um.pdf&quot;</span> title=<span class="stringliteral">&quot;User Manual&quot;</span>/&gt;</div>
<div class="line"> &lt;mountedDevice deviceIndex=<span class="stringliteral">&quot;0&quot;</span> Dvendor=<span class="stringliteral">&quot;ARM:82&quot;</span> Dname=<span class="stringliteral">&quot;ARMCM3&quot;</span>/&gt;</div>
<div class="line"> &lt;compatibleDevice deviceIndex=<span class="stringliteral">&quot;0&quot;</span> Dvendor=<span class="stringliteral">&quot;ARM:82&quot;</span> Dfamily=<span class="stringliteral">&quot;ARM Cortex M3&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;ODbg&quot;</span> n=<span class="stringliteral">&quot;1&quot;</span> name=<span class="stringliteral">&quot;On-board J-LINK Lite&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;PWR&quot;</span> n=<span class="stringliteral">&quot;5&quot;</span> name=<span class="stringliteral">&quot;USB Powered&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;DIO&quot;</span> n=<span class="stringliteral">&quot;8&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;SPI&quot;</span> n=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;LED&quot;</span> n=<span class="stringliteral">&quot;6&quot;</span> name=<span class="stringliteral">&quot;User LEDs&quot;</span>/&gt;</div>
<div class="line"> &lt;feature type=<span class="stringliteral">&quot;ArduinoFF&quot;</span> n=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;debugInterface adapter=<span class="stringliteral">&quot;J-Link Lite&quot;</span> connector=<span class="stringliteral">&quot;Mini-USB&quot;</span>/&gt;</div>
<div class="line"> &lt;/board&gt;</div>
<div class="line">&lt;/boards&gt;</div>
</div><!-- fragment --> <dl class="section note"><dt>Note</dt><dd>All code examples in this and the following sections can be found in the <code>snippets.xml</code> file in the <b>01_Specify_Dev_Board</b> directory. </dd></dl>
</li>
<li>
<p class="startli">Finally, save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool.</p>
<div class="image">
<img src="DevBoardDisplay.png" alt="DevBoardDisplay.png"/>
<div class="caption">
Display of development boards in development tools</div></div>
</li>
</ol>
<dl class="section note"><dt>Note</dt><dd>packChk.exe will display <b>M346</b> informations: <pre class="fragment">*** WARNING M346: .\Files\MyVendor.MyBSP.pdsc (Line 29)
Referenced device(s) in 'MyDevBoard' not found: 'ARMCM3'
*** WARNING M346: .\Files\MyVendor.MyBSP.pdsc (Line 29)
Referenced device(s) in 'MyDevBoard' not found: 'ARM Cortex M3'
</pre> This is because this BSP does not contain a device section with the mentioned devices. To work aroung this problem, you might add the ARM:CMSIS PDSC file to the checking process.</dd></dl>
<h1><a class="anchor" id="cp_BundleExample"></a>
Create a BSP Bundle</h1>
<p>A bundle is basically a variant on the <code>Cclass</code> level. It specifies the attributes <code>Cclass</code>, <code>Cversion</code> and optionally <code>Cgroup</code> and <code>Cvendor</code> for a collection of interdependent components. Components within a bundle inherit the attributes set by the bundle and must not set these attributes again. Bundles ensure consistency of attributes across multiple interworking components and restrict the mix and match of components within a <code>Cclass</code> from different solutions. In addition to components, a bundle has the mandatory elements <code>description</code> and <code>doc</code> (for documentation).</p>
<p>Copy the <em>content</em> of the <b>02_BSP_Bundle</b> directory of the <b>Pack_with_Board_Support.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add a <code>&lt;conditions&gt;</code> section in your PDSC with the following (the <a class="el" href="cp_SWComponents.html#cp_Conditions">conditions</a> section provides more information on this step): <div class="fragment"><div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;ARM Cortex M3 Series&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;ARM Cortex M3 device required&lt;/description&gt;</div>
<div class="line"> &lt;require Dfamily=<span class="stringliteral">&quot;ARM Cortex M3&quot;</span> Dvendor=<span class="stringliteral">&quot;ARM:82&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
<div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;MyDevBoard Board Setup&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Board Setup Code required&lt;/description&gt;</div>
<div class="line"> &lt;require condition=<span class="stringliteral">&quot;ARM Cortex M3 Series&quot;</span>/&gt;</div>
<div class="line"> &lt;require Cclass=<span class="stringliteral">&quot;Board Support&quot;</span> Cgroup=<span class="stringliteral">&quot;Board Setup&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a <code>&lt;components&gt;</code> section in your PDSC with the following (the <a class="el" href="cp_SWComponents.html#cp_Components">components</a> section provides more information on this step): <div class="fragment"><div class="line">&lt;bundle Cbundle=<span class="stringliteral">&quot;MyDevBoardSupport&quot;</span> Cclass=<span class="stringliteral">&quot;Board Support&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.1&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;MyDevBoard custom board support package&lt;/description&gt;</div>
<div class="line"> &lt;doc&gt;Docs/BSP/MyBSP.htm&lt;/doc&gt;</div>
<div class="line"> &lt;component Cgroup=<span class="stringliteral">&quot;Board Setup&quot;</span> condition=<span class="stringliteral">&quot;ARM Cortex M3 Series&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Custom board setup code&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/BSP/Setup.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Include/setup.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Source/setup.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cgroup=<span class="stringliteral">&quot;I/O&quot;</span> Csub=<span class="stringliteral">&quot;LED&quot;</span> condition=<span class="stringliteral">&quot;MyDevBoard Board Setup&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;LED code <span class="keywordflow">for</span> custom board&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/BSP/LED.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Include/led.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Include/config_led.h&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Source/led.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line"> &lt;component Cgroup=<span class="stringliteral">&quot;I/O&quot;</span> Csub=<span class="stringliteral">&quot;GPIO&quot;</span> condition=<span class="stringliteral">&quot;MyDevBoard Board Setup&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;GPIO code <span class="keywordflow">for</span> custom board&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;doc&quot;</span> name=<span class="stringliteral">&quot;Docs/BSP/GPIO.htm&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Include/gpio.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Include/config_gpio.h&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;MySWComp/Source/gpio.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line"> &lt;/component&gt;</div>
<div class="line">&lt;/bundle&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.1&quot;</span>&gt;</div>
<div class="line"> Board support bundle added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> script. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.0.</p>
<div class="image">
<img src="BSPBundleDisplay.png" alt="BSPBundleDisplay.png"/>
<div class="caption">
BSP bundle display in development tools</div></div>
</li>
</ol>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,208 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Publish a Pack</title>
<title>CMSIS-Pack: Publish a Pack</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('createPackPublish.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Publish a Pack </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>There are multiple ways to distribute a software pack:</p>
<h1><a class="anchor" id="cp_prerequisites"></a>
Prerequisites</h1>
<p>Before you start to distribute a software pack, you need to make sure that it does not contain errors. An error- and warning-free run of the <code>gen_pack.bat</code> script from the <a class="el" href="cp_Packs.html#PackTutorials">Pack Tutorial</a> is a good start. but you also need to make sure that the schema has been validated. Pack Installer provides an easy mechanism to check the XML schema:</p>
<ul>
<li>Install the pack using Pack Installer.</li>
<li>Right-click on the pack version number and select <b>Schema Check</b>: <br/>
<div class="image">
<img src="schema_check.png" alt="schema_check.png"/>
</div>
</li>
<li>The <b>Output</b> window shows the result. If errors are reported, please make sure to fix them before continuing.<br/>
<div class="image">
<img src="schema_check_output.png" alt="schema_check_output.png"/>
</div>
This is especially important when handing in the pack to be indexed by <a class="el" href="createPackPublish.html#cp_KeilComPack">Arm's pack index service</a>. The pack importer will ignore all PDSC files that do not pass the check against the most recently published PACK.xsd schema file and thus your pack will not be available for download.</li>
</ul>
<h1><a class="anchor" id="cp_LocalInstallation"></a>
Local Installation</h1>
<p>The easiest way to distribute a software pack is attaching it to an email or using other means of electronic distribution (for example using a company internal file server). The installation of a software pack is usually triggered by double-clicking the Pack file. The pack management tool is invoked and the Pack is installed on the local machine. After installation, the Pack will be shown in the list of installed packs (tool dependent). If the PDSC file does not contain a valid <code>&lt;url&gt;</code> element, a manual installation is required to update a software pack. Otherwise, pack management tools can check for updates on the server or the local machine that is specified by <code>&lt;url&gt;</code>.</p>
<div class="image">
<img src="LocalInstallation.png" alt="LocalInstallation.png"/>
<div class="caption">
Local installation and update from URL</div></div>
<dl class="section note"><dt>Note</dt><dd>For automatic updates on a local machine, specify the <code>&lt;url&gt;</code> using the <a href="https://en.wikipedia.org/wiki/File_URI_scheme" target="_blank">file URI scheme</a>.</dd></dl>
<h1><a class="anchor" id="cp_WebDownload"></a>
Web Download</h1>
<p>Any web server can be used to host a software pack (specified by the <code>&lt;url&gt;</code> element in the PDSC file). At this location, the following files can be present:</p>
<ol type="1">
<li><b>&lt;vendor&gt;</b>.<b>&lt;name&gt;</b>.pdsc [required]: pack description file.</li>
<li><b>&lt;vendor&gt;</b>.<b>&lt;name&gt;</b>.<b>&lt;version&gt;</b>.pack [required]: pack file where <b>&lt;version&gt;</b> refers to the latest version specified in the PDSC file.</li>
<li><b>&lt;vendor&gt;</b>.pidx [optional]: list with all packs hosted and maintained by the vendor (refer to <a class="el" href="packIndexFile.html#pidxFile">Package Index File (pidx)</a>)</li>
<li><b>&lt;vendor&gt;</b>.vidx [optional]: list of package index files known to the vendor (refer to <a class="el" href="packIndexFile.html#vidxFile">Vendor Index File (vidx)</a>)</li>
</ol>
<p>All previous versions listed in the <b>&lt;releases&gt;</b> section of the PDSC file should be present in that folder as well. This will enable customers to revert updates or to be able to download a specific version of a software pack (for code maintenance purposes for example).</p>
<div class="image">
<img src="WebInstallation.png" alt="WebInstallation.png"/>
<div class="caption">
Web installation and update</div></div>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>It is important to understand how the &lt;url&gt; element works. If you specify a URL, for example <a href="http://www.keil.com/pack/" target="_blank">www.keil.com/pack</a>, then you have to make the PDSC file and the corresponding PACK file(s) available for download at that exact location. The naming of the files follow the standard naming rules. For example, the ARM::CMSIS PDSC and Pack files are available here:<br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.pdsc" target="_blank">www.keil.com/pack/ARM.CMSIS.pdsc</a> and <br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.5.0.1.pack" target="_blank">www.keil.com/pack/ARM.CMSIS.5.0.1.pack</a> and <br/>
<a href="http://www.keil.com/pack/ARM.CMSIS.5.0.0.pack" target="_blank">www.keil.com/pack/ARM.CMSIS.5.0.0.pack</a> and ... <br/>
At the specified location, you need to have one (unversioned) PDSC file and can have multiple versioned Pack files, but at least the latest one.</li>
<li>If the URL or the PDSC/Pack files become unavailable (temporarily or permanently), users will not be able to retrieve updates.</li>
<li>Do not replace PDSC/Pack files without updating the version number because the Pack management tools will not recognize the update unless the version has been changed.</li>
<li>Older packs should remain available.</li>
</ul>
</dd></dl>
<h1><a class="anchor" id="cp_KeilComPack"></a>
Publishing using Arm's Pack Index Service</h1>
<p>Arm maintains a list of available software packs. If you wish to add your packs to that list, send either your vendor.pidx file or your PDSC file to the following email address: <a href="#" onclick="location.href='mai'+'lto:'+'CMS'+'IS'+'@ar'+'m.'+'com'; return false;">CMSIS@arm.com</a>. The PIDX file will be processed and all referenced PDSC files will be validated. The following content will be processed in order to generate the web site (<a href="https://developer.arm.com/embedded/cmsis/cmsis-packs">https://developer.arm.com/embedded/cmsis/cmsis-packs</a>):</p>
<ul>
<li>Version</li>
<li>Release Notes</li>
<li>Devices</li>
<li>Boards</li>
<li>Examples</li>
<li>Software Components</li>
</ul>
<p>Please allow up to seven working days for the process. If the files contain any errors, you will be notified. Otherwise, the information is added to the index server.</p>
<h1><a class="anchor" id="cp_PackRehosting"></a>
Moving a pack from one URL to another</h1>
<p>Sometimes, it is necessary to rehost a pack. This implies that you need to change the &lt;url&gt; element in the PDSC file. To ensure that the pack is found by the indexer of the keil.com server, follow this procedure:</p>
<ul>
<li>Create a new version of the pack: update the PDSC file with the new URL ("url_B") and make sure to increment the version</li>
<li>Place a copy of this latest PDSC at url_B and url_A (the original URL).</li>
<li>Place a copy of the new pack in url_B (only)</li>
<li>Copy all packs from url_A to url_B</li>
<li>Inform Arm about the new URL by either<ul>
<li>updating the &lt;vendor&gt;.pidx with url_B for this pack <em>or</em> </li>
<li>sending a link to the PDSC file via email if your company does not maintain a &lt;vendor&gt;.pidx</li>
</ul>
</li>
</ul>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>PDSC and pack versions need to be accessible from the same new URL</li>
<li>You must keep url_A alive as is. But there is no need to maintain/update url_A going forward otherwise users with an old PDSC file will no longer find the pack versions. </li>
</ul>
</dd></dl>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,134 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Utilities for Creating Packs</title>
<title>CMSIS-Pack: Utilities for Creating Packs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('createPackUtil.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Utilities for Creating Packs </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Software Packs are ZIP files that contain a <a class="el" href="packFormat.html">PDSC</a> file and other content, that is specified within the PDSC file in XML. While the PDSC file can be created with any text editor, some of the contents have to be generated by additional programs. Also, verification of a PDSC file requires the help of additional tools. This section gives and overview over programs that are either part of the CMSIS Pack or are available for download on the Internet.</p>
<ul>
<li><a class="el" href="packChk.html">packChk.exe</a> is part of the CMSIS Pack and is used to check the validity of a PDSC file.</li>
<li>Validation of SVD files with <a href="../../SVD/html/svd_validate_file_pg.html"><b>SVDConv.exe</b></a> is required for SVD files that are part of <a class="el" href="index.html#SWPackVariants">Device Family Packs</a>.</li>
<li>Several <a class="el" href="cp_Editors.html">XML Editors</a> can verify XML files using the XML schema files that are part of the CMSIS Pack.</li>
<li><a class="el" href="cp_ZIPTool.html">ZIP Compression Tools</a> create the actual ZIP archive of a Software Pack. </li>
</ul>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,8 @@
var createPackUtil =
[
[ "packChk.exe", "packChk.html", [
[ "Error and Warning Messages", "packChk.html#packChkMessages", null ]
] ],
[ "XML Editors", "cp_Editors.html", null ],
[ "ZIP Compression Tools", "cp_ZIPTool.html", null ]
];
@@ -0,0 +1,536 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Pack with Device Support</title>
<title>CMSIS-Pack: Pack with Device Support</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('createPack_DFP.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Pack with Device Support </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>A <a class="el" href="cp_SWComponents.html">Software Pack</a> that contains a <a class="el" href="pdsc_devices_pg.html">&lt;devices&gt;</a> element is called Device Family Pack (DFP). A DFP may contain additional <b>Software Components</b> or <b>Example Projects</b> or any combination of those. The typical content of a DFP is:</p>
<ul>
<li><a class="el" href="createPack_DFP.html#cp_DeviceProperties">Device Properties</a> explaining the capabilities of a device or a device family in more detail.</li>
<li><a class="el" href="cp_SWComponents.html#cp_Components">Software Components</a> that configure the device and basic device drivers, in particular:<ul>
<li>CMSIS-compliant <a class="el" href="createPack_DFP.html#cp_System_Startp">System and Startup Files</a> required to setup the C run-time library, device clock, and memory interface.</li>
<li>Peripheral Driver Interfaces that provide software routines for physical device peripherals used by middleware stacks. Drivers may adhere to the <a href="http://www.keil.com/cmsis/driver" class="el" target="_blank">CMSIS-Driver</a> standard.</li>
</ul>
</li>
<li>One or more <a class="el" href="createPack_DFP.html#cp_SVD">System View Description Files</a> describing the programmer's view of the device's peripherals.</li>
<li><a class="el" href="createPack_DFP.html#cp_FlashProgrammingAlgorithm">Flash Programming Algorithms</a> for erasing and downloading code into on-chip Flash.</li>
<li><a class="el" href="createPack_DFP.html#cp_debugdescription">Debug Descriptions</a> enable tool-agnostic debug and trace configurations.</li>
<li><a class="el" href="cp_SWComponents.html#cp_Examples">Example Projects</a> that show the usage of the device and its peripherals.</li>
<li><a class="el" href="cp_SWComponents.html#cp_CodeTemplates">User Code Templates</a> that can be used as a starting point for application development.</li>
</ul>
<p>This section explains how to create a DFP. Initially, the PDSC file in the DFP only describes devices. This DFP is then extended to contain also SVD files, Flash algorithms, and device related software components such as system and HAL files. Example projects and code templates may be added as described in the section <a class="el" href="cp_SWComponents.html">Pack with Software Components</a>.</p>
<h2>DFP Use Cases </h2>
<p>A <a class="el" href="pdsc_devices_pg.html">Device Family Pack (DFP)</a> may be provided by a Silicon Vendor and is used to extend development tools with support for new devices. In general, the DFP enables Silicon Vendors to distribute tool independent device support for their device families.<br/>
DFPs can also be used to provide information for the display on <b>web sites</b>. One example is the new device database on <a href="http://www.keil.com/dd2/" class="el" target="_blank">www.keil.com/dd2/</a>:</p>
<p><a class="anchor" id="DevWebSite"></a></p>
<div class="image">
<img src="DeviceDatabase2.png" alt="DeviceDatabase2.png"/>
<div class="caption">
Device information on a web site extracted from a DFP</div></div>
<h2>Steps to Create a DFP </h2>
<div class="image">
<img src="DFPFlow.png" alt="DFPFlow.png"/>
</div>
<h1><a class="anchor" id="cp_BasicDFP"></a>
Basic Device Family Pack</h1>
<p>In the following sections, a DFP will be created for a fictional device family called <b>MVCM3</b> from the device vendor <b>MyVendor</b>. The device family consists of four member that are separated into two sub-families. The specification of the MVCM3 family is as follows:</p>
<div class="image">
<img src="MVCM3SpecTable.png" alt="MVCM3SpecTable.png"/>
<div class="caption">
MVCM3 Device Family Specification</div></div>
<p> <b>Preparations</b></p>
<ol type="1">
<li>Create a working directory on you PC, for example <b>C:\temp\working_dfp</b>.</li>
<li>Go to the directory <b>\CMSIS\Pack\Tutorials</b> available in the <b>ARM::CMSIS</b> Pack installation. Please consult your development tool's documentation for more information on the Pack installation directory structure. In a standard µVision installation, you will find it below <b>C:\Keil_v5\ARM\Pack\ARM\CMSIS\<em>version</em></b>.</li>
<li>Open the file <b>Pack_with_Device_Support.zip</b>.</li>
<li>Copy the <em>content</em> of the ZIP file's <b>01_Basic_Pack</b> directory into your working directory.</li>
<li>Make sure that files/directories are not write protected (remove read-only flag).</li>
<li>Copy from the directory <b>\CMSIS\Utilities</b> available in the <b>ARM::CMSIS</b> Pack installation the following files into your working directory:<ul>
<li>packChk.exe</li>
<li>PACK.xsd</li>
<li>SVDConv.exe</li>
</ul>
</li>
<li>Open the <b>MyVendor.MVCM3.pdsc</b> file in an editor.</li>
</ol>
<p><b>Code Example</b> </p>
<ol>
<li>
Add a <a class="el" href="pdsc_family_pg.html#element_device">&lt;devices&gt;</a> section in the PDSC file with the following: <div class="fragment"><div class="line">&lt;devices&gt;</div>
<div class="line"> &lt;family Dfamily=<span class="stringliteral">&quot;MVCM3 Series&quot;</span> Dvendor=<span class="stringliteral">&quot;Generic:5&quot;</span>&gt;</div>
<div class="line"> &lt;processor Dcore=<span class="stringliteral">&quot;Cortex-M3&quot;</span> DcoreVersion=<span class="stringliteral">&quot;r2p1&quot;</span> Dfpu=<span class="stringliteral">&quot;0&quot;</span> Dmpu=<span class="stringliteral">&quot;0&quot;</span> Dendian=<span class="stringliteral">&quot;Little-endian&quot;</span>/&gt;</div>
<div class="line"> &lt;description&gt;</div>
<div class="line"> The MVCM3 device family contains an ARM Cortex-M3 processor, running up to 100 MHz with a versatile set of on-chip peripherals.</div>
<div class="line"> &lt;/description&gt;</div>
<div class="line"> &lt;!-- ************************ Sub-family <span class="stringliteral">&#39;MVCM3100&#39;</span> **************************** --&gt;</div>
<div class="line"> &lt;subFamily DsubFamily=<span class="stringliteral">&quot;MVCM3100&quot;</span>&gt;</div>
<div class="line"> &lt;processor Dclock=<span class="stringliteral">&quot;50000000&quot;</span>/&gt;</div>
<div class="line"> &lt;!-- ************************* Device <span class="stringliteral">&#39;MVCM3110&#39;</span> ***************************** --&gt;</div>
<div class="line"> &lt;device Dname=<span class="stringliteral">&quot;MVCM3110&quot;</span>&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IROM1&quot;</span> access=<span class="stringliteral">&quot;rx&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x4000&quot;</span> startup=<span class="stringliteral">&quot;1&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IRAM1&quot;</span> access=<span class="stringliteral">&quot;rw&quot;</span> start=<span class="stringliteral">&quot;0x20000000&quot;</span> size=<span class="stringliteral">&quot;0x0800&quot;</span> init =<span class="stringliteral">&quot;0&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> &lt;!-- ************************* Device <span class="stringliteral">&#39;MVCM3120&#39;</span> ***************************** --&gt;</div>
<div class="line"> &lt;device Dname=<span class="stringliteral">&quot;MVCM3120&quot;</span>&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IROM1&quot;</span> access=<span class="stringliteral">&quot;rx&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x8000&quot;</span> startup=<span class="stringliteral">&quot;1&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IRAM1&quot;</span> access=<span class="stringliteral">&quot;rx&quot;</span> start=<span class="stringliteral">&quot;0x20000000&quot;</span> size=<span class="stringliteral">&quot;0x1000&quot;</span> init =<span class="stringliteral">&quot;0&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> &lt;/subFamily&gt;</div>
<div class="line"> &lt;!-- ************************ Sub Family <span class="stringliteral">&#39;MVCM3200&#39;</span> **************************** --&gt;</div>
<div class="line"> &lt;subFamily DsubFamily=<span class="stringliteral">&quot;MVCM3200&quot;</span>&gt;</div>
<div class="line"> &lt;processor Dclock=<span class="stringliteral">&quot;100000000&quot;</span>/&gt;</div>
<div class="line"> &lt;!-- ************************* Device <span class="stringliteral">&#39;MVCM3250&#39;</span> ***************************** --&gt;</div>
<div class="line"> &lt;device Dname=<span class="stringliteral">&quot;MVCM3250&quot;</span>&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IROM1&quot;</span> access=<span class="stringliteral">&quot;rx&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x4000&quot;</span> startup=<span class="stringliteral">&quot;1&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IRAM1&quot;</span> access=<span class="stringliteral">&quot;rw&quot;</span> start=<span class="stringliteral">&quot;0x20000000&quot;</span> size=<span class="stringliteral">&quot;0x0800&quot;</span> init =<span class="stringliteral">&quot;0&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> &lt;!-- ************************* Device <span class="stringliteral">&#39;MVCM3260&#39;</span> ***************************** --&gt;</div>
<div class="line"> &lt;device Dname=<span class="stringliteral">&quot;MVCM3260&quot;</span>&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IROM1&quot;</span> access=<span class="stringliteral">&quot;rx&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x8000&quot;</span> startup=<span class="stringliteral">&quot;1&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;memory name=<span class="stringliteral">&quot;IRAM1&quot;</span> access=<span class="stringliteral">&quot;rw&quot;</span> start=<span class="stringliteral">&quot;0x20000000&quot;</span> size=<span class="stringliteral">&quot;0x1000&quot;</span> init =<span class="stringliteral">&quot;0&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> &lt;/subFamily&gt;</div>
<div class="line"> &lt;/family&gt;</div>
<div class="line">&lt;/devices&gt;</div>
</div><!-- fragment --> <dl class="section note"><dt>Note</dt><dd><ul>
<li><code>Dvendor</code> IDs are not freely selectable. The current set of IDs can be found in the PACK.xsd file (available in the <b>ARM::CMSIS</b> Pack in the <b>CMSIS\Pack\Utilities</b> directory).</li>
<li>All code examples in this and the following sections can be found in the <code>snippets.xml</code> file in the <b>01_Basic_Pack</b> directory.</li>
</ul>
</dd></dl>
</li>
<li>
<p class="startli">Save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See <a class="el" href="cp_SWComponents.html#cp_GeneratePack">Generate a Pack</a> for further details. Afterwards, install the Pack in your development tool.</p>
<div class="image">
<img src="BasicDFPDisplay.png" alt="BasicDFPDisplay.png"/>
<div class="caption">
Display of microcontroller devices in development tools</div></div>
</li>
</ol>
<dl class="section note"><dt>Note</dt><dd>packChk.exe will display <b>M350</b> informations: <pre class="fragment">*** INFO M350:
No 'Startup' found for [Generic:5] 'MVCM3110' ()
</pre> We will address this problem in the next section.</dd></dl>
<h1><a class="anchor" id="cp_System_Startp"></a>
System and Startup Files</h1>
<p><a href="../../Core/html/index.html">CMSIS-Core (Cortex-M)</a> defines the following files to be used by an embedded application:</p>
<ul>
<li><code>startup_&lt;device&gt;.s</code> with reset handler and exception vectors. It is executed after reset and calls <code>SystemInit</code> and may contain stack and heap configurations for the user application.</li>
<li><code>system_&lt;device&gt;.c</code> and <code>system_&lt;device&gt;.h</code> with general system configuration information (i.e. for clock and BUS setup).</li>
<li><code>&lt;device.h&gt;</code> gives access to processor core and all peripherals. This file should be generated out of the <a class="el" href="createPack_DFP.html#cp_SVD">SVD</a> file using <a href="../../SVD/html/svd_SVDConv_pg.html"><b>SVDConv.exe</b></a> to ensure consistency between the header file and what is being displayed by the debugger.</li>
</ul>
<div class="image">
<img src="SystemStartupFiles.png" alt="SystemStartupFiles.png"/>
<div class="caption">
System and startup files in relation to user code</div></div>
<dl class="section note"><dt>Note</dt><dd><a href="../../Core/html/templates_pg.html">CMSIS-Core (Cortex-M)</a> explains the structure of the system and startup files and how to create them.</dd></dl>
<p>Copy the <em>content</em> of the <b>02_System_and_Startup</b> directory of the <b>Pack_with_Device_Support.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Add a <code>&lt;conditions&gt;</code> section in your PDSC with the following (the <a class="el" href="cp_SWComponents.html#cp_Conditions">conditions</a> section provides more information on this step): <div class="fragment"><div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span>&gt;</div>
<div class="line"> &lt;!-- conditions selecting Devices --&gt;</div>
<div class="line"> &lt;description&gt;MyVendor MVCM3 Series devices and CMSIS-Core (Cortex-M)&lt;/description&gt;</div>
<div class="line"> &lt;require Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> Cgroup=<span class="stringliteral">&quot;Core&quot;</span>/&gt;</div>
<div class="line"> &lt;require Dvendor=<span class="stringliteral">&quot;Generic:5&quot;</span> Dname=<span class="stringliteral">&quot;MVCM3*&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
<div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;Startup ARM&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Startup assembler file <span class="keywordflow">for</span> ARMCC&lt;/description&gt;</div>
<div class="line"> &lt;require Tcompiler=<span class="stringliteral">&quot;ARMCC&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
<div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;Startup GCC&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Startup assembler file <span class="keywordflow">for</span> GCC&lt;/description&gt;</div>
<div class="line"> &lt;require Tcompiler=<span class="stringliteral">&quot;GCC&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
<div class="line">&lt;condition <span class="keywordtype">id</span>=<span class="stringliteral">&quot;Startup IAR&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Startup assembler file <span class="keywordflow">for</span> IAR&lt;/description&gt;</div>
<div class="line"> &lt;require Tcompiler=<span class="stringliteral">&quot;IAR&quot;</span>/&gt;</div>
<div class="line">&lt;/condition&gt;</div>
</div><!-- fragment --> <dl class="section note"><dt>Note</dt><dd>The assembler based <code>startup_&lt;device&gt;.s</code> file is tool dependent. Therefore, separate conditions for the various tool vendors are required. </dd></dl>
</li>
<li>
Add a <code>&lt;components&gt;</code> section in your PDSC with the following (the <a class="el" href="cp_SWComponents.html#cp_Components">components</a> section provides more information on this step): <div class="fragment"><div class="line">&lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;Startup&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span> condition=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;System Startup <span class="keywordflow">for</span> MyVendor MVCM3 Series&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;!-- include folder --&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;include&quot;</span> name=<span class="stringliteral">&quot;Device/Include/&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/ARM/startup_MVCM3xxx.s&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> condition=<span class="stringliteral">&quot;Startup ARM&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/GCC/startup_MVCM3xxx.S&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> condition=<span class="stringliteral">&quot;Startup GCC&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/IAR/startup_MVCM3xxx.s&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> condition=<span class="stringliteral">&quot;Startup IAR&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"></div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/system_MVCM3xxx.c&quot;</span> attr=<span class="stringliteral">&quot;config&quot;</span> version=<span class="stringliteral">&quot;1.0.0&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.1&quot;</span>&gt;</div>
<div class="line"> Startup files included</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> script. Afterwards, install the Pack in your development tool and create a new project. Select the software components <b>::CMSIS:CORE</b> and <b>::Device:Startup</b> for the project:</p>
<div class="image">
<img src="StartupSystemFilesAdded.png" alt="StartupSystemFilesAdded.png"/>
<div class="caption">
Startup and system files added to a project</div></div>
</li>
</ol>
<dl class="section note"><dt>Note</dt><dd>packChk.exe will display <b>M350</b> informations: <pre class="fragment">*** INFO M353: .\Files\MyVendor.MVCM3.pdsc (Line 98)
No 'Device Headerfile' File found for Component 'Startup' (MyVendor::Device.Startup:1.0.0) for '[Generic:5] MVCM3110' (ARMCC)
</pre> We will address this problem in the next section.</dd></dl>
<h1><a class="anchor" id="cp_SVD"></a>
System View Description File</h1>
<p><a href="http://www.keil.com/cmsis/svd" class="el" target="_blank">CMSIS-SVD</a> formalizes the description of the programmer's view for the system contained in ARM Cortex-M processor-based microcontrollers, in particular the memory mapped registers of the peripherals. The level of detail contained in system view descriptions is comparable to what is found in device reference manuals published by silicon vendors. The information ranges from a high level functional description of a peripheral all the way down to the definition and purpose of an individual bit field in a memory mapped register. CMSIS-SVD files are developed and maintained by the silicon vendors. The XML based SVD file is the input for <a href="../../SVD/html/svd_SVDConv_pg.html"><b>SVDConv.exe</b></a> that generates the tool dependent debug view and the device header file.</p>
<div class="image">
<img src="SVDFlow.png" alt="SVDFlow.png"/>
<div class="caption">
SVD file conversion flow</div></div>
<p> Copy the <em>content</em> of the <b>03_SVD_File</b> directory of the <b>Pack_with_Device_Support.zip</b> file to the <b>Files</b> directory in your working environment: </p>
<ol>
<li>
Open the file MVCM3xxx.svd in the <b>Files\SVD</b> directory in an editor and change the following: <div class="fragment"><div class="line">&lt;device schemaVersion=<span class="stringliteral">&quot;1.1&quot;</span> xmlns:xs=<span class="stringliteral">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> xs:noNamespaceSchemaLocation=<span class="stringliteral">&quot;CMSIS-SVD.xsd&quot;</span> &gt;</div>
<div class="line"> &lt;vendor&gt;MyVendor&lt;/vendor&gt; &lt;!-- device vendor name --&gt;</div>
<div class="line"> &lt;vendorID&gt;Generic&lt;/vendorID&gt; &lt;!-- device vendor <span class="keywordtype">short</span> name --&gt;</div>
<div class="line"> &lt;name&gt;MVCM3xxx&lt;/name&gt; &lt;!-- name of part--&gt;</div>
<div class="line"> &lt;series&gt;MVCM3xxx&lt;/series&gt; &lt;!-- device series the device belongs to --&gt;</div>
<div class="line"> &lt;version&gt;1.2&lt;/version&gt; &lt;!-- version of <span class="keyword">this</span> description, adding CMSIS-SVD 1.1 tags --&gt;</div>
<div class="line"> &lt;description&gt;Arm 32-bit Cortex-M3 Microcontroller based device, CPU clock up to 100 MHz.&lt;/description&gt;</div>
</div><!-- fragment --> </li>
<li>
Open a command window in your working directory and enter: <pre class="fragment">C:\temp\working_dfp&gt;SVDConv.exe Files\SVD\MVCM3xxx.svd --generate=header -fields=macro
</pre> </li>
<li>
You should see some output of SVDConv similar to this: <pre class="fragment">CMSIS-SVD SVD Consistency Checker / Header File Generator V2.86g
Copyright (C) 2010 - 2014 Arm Ltd and Arm Germany GmbH. All rights reserved.
Options: "Files\SVD\MVCM3xxx.svd" --generate=header --fields=macro
Reading file: "Files\SVD\MVCM3xxx.svd"
Decoding using XML SVD Schema V1.1
Found 0 Errors and 0 Warnings
Return Code: 0 (OK)
</pre> Move the generated header file <b>MVCM3xxx.h</b> to the <b>Device\Include</b> directory. </li>
<li>
Add the following two lines at the family level in the PDSC file: <div class="fragment"><div class="line">&lt;compile header=<span class="stringliteral">&quot;Device/Include/MVCM3xxx.h&quot;</span>/&gt;</div>
<div class="line">&lt;debug svd=<span class="stringliteral">&quot;SVD/MVCM3xxx.svd&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.2&quot;</span>&gt;</div>
<div class="line"> SVD and header file included</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> script. Afterwards, install the Pack in your development tool and create a new project. Depending on your development environment, you will be able to see the SVD file included in your project:</p>
<div class="image">
<img src="SVDIncluded.png" alt="SVDIncluded.png"/>
<div class="caption">
Project with SVD file</div></div>
<dl class="section note"><dt>Note</dt><dd>For more information on CMSIS-SVD, please visit <a href="http://www.keil.com/cmsis/svd" class="el" target="_blank">www.keil.com/cmsis/svd</a> </dd></dl>
</li>
</ol>
<h1><a class="anchor" id="cp_FlashProgrammingAlgorithm"></a>
Flash Programming Algorithms</h1>
<p><a class="el" href="flashAlgorithm.html">Flash Programming</a> are used to erase or download applications to Flash devices. A DFP usually contains predefined Flash algorithms for programming its supported devices. The page <a class="el" href="algorithmFunc.html">Algorithm Functions</a> explains the mechanisms in more detail.</p>
<p>For the MVCM3 device family, two flash algorithms have to be created. MVCM3110/250 have 16 kB of Flash, whereas MVCM3120/260 have 32 kB of Flash memory.</p>
<p>Copy the <em>content</em> of the <b>04_Flash_Programming</b> directory of the <b>Pack_with_Device_Support.zip</b> file to the <b>working</b> directory: </p>
<ol>
<li>
Rename the project file <b>NewDevice.uvproj</b> (in the <b>_Template_Flash</b> directory) to represent the new Flash ROM device name, for example MVCM3XXX_16.uvproj. </li>
<li>
<p class="startli">Open the project with uVision. The selected target (Cortex-M) is fine for the device.</p>
<dl class="section note"><dt>Note</dt><dd>Creating a Flash programming algorithm with <a href="http://www.keil.com/arm/selector.asp" class="el" target="_blank">MDK-Lite</a> is not supported. </dd></dl>
</li>
<li>
<p class="startli">Open the dialog <b>Project - Options for Target - Output</b> and change the content of the field <b>Name of Executable</b> to represent the device, here MCVM3XXX_16.</p>
<div class="image">
<img src="FPATargetOptions.png" alt="FPATargetOptions.png"/>
<div class="caption">
Options for Target 'Cortex-M'</div></div>
</li>
<li>
In the real world, you would now start to adapt the programming algorithms in the file <b>FlashPrg.c</b>. For now, only change the device parameters (Device Name, Device Size, and Sector Size) in the <b>FlashDev.c</b> file: <div class="fragment"><div class="line"><span class="keyword">struct </span>FlashDevice const FlashDevice = {</div>
<div class="line"> FLASH_DRV_VERS, <span class="comment">// Driver Version, do not modify!</span></div>
<div class="line"> <span class="stringliteral">&quot;MVCM3110/250 Flash&quot;</span>, <span class="comment">// Device Name </span></div>
<div class="line"> ONCHIP, <span class="comment">// Device Type</span></div>
<div class="line"> 0x00000000, <span class="comment">// Device Start Address</span></div>
<div class="line"> 0x00004000, <span class="comment">// Device Size in Bytes (16kB)</span></div>
<div class="line"> 1024, <span class="comment">// Programming Page Size</span></div>
<div class="line"> 0, <span class="comment">// Reserved, must be 0</span></div>
<div class="line"> 0xFF, <span class="comment">// Initial Content of Erased Memory</span></div>
<div class="line"> 100, <span class="comment">// Program Page Timeout 100 mSec</span></div>
<div class="line"> 3000, <span class="comment">// Erase Sector Timeout 3000 mSec</span></div>
<div class="line"></div>
<div class="line"><span class="comment">// Specify Size and Address of Sectors</span></div>
<div class="line"> 0x002000, 0x000000, <span class="comment">// Sector Size 8kB (2 Sectors)</span></div>
<div class="line"> SECTOR_END</div>
<div class="line">};</div>
</div><!-- fragment --> </li>
<li>
Use <b>Project - Build Target</b> to generate the new Flash programming algorithm. The algorithm will be created in the parent directory of the <b>_Template_Flash</b> directory. </li>
<li>
Copy the output file <b>..\MVCM3XXX_16.FLM</b> to a new subdirectory called <b>Files\Flash</b>. Add these lines to the MVCM3110/250 device sections: <div class="fragment"><div class="line">algorithm name=<span class="stringliteral">&quot;Flash/MVCM3XXX_16.FLM&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x4000&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
Create a <b>MVCM3XXX_32.flm</b> for the MVCM3120/260 devices. </li>
<li>
Add these lines to the MVCM3120/260 device sections: <div class="fragment"><div class="line">algorithm name=<span class="stringliteral">&quot;Flash/MVCM3XXX_32.FLM&quot;</span> start=<span class="stringliteral">&quot;0x00000000&quot;</span> size=<span class="stringliteral">&quot;0x8000&quot;</span> <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.3&quot;</span>&gt;</div>
<div class="line"> Flash Programming Algorithms added</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
<p class="startli">Finally, save the PDSC file and regenerate the Pack file using the <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> script. Afterwards, install the Pack in your development tool. Depending on your development environment, you will be able to see the Flash Programming Algorithms included in your project (either for a new project or by adding it manually to an existing project):</p>
<div class="image">
<img src="FPADisplay.png" alt="FPADisplay.png"/>
<div class="caption">
Display of Flash Programming Algorithm</div></div>
<dl class="section note"><dt>Note</dt><dd>The page <a class="el" href="flashAlgorithm.html">Flash Programming</a> gives more information on the subject. </dd></dl>
</li>
</ol>
<h1><a class="anchor" id="cp_debugdescription"></a>
Debug Descriptions</h1>
<h1><a class="anchor" id="cp_DeviceProperties"></a>
Device Properties</h1>
<p>To limit redundancy, devices can be organized in two hierarchy groups:</p>
<ul>
<li><a class="el" href="pdsc_family_pg.html#element_family">family</a>: the attributes of a device family which includes also the processor.</li>
<li><a class="el" href="pdsc_family_pg.html#element_subFamily">subFamily</a>: attributes of an optional sub-family; this adds or modifies features of a family.</li>
</ul>
<p>Parameters of each single device are defined in:</p>
<ul>
<li><a class="el" href="pdsc_family_pg.html#element_device">device</a>: attributes of a specific silicon device</li>
<li><a class="el" href="pdsc_family_pg.html#element_variant">variant</a>: attributes of a device variant (for example, with different package or temperature range) or an OEM device or board that integrates the device.</li>
</ul>
<p>A device is described by the following properties:</p>
<ul>
<li><a class="el" href="pdsc_family_pg.html#element_description">description</a>: textual device description</li>
<li><a class="el" href="pdsc_family_pg.html#element_feature">feature</a>: categorized list of device peripherals and features. This list is used on <a class="el" href="createPack_DFP.html#DevWebSite">web sites</a> for the display of device features.</li>
<li><a class="el" href="pdsc_family_pg.html#element_book">book</a>: documentation about the device and its processor(s)</li>
<li><a class="el" href="pdsc_family_pg.html#element_processor">processor</a>: processor and processor features embedded in the device</li>
<li><a class="el" href="pdsc_family_pg.html#element_compile">compile</a>: device specific general settings for the build tools</li>
<li><a class="el" href="pdsc_family_pg.html#element_debugconfig">debugconfig</a>: default settings for a debug connection</li>
<li><a class="el" href="pdsc_family_pg.html#element_debugport">debugport</a>: debug port description of the device for the debugger to configure a debug connection.</li>
<li><a class="el" href="pdsc_family_pg.html#element_debug">debug</a>: device specific information for the debugger to configure a debug connection including System View Description files.</li>
<li><a class="el" href="pdsc_family_pg.html#element_trace">trace</a>: device specific information for the debugger to configure trace.</li>
<li><a class="el" href="pdsc_family_pg.html#element_memory">memory</a>: memory layout of the device for internal and external RAM and ROM regions</li>
<li><a class="el" href="pdsc_family_pg.html#element_algorithm">algorithm</a>: device specific Flash programming algorithms</li>
</ul>
<p>A device inherits all specifications from both the family and sub-family levels. Some properties are required to be unique. For example, the name of the SVD file attribute of the <b>&lt;debug&gt;</b> property. Therefore, the SVD file specified on the family level can be redefined by the attribute on the sub-family or device level. Other information like the &lt;description&gt; and &lt;feature&gt; entries are adding up, starting with the information from the family and sub-family level and finalizing with the information on the device level.</p>
<p>The following shows how to specify the device properties for the MVCM3110 device (refer to the specification shown in <a class="el" href="createPack_DFP.html#cp_BasicDFP">Basic Device Family Pack</a>). The other members of the family are specified accordingly.</p>
<p>Copy the <em>content</em> of the <b>05_Device_Properties</b> directory of the <b>Pack_with_Device_Support.zip</b> file to the <b>Files</b> directory of your working environment: </p>
<ol>
<li>
The <b>MVCM3 Series</b> family properties <a class="el" href="pdsc_family_pg.html#element_processor">processor</a>, <a class="el" href="pdsc_family_pg.html#element_compile">compile</a>, <a class="el" href="pdsc_family_pg.html#element_description">description</a>, and <a class="el" href="pdsc_family_pg.html#element_debug">debug</a> are already specified. There are additional common properties that can be specified on the family level: <a class="el" href="pdsc_family_pg.html#element_book">book</a> and <a class="el" href="pdsc_family_pg.html#element_feature">feature</a>. Add the following lines to the PDSC file in the <b>&lt;family&gt;</b> section: <div class="fragment"><div class="line">&lt;book name=<span class="stringliteral">&quot;Docs/dui0552a_cortex_m3_dgug.pdf&quot;</span> title=<span class="stringliteral">&quot;Cortex-M3 Generic User Guide&quot;</span>/&gt;</div>
<div class="line">&lt;book name=<span class="stringliteral">&quot;Docs/MVCM3XXX_Datasheet.pdf&quot;</span> title=<span class="stringliteral">&quot;MVCM3 Series Datasheet&quot;</span>/&gt;</div>
<div class="line">&lt;book name=<span class="stringliteral">&quot;Docs/MVCM3XXX_Product_Brief.pdf&quot;</span> title=<span class="stringliteral">&quot;MVCM3 Product Brief&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;ExtInt&quot;</span> n=<span class="stringliteral">&quot;16&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;Temp&quot;</span> n=<span class="stringliteral">&quot;-40&quot;</span> m=<span class="stringliteral">&quot;105&quot;</span> name=<span class="stringliteral">&quot;Extended Temperature Range&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;VCC&quot;</span> n=<span class="stringliteral">&quot;2.5&quot;</span> m=<span class="stringliteral">&quot;3.6&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;RTC&quot;</span> n=<span class="stringliteral">&quot;32768&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;WDT&quot;</span> n=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
The <b>MVCM31xx</b> sub-family has some features that are common for the two member devices. Please add the following code to the MVCM31100 <b>&lt;subFamily&gt;</b> section: <div class="fragment"><div class="line">&lt;feature type=<span class="stringliteral">&quot;IOs&quot;</span> n=<span class="stringliteral">&quot;26&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;I2C&quot;</span> n=<span class="stringliteral">&quot;1&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;UART&quot;</span> n=<span class="stringliteral">&quot;4&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;Timer&quot;</span> n=<span class="stringliteral">&quot;6&quot;</span> m=<span class="stringliteral">&quot;32&quot;</span>/&gt;</div>
<div class="line">&lt;feature type=<span class="stringliteral">&quot;QFP&quot;</span> n=<span class="stringliteral">&quot;32&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
<li>
The <b>MVCM3110</b> device has some features that are unique to that device. Please add the following code to the MVCM3110 <b>&lt;device&gt;</b> section: <div class="fragment"><div class="line">&lt;feature type=<span class="stringliteral">&quot;PWM&quot;</span> n=<span class="stringliteral">&quot;2&quot;</span> m=<span class="stringliteral">&quot;16&quot;</span>/&gt;</div>
</div><!-- fragment --> </li>
</ol>
<h2><a class="anchor" id="cp_DeviceSWComp"></a>
Device Specific Software Components</h2>
<p>Finally, <a class="el" href="cp_SWComponents.html#cp_Components">software components</a> and <a class="el" href="cp_SWComponents.html#cp_Examples">example projects</a> need to be added to the DFP. </p>
<ol>
<li>
Add the following lines to the PDSC file in the <b>&lt;components&gt;</b> section: <div class="fragment"><div class="line">&lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;HAL&quot;</span> Csub=<span class="stringliteral">&quot;GPIO&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span> condition=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;GPIO HAL <span class="keywordflow">for</span> MyVendor MVCM3 Series&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;Device/Include/GPIO.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/GPIO.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
<div class="line"></div>
<div class="line">&lt;component Cclass=<span class="stringliteral">&quot;Device&quot;</span> Cgroup=<span class="stringliteral">&quot;HAL&quot;</span> Csub=<span class="stringliteral">&quot;ADC&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span> condition=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;ADC HAL <span class="keywordflow">for</span> MyVendor MVCM3 Series&lt;/description&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;Device/Include/ADC.h&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Device/Source/ADC.c&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
<div class="line"></div>
<div class="line">&lt;component Cclass=<span class="stringliteral">&quot;CMSIS Driver&quot;</span> Cgroup=<span class="stringliteral">&quot;I2C&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span> condition=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span> maxInstances=<span class="stringliteral">&quot;3&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;I2C Driver <span class="keywordflow">for</span> MVCM3 Series&lt;/description&gt;</div>
<div class="line"> &lt;RTE_Components_h&gt;</div>
<div class="line"><span class="preprocessor"> #define RTE_Drivers_I2C0 </span><span class="comment">/* Driver I2C0 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_I2C1 </span><span class="comment">/* Driver I2C1 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_I2C2 </span><span class="comment">/* Driver I2C2 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span> &lt;/RTE_Components_h&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Drivers/I2C/I2C_MVCM3.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;Drivers/I2C/I2C_MVCM3.h&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
<div class="line"></div>
<div class="line">&lt;component Cclass=<span class="stringliteral">&quot;CMSIS Driver&quot;</span> Cgroup=<span class="stringliteral">&quot;UART&quot;</span> Cversion=<span class="stringliteral">&quot;1.0.0&quot;</span> condition=<span class="stringliteral">&quot;MVCM3 CMSIS-Core&quot;</span> maxInstances=<span class="stringliteral">&quot;5&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;UART Driver <span class="keywordflow">for</span> MVCM3 Series&lt;/description&gt;</div>
<div class="line"> &lt;RTE_Components_h&gt;</div>
<div class="line"><span class="preprocessor"> #define RTE_Drivers_UART0 </span><span class="comment">/* Driver UART0 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_UART1 </span><span class="comment">/* Driver UART1 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_UART2 </span><span class="comment">/* Driver UART2 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_UART3 </span><span class="comment">/* Driver UART3 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span><span class="preprocessor"> #define RTE_Drivers_UART4 </span><span class="comment">/* Driver UART4 */</span><span class="preprocessor"></span></div>
<div class="line"><span class="preprocessor"></span> &lt;/RTE_Components_h&gt;</div>
<div class="line"> &lt;files&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;source&quot;</span> name=<span class="stringliteral">&quot;Drivers/UART/UART_MVCM3.c&quot;</span>/&gt;</div>
<div class="line"> &lt;file category=<span class="stringliteral">&quot;header&quot;</span> name=<span class="stringliteral">&quot;Drivers/UART/UART_MVCM3.h&quot;</span>/&gt;</div>
<div class="line"> &lt;/files&gt;</div>
<div class="line">&lt;/component&gt;</div>
</div><!-- fragment --> <dl class="section note"><dt>Note</dt><dd>The first two software components are added to <b>Device::HAL</b> because they are specific to the device family and are not using a published API. The drivers for I2C and UART are adhering to the <a href="http://www.keil.com/cmsis/driver" class="el" target="_blank">CMSIS-Driver</a> specification. Thus, they are added to the Cclass <b>CMSIS Driver</b>. </dd></dl>
</li>
<li>
An example project has also been created. Add an <b>&lt;examples&gt;</b> section with the following: <div class="fragment"><div class="line">&lt;examples&gt;</div>
<div class="line"> &lt;example name=<span class="stringliteral">&quot;Dummy&quot;</span> doc=<span class="stringliteral">&quot;Abstract.txt&quot;</span> folder=<span class="stringliteral">&quot;Examples/dummy&quot;</span>&gt;</div>
<div class="line"> &lt;description&gt;Dummy project&lt;/description&gt;</div>
<div class="line"> &lt;board name=<span class="stringliteral">&quot;MVCM3 Starter Kit&quot;</span> vendor=<span class="stringliteral">&quot;MyVendor&quot;</span>/&gt;</div>
<div class="line"> &lt;project&gt;</div>
<div class="line"> &lt;environment name=<span class="stringliteral">&quot;uv&quot;</span> load=<span class="stringliteral">&quot;dummy.uvprojx&quot;</span>/&gt;</div>
<div class="line"> &lt;/project&gt;</div>
<div class="line"> &lt;attributes&gt;</div>
<div class="line"> &lt;category&gt;Getting Started&lt;/category&gt;</div>
<div class="line"> &lt;/attributes&gt;</div>
<div class="line"> &lt;/example&gt;</div>
<div class="line">&lt;/examples&gt;</div>
</div><!-- fragment --> </li>
<li>
Add a new version number: <div class="fragment"><div class="line">&lt;release version=<span class="stringliteral">&quot;1.0.4&quot;</span>&gt;</div>
<div class="line"> DFP finalized</div>
<div class="line">&lt;/release&gt;</div>
</div><!-- fragment --> </li>
<li>
Finally, save the PDSC file and regenerate the Pack file using the <a class="el" href="cp_SWComponents.html#cp_GeneratePack">gen_pack.bat</a> script. Afterwards, install the Pack in your development tool. </li>
</ol>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

@@ -0,0 +1,97 @@
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
function updateStripes()
{
$('table.directory tr').
removeClass('even').filter(':visible:even').addClass('even');
}
function toggleLevel(level)
{
$('table.directory tr').each(function(){
var l = this.id.split('_').length-1;
var i = $('#img'+this.id.substring(3));
var a = $('#arr'+this.id.substring(3));
if (l<level+1) {
i.attr('src','ftv2folderopen.png');
a.attr('src','ftv2mnode.png');
$(this).show();
} else if (l==level+1) {
i.attr('src','ftv2folderclosed.png');
a.attr('src','ftv2pnode.png');
$(this).show();
} else {
$(this).hide();
}
});
updateStripes();
}
function toggleFolder(id)
{
//The clicked row
var currentRow = $('#row_'+id);
var currentRowImages = currentRow.find("img");
//All rows after the clicked row
var rows = currentRow.nextAll("tr");
//Only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() {
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
return this.id.match(re);
});
//First row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
rows.filter("[id^=row_"+id+"]").hide();
} else { //We are SHOWING
//All sub images
var childImages = childRows.find("img");
var childImg = childImages.filter("[id^=img]");
var childArr = childImages.filter("[id^=arr]");
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
childImg.attr('src','ftv2folderclosed.png'); //children closed
childArr.attr('src','ftv2pnode.png'); //children closed
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
}
}
@@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/dominate element</title>
<title>CMSIS-Pack: /package/dominate element</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_dominate.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/dominate element </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <a class="el" href="element_dominate.html">/package/dominate element</a> specifies that the Pack contains one or more <a class="el" href="pdsc_devices_pg.html#element_devices">device</a>, <a class="el" href="pdsc_apis_pg.html#element_apis">API</a>, or <a class="el" href="pdsc_components_pg.html#element_components">component</a> that overrules other packs that contain identical named <a class="el" href="pdsc_devices_pg.html#element_devices">device</a>, <a class="el" href="pdsc_apis_pg.html#element_apis">API</a>, or <a class="el" href="pdsc_components_pg.html#element_components">component</a>.</p>
<p>This attribute is useful for framing packs that:</p>
<ul>
<li>Contain <em>certified</em> software components which should overrule software components with identical name of other packs.</li>
<li>Contain new device definitions of devices that were previously defined in different packs.</li>
</ul>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;dominate info=<span class="stringliteral">&quot;CMSIS-Core, RTOS2, RTX5, Event Recorder, C Library certified for Cortex-M3&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Element: dominate">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>info </td><td>Descriptive text that explains the reason for the overwrite using dominate. </td><td>xs:string </td><td>optional </td></tr>
</table>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/keywords element</title>
<title>CMSIS-Pack: /package/keywords element</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_keywords.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/keywords element </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Is the group element for wrapping keywords, which can be used to find a Pack. Keywords can be exported to web pages to provide information for search engines, such as Google.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;keywords&gt;</div>
<div class="line"> &lt;keyword&gt;ARM&lt;/keyword&gt; </div>
<div class="line"> &lt;keyword&gt;Cortex-M&lt;/keyword&gt; </div>
<div class="line"> &lt;keyword&gt;TCP/IP Stack&lt;/keyword&gt; </div>
<div class="line"> &lt;/keywords&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Root Element: Package">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td>keyword </td><td>Element that encloses one keyword. Enter a keyword between the opening and closing tag of this element. </td><td>xs:string </td><td>1..1 </td></tr>
</table>
<p>&#160;</p>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,199 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/releases element</title>
<title>CMSIS-Pack: /package/releases element</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_releases.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/releases element </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Contains the release history of the Pack. This element is mandatory. No more than one such group can exist in a Pack. It contains the full release history of the Pack.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;releases&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/releases&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Element: Releases">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Child Element </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="element_releases.html#element_release">release</a> </td><td>Contains the version number of the release with some brief information about the main changes in that specific release. </td><td>xs:string </td><td>1..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_release"></a>
/package/releases/release</h1>
<p>Contains brief information of the main changes in each release version of a Pack. The content is a string written between the opening and closing <em>release</em> tags. The latest release version is always listed on top.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;releases&gt;</div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;1.1.1&quot;</span>&gt;Fixed a problem with the feature xyz.</div>
<div class="line"> &lt;/release&gt; </div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;1.1.0&quot;</span>&gt;Introduces a <span class="keyword">new</span> feature xyz.</div>
<div class="line"> &lt;/release&gt; </div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;1.0.0&quot;</span>&gt;First published version.</div>
<div class="line"> &lt;/release&gt; </div>
<div class="line">&lt;/releases&gt;</div>
</div><!-- fragment --><p><b>Example</b> for a public repository: </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;repository type=<span class="stringliteral">&quot;git&quot;</span>&gt;https:<span class="comment">//github.com/ARM-software/CMSIS-Driver.git&lt;/repository</span></div>
<div class="line"> &lt;releases&gt;</div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;2.1.0&quot;</span> tag=<span class="stringliteral">&quot;2.1.0&quot;</span> url=<span class="stringliteral">&quot;https://github.com/ARM-software/CMSIS-Driver/archive/2.1.0.zip&quot;</span>&gt;</div>
<div class="line"> Added LAN9220 Ethernet MAC+PHY driver.</div>
<div class="line"> &lt;/release&gt; </div>
<div class="line"> &lt;release version=<span class="stringliteral">&quot;2.0.0&quot;</span> tag=<span class="stringliteral">&quot;2.0.0&quot;</span> url=<span class="stringliteral">&quot;https://github.com/ARM-software/CMSIS-Driver/archive/2.0.0.zip&quot;</span>&gt;</div>
<div class="line"> First published version.</div>
<div class="line"> &lt;/release&gt; </div>
<div class="line"> &lt;/releases&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt; </div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Element: Release">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="element_releases.html">releases</a> </td><td colspan="3"><a class="el" href="element_releases.html">/package/releases element</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>version </td><td>Version number of the release. The version format is described in <a class="el" href="pdsc_package_pg.html#VersionType">Version Type</a>. </td><td>VersionType </td><td>required </td></tr>
<tr>
<td>date </td><td>Release date (specified as YYYY-MM-DD, for example 2014-12-14 (14th December 2014). </td><td>xs:date </td><td>optional </td></tr>
<tr>
<td>tag </td><td>In case the repository element is specified, the tag attribute is used to specify the repository tag that corresponds to this release of the pack. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>url </td><td>URL specifying the location of the pack of the specified version. This can be used to override the default location being <code>&lt;url&gt;/&lt;vendor&gt;</code>.&lt;name&gt;.&lt;version&gt;.pack </td><td>xs:anyURI </td><td>optional </td></tr>
<tr>
<td>deprecated </td><td>Pack is no longer officially supported after the set date. It will be excluded from checks for update. Deprecated packs may remain available for download from the server. Tools will continue to work but may provide indicators highlighting end of support for the pack and its content. Not recommended for use with new projects. Note this attribute is only relevant when set for the latest release located on top of the releases section. </td><td>xs:date </td><td>optional </td></tr>
<tr>
<td>replacement </td><td>Specifies the vendor and name of the Pack that shall be used instead. Use in conjunction with the deprecated attribute. E.g. the maintainer of the Pack A.X_DFP changes from vendor <em>A</em> to vendor <em>B</em>. In this case the attribute deprecated gets set in the A.X_DFP.pdsc and the replacement attribute set to B.X_DFP. Tools use this information to redirect users to a supported pack. </td><td>xs:string </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,159 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/repository element</title>
<title>CMSIS-Pack: /package/repository element</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_repository.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/repository element </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The element specifies the URL of the public repository the pack originates from. The attribute 'type' specifies the repository technology and therefore the tools required to be used with this repository.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;repository type=<span class="stringliteral">&quot;git&quot;</span>&gt;https:<span class="comment">//github.com/ARM-software/CMSIS-Driver.git&lt;/repository&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;/releases&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Element: repository">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>type </td><td>Repository management technology used by the specified public repository (e.g. git, svn). </td><td>xs:string </td><td>required </td></tr>
</table>
<p><b>Example:</b> </p>
<p>Contributing to a software pack hosted on GitHub:</p>
<ul>
<li>Open the URL specified by the <code>&lt;repository&gt;</code> element in a browser.</li>
<li>Create a fork of the repository.</li>
<li>Clone the fork on your machine (you may want to checkout the <code>tag</code> specified in the <a class="el" href="element_releases.html">&lt;release&gt;</a> element).</li>
<li>Create a branch for your modifications.</li>
<li>Develop and test the modifications of your branch and push the branch to GitHub.</li>
<li>Create a pull request of your branch into the upstream repository.</li>
</ul>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,262 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/requirements</title>
<title>CMSIS-Pack: /package/requirements</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_requirements_pg.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/requirements </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><a class="anchor" id="element_requirements"></a> There are three different requirement types:</p>
<ul>
<li>The <code>&lt;packages&gt;</code> section lists CMSIS Packs that have been used to configure the project. This includes the specification of a <code>version</code> range to ensure compatibility. If no version is provided, the latest installed version is used. If not yet installed, the latest available version will be installed before resolving the configuration.</li>
<li>The <code>&lt;compilers&gt;</code> section specifies the toolchains that are supported by this example. The required compiler version is specified using the <code>version</code> element. If no compiler is specified, it is assumed that any toolchain will work.</li>
<li>The <code>&lt;languages&gt;</code> section allows to specify requirements regarding the programming language, for example C99 standard. If no language requirements are set, ANSI C is assumed.</li>
</ul>
<p><b>Example</b> requirements section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;requirements&gt;</div>
<div class="line"> &lt;packages&gt;</div>
<div class="line"> &lt;package name=&quot;STM32F4xx_DFP&quot; vendor=&quot;Keil&quot; version=&quot;2.8.0:2.8.0&quot;/&gt;</div>
<div class="line"> &lt;/packages&gt;</div>
<div class="line"> &lt;compilers&gt;</div>
<div class="line"> &lt;compiler name=&quot;ARMCC&quot; version=&quot;5.0.0:5.99.0&quot;/&gt;</div>
<div class="line"> &lt;/compilers&gt;</div>
<div class="line"> &lt;languages&gt;</div>
<div class="line"> &lt;language name=&quot;C&quot; version=&quot;99&quot;/&gt;</div>
<div class="line"> &lt;/languages&gt;</div>
<div class="line"> &lt;/requirements&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p><b>/requirements</b> </p>
<table class="cmtable" summary="Element: package">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_packages">packages</a> </td><td>List of software packs required for the project to build. </td><td><a class="el" href="element_requirements_pg.html#element_packages">PackagesType</a> </td><td>&lt;0..1&gt; </td></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_compilers">compilers</a> </td><td>List of compilers required for the project to build. Support for all compilers is assumed when not specified. </td><td><a class="el" href="element_requirements_pg.html#element_compilers">CompilersType</a> </td><td>&lt;0..1&gt; </td></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_languages">languages</a> </td><td>List of language standards required for the project to build. Assuming ANSI C if not set. </td><td><a class="el" href="element_requirements_pg.html#element_languages">LanguagesType</a> </td><td>&lt;0..1&gt; </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_packages"></a>
/package/requirements/packages</h1>
<p><b>Example</b> packages section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;requirements&gt;</div>
<div class="line"> &lt;packages&gt;</div>
<div class="line"> &lt;package name=&quot;STM32F4xx_DFP&quot; vendor=&quot;Keil&quot; version=&quot;2.8.0:2.8.0&quot;/&gt;</div>
<div class="line"> &lt;/packages&gt;</div>
<div class="line"> &lt;/requirements&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p><b>/package</b> </p>
<table class="cmtable" summary="Element: package">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_packages">packages</a> </td><td colspan="3"><a class="el" href="element_requirements_pg.html#element_packages">/package/requirements/packages</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>vendor </td><td>specify vendor of the package (e.g. "ARM") </td><td>RestrictedString </td><td>required </td></tr>
<tr>
<td>name </td><td>Name of the pack </td><td>RestrictedString </td><td>required </td></tr>
<tr>
<td>version </td><td><a class="el" href="pdsc_package_pg.html#VersionType">Version</a> of the required software pack which can be:<ul>
<li>Minimum version (higher versions are accepted).</li>
<li>Version range specified with <em>min_version</em><b>:</b><em>max_version</em>. <em>min_version</em> must be lower or equal than <em>max_version</em>. If <em>min_version</em> and <em>max_version</em> are equal, the version must match.</li>
<li>If no version is specified, the latest available version is assumed. </li>
</ul>
</td><td><a class="el" href="pdsc_package_pg.html#VersionType">VersionType</a> </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_compilers"></a>
/package/requirements/compilers</h1>
<p><b>Example</b> compilers section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;requirements&gt;</div>
<div class="line"> &lt;compilers&gt;</div>
<div class="line"> &lt;compiler name=&quot;ARMCC&quot; version=&quot;5.0.0:5.99.0&quot;/&gt;</div>
<div class="line"> &lt;/compilers&gt;</div>
<div class="line"> &lt;/requirements&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p><b>/compiler</b> </p>
<table class="cmtable" summary="Element: compiler">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_requirements">requirements</a> </td><td colspan="3"><a class="el" href="element_requirements_pg.html#element_requirements">element_requirements</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Name of the required <a class="el" href="pdsc_conditions_pg.html#CompilerEnumType">compiler</a> (i.e. "ARMCC", "IAR") </td><td><a class="el" href="pdsc_conditions_pg.html#CompilerEnumType">CompilerEnumType</a> </td><td>required </td></tr>
<tr>
<td>version </td><td><a class="el" href="pdsc_package_pg.html#VersionType">Version</a> of the required compiler which can be:<ul>
<li>Minimum version (higher versions are accepted).</li>
<li>Version range specified with <em>min_version</em><b>:</b><em>max_version</em>. <em>min_version</em> must be lower or equal than <em>max_version</em>. If <em>min_version</em> and <em>max_version</em> are equal, the version must match. <br/>
</li>
</ul>
</td><td><a class="el" href="pdsc_package_pg.html#VersionType">VersionType</a> </td><td>required </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_languages"></a>
/package/requirements/languages</h1>
<p><b>Example</b> languages section: </p>
<div class="fragment"><div class="line">&lt;<span class="keyword">package </span>xmlns:xsi=&quot;http:<span class="comment">//www.w3.org/2001/XMLSchema-instance&quot; xsi:noNamespaceSchemaLocation=&quot;PACK.xsd&quot;/&gt;</span></div>
<div class="line"> ...</div>
<div class="line"> &lt;requirements&gt;</div>
<div class="line"> &lt;languages&gt;</div>
<div class="line"> &lt;language name=&quot;C&quot; version=&quot;99&quot;/&gt;</div>
<div class="line"> &lt;languages&gt;</div>
<div class="line"> &lt;/requirements&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p><b>/language</b> </p>
<table class="cmtable" summary="Element: language">
<tr>
<th>Parents </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="element_requirements_pg.html#element_requirements">requirements</a> </td><td colspan="3"><a class="el" href="element_requirements_pg.html#element_requirements">element_requirements</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>name </td><td>Name of the programming language (i.e. "C", "C++") </td><td>xs:string </td><td>required </td></tr>
<tr>
<td>version </td><td>Version of the language standard (i.e. 90, 99, etc.). The setting will be reflected in the compiler commandline. </td><td>xs:string </td><td>required </td></tr>
</table>
<p>&#160;</p>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,288 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>/package/taxonomy element</title>
<title>CMSIS-Pack: /package/taxonomy element</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('element_taxonomy.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">/package/taxonomy element </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Group to list description elements that define component classes and component group names used within a package description. This element is optional.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;package&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;taxonomy&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/taxonomy&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/package&gt;</div>
</div><!-- fragment --><p>&#160;</p>
<table class="cmtable" summary="Element: Taxonomy">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html#element_package">package</a> </td><td colspan="3"><a class="el" href="pdsc_package_pg.html#element_package">/package</a> </td></tr>
<tr>
<th>Child Elements </th><th>Description </th><th>Type </th><th>Occurrence </th></tr>
<tr>
<td><a class="el" href="element_taxonomy.html#element_taxonomyDescription">description</a> </td><td>Describes or defines a component class or class-group combination. </td><td>TaxonomyDescriptionType </td><td>1..* </td></tr>
</table>
<p>&#160;</p>
<hr/>
<h1><a class="anchor" id="element_taxonomyDescription"></a>
/package/taxonomy/description</h1>
<p>This element describes a component class or the combination between a component class and a component group. Components are categorized by <em>Cclass</em> and <em>Cgroup</em>. The creator of a package can define names for <em>Cclass</em> and <em>Cgroup</em>. Thus, configuration tools can display the set of available components. A document can be referenced using the attribute <em>doc</em>. The attribute <em>generator</em> can be used to reference to a generator tool. The <em>id</em> of the generator needs to be the same as specified in the element <a class="el" href="pdsc_generators_pg.html#element_generator">/package/generators/generator</a>. The description itself is a string entered between the opening and closing tags of the element <b>description</b>.</p>
<p>It is recommended to use an already agreed taxonomy for interchangeable components. For example, the combination of class <span class="XML-Token">CMSIS</span> and group <span class="XML-Token">Startup</span> is defined for the device-specific CMSIS-Core (Cortex-M) files.</p>
<p>&#160;</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;taxonomy&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;Board Support&quot;</span>&gt;Generic Interfaces <span class="keywordflow">for</span> Evaluation and Development Boards&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> doc=<span class="stringliteral">&quot;CMSIS/Documentation/General/html/index.html&quot;</span>&gt;Cortex Microcontroller Software Interface Components&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;Device&quot;</span> doc=<span class="stringliteral">&quot;CMSIS/Documentation/Core/html/index.html&quot;</span>&gt;Startup, System Setup&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;CMSIS Driver&quot;</span> doc=<span class="stringliteral">&quot;CMSIS/Documentation/Driver/html/index.html&quot;</span>&gt;Unified Device Drivers compliant to CMSIS-Driver Specifications&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;File System&quot;</span>&gt;File Drive Support and File System&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;Graphics&quot;</span>&gt;Graphical User Interface&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;Network&quot;</span>&gt;Network Stack <span class="keyword">using</span> Internet Protocols&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;USB&quot;</span>&gt;Universal Serial Bus Stack&lt;/description&gt;</div>
<div class="line"> &lt;description Cclass=<span class="stringliteral">&quot;RTOS&quot;</span>&gt;Realtime Operating System&lt;/description&gt;</div>
<div class="line">&lt;/taxonomy&gt;</div>
</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>You <b>must</b> <b>not</b> use Windows or Linux <a href="http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words" target="_blank">reserved characters</a> for <em>Cclass</em>, <em>Cgrouop</em>, and <em>Csub</em> names! Some development tools use these names to create a directory structure for the software components in projects. Reserved characters are: <pre class="fragment">&lt; (less than)
&gt; (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
</pre></dd></dl>
<p>&#160;</p>
<table class="cmtable" summary="Element: Taxonomy">
<tr>
<th>Parent Element </th><th colspan="3">Element Chain </th></tr>
<tr>
<td><a class="el" href="element_taxonomy.html">taxonomy</a> </td><td colspan="3"><a class="el" href="element_taxonomy.html">/package/taxonomy element</a> </td></tr>
<tr>
<th>Attributes </th><th>Description </th><th>Type </th><th>Use </th></tr>
<tr>
<td>Cclass </td><td>Component Class Name. Can be defined by the creator of the package. Predefined values can be used as listed in the table <a class="el" href="element_taxonomy.html#CclassType">Component Classes</a>. </td><td>Cclass </td><td>required </td></tr>
<tr>
<td>Cgroup </td><td>Component Group Name. Can be defined by the creator of the package. Predefined values can be used as listed in the table <a class="el" href="element_taxonomy.html#CgroupType">Component Groups</a>. </td><td>CgroupType </td><td>optional </td></tr>
<tr>
<td>doc </td><td>Reference to documentation. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>generator </td><td>Reference to a generator. Enter the <b>id</b> value of the element <a class="el" href="pdsc_generators_pg.html#element_generator">/package/generators/generator</a>. </td><td>xs:string </td><td>optional </td></tr>
<tr>
<td>public </td><td>Set publishing permissions for the documentation. If <em>&lt;public&gt;</em> is <span class="XML-Token">true</span>, then the vendor gives permission to extract the documentation from the pack and publish it on a web-page. Links to web pages are assumed to be public. The default value is <span class="XML-Token">false</span>. </td><td>xs:boolean </td><td>optional </td></tr>
</table>
<p>&#160;</p>
<p><a class="anchor" id="CclassType"></a><b>Table: Component Classes</b></p>
<p>Component Class names are strings with a minimum length of 3 characters and a maximum length of 32 characters. Component class names are specified in the section <a class="el" href="element_taxonomy.html#element_taxonomyDescription">/package/taxonomy/description</a>.</p>
<p>These values can be used in the elements:</p>
<ul>
<li><a class="el" href="pdsc_conditions_pg.html#element_accept">/package/conditions/condition/accept</a></li>
<li><a class="el" href="pdsc_conditions_pg.html#element_require">/package/conditions/condition/require</a></li>
<li><a class="el" href="pdsc_conditions_pg.html#element_deny">/package/conditions/condition/deny</a></li>
<li><a class="el" href="pdsc_examples_pg.html#element_example_attribute_component">/package/examples/example/attributes/component</a></li>
<li><a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a></li>
<li><a class="el" href="pdsc_components_pg.html#element_bundle">/package/components/bundle</a></li>
<li><a class="el" href="pdsc_apis_pg.html#element_api">/package/apis/api</a></li>
<li><a class="el" href="element_taxonomy.html#element_taxonomyDescription">/package/taxonomy/description</a></li>
<li><a class="el" href="cpdsc_pg.html#element_project_component">/package/create/project/select/component</a></li>
</ul>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;... Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span> ...&gt;</div>
</div><!-- fragment --> <p>&#160;</p>
<p>The table lists predefined Component Classes. </p>
<table class="cmtable" summary="Predefined Cclass names">
<tr>
<th>Cclass= </th><th>Description </th></tr>
<tr>
<td class="XML-Token">Audio </td><td>Software components for audio processing </td></tr>
<tr>
<td class="XML-Token">Board Support </td><td>Components providing interfaces for Evaluation and Development Boards </td></tr>
<tr>
<td class="XML-Token">Board Part </td><td>Drivers that support an external component available on an evaluation board </td></tr>
<tr>
<td class="XML-Token">Compiler </td><td>Components implementing compiler specific interfaces (e.g. Retargeting) </td></tr>
<tr>
<td class="XML-Token">CMSIS </td><td>Components defined by Cortex Microcontroller Software Interface Standard (e.g. <a href="../../Core/html/index.html" class="el">CMSIS-Core(M)</a>, <a href="../../Core_A/html/index.html" class="el">CMSIS-Core(A)</a>, <a href="../../DSP/html/index.html" class="el">CMSIS-DSP</a> and <a href="../../RTOS/html/index.html" class="el">CMSIS-RTOS</a>) </td></tr>
<tr>
<td class="XML-Token">CMSIS Driver </td><td>Components implementing unified device drivers compliant to <a href="../../Driver/html/index.html" class="el">CMSIS-Driver</a> (e.g. UART, SPI, USB, etc.) </td></tr>
<tr>
<td class="XML-Token">Device </td><td>Components containing device specific implementations of non-standard APIs (e.g. HAL drivers, CMSIS Startup files) </td></tr>
<tr>
<td class="XML-Token">Data Exchange </td><td>Components implementing some kind of data exchange or data formatter </td></tr>
<tr>
<td class="XML-Token">Extension Board </td><td>Drivers that support an extension board or shield </td></tr>
<tr>
<td class="XML-Token">File System </td><td>Components implementing some kind of File Systems (e.g. Flash or RAM based file systems) </td></tr>
<tr>
<td class="XML-Token">Graphics </td><td>Components implementing some kind of Display and Graphics Software </td></tr>
<tr>
<td class="XML-Token">IoT Client </td><td>Components implementing some kind of IoT cloud client connector </td></tr>
<tr>
<td class="XML-Token">IoT Utility </td><td>IoT specific software utility </td></tr>
<tr>
<td class="XML-Token">Network </td><td>Components implementing some kind of network communications (e.g. TCP/IP Stack) </td></tr>
<tr>
<td class="XML-Token">RTOS </td><td>Components implementing some kind of real-time operating system (e.g. FreeRTOS, Micrium Real Time Kernel) </td></tr>
<tr>
<td class="XML-Token">Security </td><td>Components implementing some kind of encryption for secure communication or storage </td></tr>
<tr>
<td class="XML-Token">USB </td><td>Components implementing some kind of USB interfaces (e.g. Host and Device interfaces) </td></tr>
<tr>
<td class="XML-Token">Utility </td><td>Generic software utility components </td></tr>
</table>
<p>&#160;</p>
<p><a class="anchor" id="CgroupType"></a><b>Table: Component Groups</b></p>
<p>Component Group names are specified by the element <b>Cgroup</b> and create categories within a Component Class specified by the element <b>Cclass</b>. The creator of the Pack can define the names in the element <a class="el" href="element_taxonomy.html#element_taxonomyDescription">/package/taxonomy/description</a>. A Component Group name is string with a length between 3 and 32 characters.</p>
<p><b>Example:</b> </p>
<div class="fragment"><div class="line">&lt;... Cgroup=<span class="stringliteral">&quot;RTOS&quot;</span> Cclass=<span class="stringliteral">&quot;CMSIS&quot;</span>...&gt;</div>
</div><!-- fragment --> <p>&#160;</p>
<p>Component Groups can be used in the elements:</p>
<ul>
<li><a class="el" href="pdsc_conditions_pg.html#element_accept">/package/conditions/condition/accept</a></li>
<li><a class="el" href="pdsc_conditions_pg.html#element_require">/package/conditions/condition/require</a></li>
<li><a class="el" href="pdsc_conditions_pg.html#element_deny">/package/conditions/condition/deny</a></li>
<li><a class="el" href="pdsc_examples_pg.html#element_example_attribute_component">/package/examples/example/attributes/component</a></li>
<li><a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a></li>
<li><a class="el" href="pdsc_apis_pg.html#element_api">/package/apis/api</a></li>
<li><a class="el" href="element_taxonomy.html#element_taxonomyDescription">/package/taxonomy/description</a></li>
<li><a class="el" href="cpdsc_pg.html#element_project_component">/package/create/project/select/component</a></li>
</ul>
<p>The table lists predefined values for the Component Class <b>Cclass="CMSIS"</b>. No other Component Groups have been defined so far. </p>
<table class="cmtable" summary="Predefined Cgroup names for Component Class CMSIS">
<tr>
<th>Cgroup= </th><th>Description </th></tr>
<tr>
<td class="XML-Token">CORE </td><td>A component containing device support in accordance to the <a href="../../Core/html/index.html" class="el">CMSIS-Core(M)</a> or <a href="../../Core_A/html/index.html" class="el">CMSIS-Core(A)</a> specifications (startup, system and device files) </td></tr>
<tr>
<td class="XML-Token">DSP </td><td>A component implementing the <a href="../../DSP/html/index.html" class="el">CMSIS-DSP</a> API specification. </td></tr>
<tr>
<td class="XML-Token">NN Lib </td><td>A component implementing the <a href="../../NN/html/index.html" class="el">CMSIS-NN</a> API specification. </td></tr>
<tr>
<td class="XML-Token">RTOS </td><td>A component implementing the <a href="../../RTOS/html/index.html" class="el">CMSIS-RTOS</a> API specification. </td></tr>
<tr>
<td class="XML-Token">RTOS2 </td><td>A component implementing the <a href="../../RTOS2/html/index.html" class="el">CMSIS-RTOS v2</a> API specification. </td></tr>
</table>
<p>&#160;</p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

@@ -0,0 +1,197 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Flash Programming</title>
<title>CMSIS-Pack: Flash Programming</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('flashAlgorithm.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Flash Programming </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><b>Flash Programming Algorithms</b> are a piece of software to erase or download applications to Flash devices. A <a class="el" href="createPack_DFP.html">Pack with Device Support</a> usually contains predefined Flash algorithms for programming the devices that are supported by the DFP. A template for creating new algorithms are available in the <b>ARM:CMSIS</b> Pack. The following section describes the process in more detail.</p>
<h1><a class="anchor" id="CreateFPA"></a>
Creating a new Algorithm</h1>
<p>Flash programming algorithms are defined with functions to erase and program the Flash device. Special compiler and linker settings are required. Follow these steps to create and configure a new Flash programming algorithm:</p>
<ol type="1">
<li>Copy the content from the <b>ARM:CMSIS</b> Pack folder (usually C:\Keil\ARM\Pack\ARM\CMSIS\<em>version</em>\Device\_Template_Flash) to a new folder.</li>
<li>Rename the project file <b>NewDevice.uvprojx</b> to represent the new Flash ROM device name, for example <b>MyDevice.uvprojx</b>.</li>
<li>Open the project with uVision. From the toolbar, use the drop-down <b>Select Target</b> to define the processor architecture. <b>Cortex-M</b> fits for all Cortex-M0/M0+, M3, and M4 devices. The configuration assumes a little-endian microcontroller. In case of a big-endian microcontroller, select the correct processor core with <b>Project</b> - <b>Options for Target</b> - <b>Device</b>.</li>
<li>Open the dialog <b>Project</b> - <b>Options for Target</b> - <b>Output</b> and change the content of the field <b>Name of Executable</b> to represent the device, for example <b>MyDevice</b>.</li>
<li>Adapt the programming algorithms in the file <a class="el" href="flashAlgorithm.html#FlashPrg">FlashPrg</a>.</li>
<li>Adapt the device parameters in the file <a class="el" href="flashAlgorithm.html#FlashDev">FlashDev</a>.</li>
<li>Use <b>Project</b> - <b>Build Target</b> to generate the new Flash programming algorithm. The output file (for example <b>MyDevice.FLM</b>) has to be <a class="el" href="flashAlgorithm.html#AddFPA">added</a> to the <b>DFP</b>.</li>
</ol>
<dl class="section note"><dt>Note</dt><dd><ul>
<li>Creating a Flash programming algorithm with <a href="http://www.keil.com/arm/selector.asp" class="el" target="_blank">MDK-Lite</a> is not supported.</li>
<li>Flash programming algorithms use <b>Read-Only Position Independent</b> and <b>Read-Write Position Independent</b> program code. These options are set in the dialogs <b>Project</b> - <b>Options for Target</b> - <b>C/C++</b> and <b>Project</b> - <b>Options for Target</b> - <b>Asm</b>.</li>
<li>The dialog <b>Project</b> - <b>Options for Target</b> - <b>Linker</b> defines the linker scatter file <b>Target.lin</b>. The error L6305 is disabled with <code>&ndash;diag_suppress</code> <code>L6305</code>.</li>
<li>The <a class="el" href="algorithmFunc.html">Flash Algorithm Functions</a> section contains reference for all the available functions.</li>
</ul>
</dd></dl>
<p><a class="anchor" id="FlashPrg"></a></p>
<h2>FlashPrg.c </h2>
<p>The file <b>FlashPrg.c</b> contains the mandatory Flash programming functions <a class="el" href="algorithmFunc.html#Init">Init</a>, <a class="el" href="algorithmFunc.html#UnInit">UnInit</a>, <a class="el" href="algorithmFunc.html#EraseSector">EraseSector</a>, and <a class="el" href="algorithmFunc.html#ProgramPage">ProgramPage</a>. Optionally, depending on the device features (or to speed-up execution), the functions <a class="el" href="algorithmFunc.html#EraseChip">EraseChip</a>, <a class="el" href="algorithmFunc.html#BlankCheck">BlankCheck</a>, and <a class="el" href="algorithmFunc.html#Verify">Verify</a> can be implemented.</p>
<p><a class="anchor" id="FlashDev"></a></p>
<h2>FlashDev.c </h2>
<p>The file <b>FlashDev.c</b> contains parameter definitions for:</p>
<ol type="1">
<li>the Flash programming functions.</li>
<li>the <b>FlashDevice</b> structure: <div class="fragment"><div class="line"><span class="keyword">struct </span>FlashDevice const FlashDevice = {</div>
<div class="line"> FLASH_DRV_VERS, <span class="comment">// Driver Version, do not modify!</span></div>
<div class="line"> <span class="stringliteral">&quot;New Device 256kB Flash&quot;</span>, <span class="comment">// Device Name </span></div>
<div class="line"> ONCHIP, <span class="comment">// Device Type</span></div>
<div class="line"> 0x00000000, <span class="comment">// Device Start Address</span></div>
<div class="line"> 0x00040000, <span class="comment">// Device Size in Bytes (256kB)</span></div>
<div class="line"> 1024, <span class="comment">// Programming Page Size</span></div>
<div class="line"> 0, <span class="comment">// Reserved, must be 0</span></div>
<div class="line"> 0xFF, <span class="comment">// Initial Content of Erased Memory</span></div>
<div class="line"> 100, <span class="comment">// Program Page Timeout 100 mSec</span></div>
<div class="line"> 3000, <span class="comment">// Erase Sector Timeout 3000 mSec</span></div>
<div class="line"> </div>
<div class="line"><span class="comment">// Specify Size and Address of Sectors</span></div>
<div class="line"> 0x002000, 0x000000, <span class="comment">// Sector Size 8kB (8 Sectors)</span></div>
<div class="line"> 0x010000, 0x010000, <span class="comment">// Sector Size 64kB (2 Sectors) </span></div>
<div class="line"> 0x002000, 0x030000, <span class="comment">// Sector Size 8kB (8 Sectors)</span></div>
<div class="line"> SECTOR_END</div>
<div class="line">};</div>
</div><!-- fragment --></li>
</ol>
<dl class="section note"><dt>Note</dt><dd>The <b>Device Name</b> is usually be shown in tools to identify the Flash algorithm. Make sure that this name reflects the device name.</dd>
<dd>
The <b>Programming Page Size</b> specifies the block size for programming using the function <a class="el" href="algorithmFunc.html#ProgramPage">ProgramPage</a>. For devices with small block sizes it might be better to specify a multiple of the physical block size as this reduces the communication overhead to the target. An optimal block size for fast programming is 1024 bytes, however the system itself does not restrict this size value.</dd></dl>
<h1><a class="anchor" id="AddFPA"></a>
Adding an Algorithm to a Pack</h1>
<p>The generated <b>*.FLM</b> file needs to be added to the <a class="el" href="createPack_DFP.html">Pack with Device Support</a>, so that it is available to the tool user for programming his device. Usually, a directory <b>Flash</b> is created and the algorithm is saved in this directory.</p>
<p>The algorithm is specified within the the <a class="el" href="pdsc_family_pg.html#element_family">/package/devices/family</a> level: </p>
<div class="fragment"><div class="line">&lt;family Dfamily=<span class="stringliteral">&quot;STM32F4&quot;</span> Dvendor=<span class="stringliteral">&quot;STMicroelectronics:13&quot;</span>&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;algorithm name=<span class="stringliteral">&quot;Flash/STM32F2xx_512.flm&quot;</span> start=0x08000000 size=0x10000 <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt; &lt;!-- valid <span class="keywordflow">for</span> all devices of the family --&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;subFamily DsubFamily=<span class="stringliteral">&quot;STM32F405&quot;</span>&gt;</div>
<div class="line"> &lt;algorithm name=<span class="stringliteral">&quot;Flash/STM32F2xx_1024.flm&quot;</span> start=0x08000000 size=0x20000 <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt; &lt;!-- valid <span class="keywordflow">for</span> all devices of a subFamily --&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;device Dname=<span class="stringliteral">&quot;STM32F405OE&quot;</span>&gt;</div>
<div class="line"> &lt;algorithm name=<span class="stringliteral">&quot;Flash/STM32F2xx_2048.flm&quot;</span> start=0x08000000 size=0x40000 <span class="keywordflow">default</span>=<span class="stringliteral">&quot;1&quot;</span>/&gt; &lt;!-- <span class="keywordflow">finally</span>, <span class="keyword">this</span> is the <span class="keywordflow">default</span> <span class="keywordflow">for</span> the device --&gt;</div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> ...</div>
<div class="line">&lt;/family&gt;</div>
</div><!-- fragment --><p>The argument <em>start</em> specifies the base address for the Flash programming algorithm.</p>
<p>The argument <em>size</em> specifies the size covered by the Flash programming algorithm. End address = start + size - 1.</p>
<p>The argument <em>default</em> specifies whether a Flash programming algorithm is set as the default algorithm in a project (when <span class="XML-Token">true</span>). If <em>default</em> is not set or false, the Flash programming algorithm can be configured on a lower level. However, the Flash programming algorithm of a project can be changed manually at any time during development. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,14 @@
var flashAlgorithm =
[
[ "Creating a new Algorithm", "flashAlgorithm.html#CreateFPA", null ],
[ "Adding an Algorithm to a Pack", "flashAlgorithm.html#AddFPA", null ],
[ "Algorithm Functions", "algorithmFunc.html", [
[ "BlankCheck", "algorithmFunc.html#BlankCheck", null ],
[ "EraseChip", "algorithmFunc.html#EraseChip", null ],
[ "EraseSector", "algorithmFunc.html#EraseSector", null ],
[ "Init", "algorithmFunc.html#Init", null ],
[ "ProgramPage", "algorithmFunc.html#ProgramPage", null ],
[ "UnInit", "algorithmFunc.html#UnInit", null ],
[ "Verify", "algorithmFunc.html#Verify", null ]
] ]
];
Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

@@ -0,0 +1,190 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Main Page</title>
<title>CMSIS-Pack: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('index.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">CMSIS-Pack Documentation</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><b>CMSIS-Pack</b> describes a delivery mechanism for software components, device parameters, and evaluation board support. The XML-based package description (PDSC) file describes the content of a <a class="el" href="cp_SWComponents.html">Software Pack</a> (file collection) that includes:</p>
<ul>
<li>Source code, header files, and software libraries</li>
<li>Documentation and source code templates</li>
<li>Device parameters along with startup code and programming algorithms</li>
<li>Example projects</li>
</ul>
<p>The complete file collection along with the PDSC file is shipped in ZIP-format (renamed to *.pack). The PDSC file is designed for software development environments and describes the user and device relevant context for the files supplied within such a pack file.</p>
<p>The CMSIS-Pack system solves several problems:</p>
<ul>
<li>It provides meta-data of files that relate to a software component. All files that belong to a software component can be identified and information about the original provider is preserved.</li>
<li>It enables consistent software component upgrade and identifies incompatible configuration files that may be part of the user application.</li>
<li>Software component providers can specify the interfaces and relationship to other software components.</li>
<li>The meta-data of a software component can include dependency information for toolchains, devices, and processors which simplifies the integration into application programs.</li>
</ul>
<p>After installing a <a class="el" href="cp_SWComponents.html">Software Pack</a>, all included software components are available to the development tools. <a class="el" href="cp_SWComponents.html#cp_Components">Software components</a> are a collection of source modules, header and configuration files as well as libraries. Packs containing software components can also include <a class="el" href="cp_SWComponents.html#cp_Examples">Example Projects</a> and <a class="el" href="cp_SWComponents.html#cp_CodeTemplates">User Code Templates</a>.</p>
<p>The <a class="el" href="pack_revisionHistory.html">Revision History of CMSIS-Pack</a> lists the main changes between versions.</p>
<h1><a class="anchor" id="SWPackVariants"></a>
Software Pack Use Cases</h1>
<p>A pack can be used for multiple purposes:</p>
<div class="image">
<img src="SPVariants_small.png" alt="SPVariants_small.png"/>
<div class="caption">
Software Pack Use Cases</div></div>
<p> The figure above shows the following use cases for Software Packs:</p>
<ul>
<li><b>Device Family Pack (DFP):</b> contains CMSIS system/startup files, drivers, and flash algorithms for a microcontroller device family.</li>
<li><b>CMSIS Software Pack:</b> contains the generic CMSIS components (CORE, DSP Library, and RTOS implementation) supplied by Arm.</li>
<li><b>Middleware Pack:</b> contains software components belonging to a middleware (such as source code or libraries).</li>
<li><b>Board Support Pack (BSP):</b> contains documentation, schematics, and drivers for a certain development board.</li>
<li><b>In-house Software Packs:</b> usually contain software components that can be distributed within a company or engineering group.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>A Software Pack can address multiple use cases at the same time!</dd></dl>
<p>The following sections provide more information:</p>
<ul>
<li>In the <a class="el" href="cp_Packs.html">Overview</a>, learn the basics and the required steps for creating a pack.</li>
<li><a class="el" href="cp_SWComponents.html">Pack with Software Components</a> shows how to start a pack from scratch.</li>
<li><a class="el" href="createPack_DFP.html">Pack with Device Support</a> describes how to enable device support in a DFP.</li>
<li><a class="el" href="createPackBoard.html">Pack with Board Support</a> covers the creation of Board Support Packs (BSPs).</li>
<li><a class="el" href="pack_Example.html">Pack Example</a> explains the available example pack in more detail.</li>
<li>Learn how to <a class="el" href="createPackPublish.html">Publish a Pack</a>.</li>
<li><a class="el" href="createPackUtil.html">Utilities for Creating Packs</a> are available that are useful during the creation of a pack.</li>
<li><a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a> describes all XML elements that can be used in a PDSC file.</li>
<li><a class="el" href="configWizard.html">Configuration Wizard Annotations</a> can be used to create GUI-like elements in development tools for configuration files.</li>
<li><a class="el" href="flashAlgorithm.html">Flash Programming</a> algorithms are used to erase or download applications to Flash devices.</li>
<li><a class="el" href="coresight_setup.html">Debug Setup with CMSIS-Pack</a> allows to create tool-agnostic debug and trace configurations</li>
<li><a class="el" href="cpdsc_pg.html">Project Description (*.cpdsc) Format</a> is a environment/tool independent definition of a software project. This helps to create only one set of example projects that can be used by many different tool vendors.</li>
<li><a class="el" href="packIndexFile.html">CMSIS-Pack Index Files</a> are used to generate a catalog of available packs.</li>
</ul>
<hr/>
<h2>CMSIS-Pack in ARM::CMSIS Pack </h2>
<p>Files relevant to CMSIS-Pack are present in the following <b>ARM::CMSIS</b> directories: </p>
<table class="doxtable">
<tr>
<th>Folder </th><th>Content </th></tr>
<tr>
<td>Utilities </td><td><a class="el" href="createPackUtil.html">Utilities for Creating Packs</a> </td></tr>
<tr>
<td>Pack\Example </td><td><a class="el" href="pack_Example.html">Reference Software Pack</a> </td></tr>
<tr>
<td>Pack\Tutorials </td><td>Tutorials for <a class="el" href="cp_Packs.html">Creating Packs</a> </td></tr>
</table>
<hr/>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:01 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

@@ -0,0 +1,143 @@
#nav-tree .children_ul {
margin:0;
padding:4px;
}
#nav-tree ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
#nav-tree li {
white-space:nowrap;
margin:0px;
padding:0px;
}
#nav-tree .plus {
margin:0px;
}
#nav-tree .selected {
background-image: url('tab_a.png');
background-repeat:repeat-x;
color: #fff;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
}
#nav-tree img {
margin:0px;
padding:0px;
border:0px;
vertical-align: middle;
}
#nav-tree a {
text-decoration:none;
padding:0px;
margin:0px;
outline:none;
}
#nav-tree .label {
margin:0px;
padding:0px;
font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
}
#nav-tree .label a {
padding:2px;
}
#nav-tree .selected a {
text-decoration:none;
color:#fff;
}
#nav-tree .children_ul {
margin:0px;
padding:0px;
}
#nav-tree .item {
margin:0px;
padding:0px;
}
#nav-tree {
padding: 0px 0px;
background-color: #FAFAFF;
font-size:14px;
overflow:auto;
}
#doc-content {
overflow:auto;
display:block;
padding:0px;
margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#side-nav {
padding:0 6px 0 0;
margin: 0px;
display:block;
position: absolute;
left: 0px;
width: 250px;
}
.ui-resizable .ui-resizable-handle {
display:block;
}
.ui-resizable-e {
background:url("ftv2splitbar.png") repeat scroll right center transparent;
cursor:e-resize;
height:100%;
right:0;
top:0;
width:6px;
}
.ui-resizable-handle {
display:none;
font-size:0.1px;
position:absolute;
z-index:1;
}
#nav-tree-contents {
margin: 6px 0px 0px 0px;
}
#nav-tree {
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: #F9FAFC;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#nav-sync {
position:absolute;
top:5px;
right:24px;
z-index:0;
}
#nav-sync img {
opacity:0.3;
}
#nav-sync img:hover {
opacity:0.9;
}
@media print
{
#nav-tree { display: none; }
div.ui-resizable-handle { display: none; position: relative; }
}
@@ -0,0 +1,631 @@
var NAVTREE =
[
[ "CMSIS-Pack", "index.html", [
[ "Software Pack Use Cases", "index.html#SWPackVariants", null ],
[ "Revision History of CMSIS-Pack", "pack_revisionHistory.html", null ],
[ "Overview", "cp_Packs.html", [
[ "Software Components", "cp_Packs.html#cp_Components", null ],
[ "References to other software components", "cp_Packs.html#cp_Cond", null ],
[ "Requirements", "cp_Packs.html#cp_Requirements", null ],
[ "Central API definition", "cp_Packs.html#cp_APIDef", null ],
[ "Inventory header file: RTE_Components.h", "cp_Packs.html#cp_RTECompH", null ],
[ "Combining software components", "cp_Packs.html#cp_Combine", null ],
[ "Steps to Create a Pack", "cp_Packs.html#cp_PackSteps", null ],
[ "Pack Tutorial", "cp_Packs.html#PackTutorials", null ],
[ "Pack Conventions", "cp_Packs.html#PackFilenames", [
[ "Pack File Name", "cp_Packs.html#pack_filename", null ],
[ "Software Component Cclasses", "cp_Packs.html#pack_Cclass", null ]
] ]
] ],
[ "Pack with Software Components", "cp_SWComponents.html", [
[ "Create PDSC File", "cp_SWComponents.html#cp_CreatePDSC", null ],
[ "Generate a Pack", "cp_SWComponents.html#cp_GeneratePack", null ],
[ "Software Components", "cp_SWComponents.html#cp_Components", null ],
[ "Conditions", "cp_SWComponents.html#cp_Conditions", null ],
[ "Variants", "cp_SWComponents.html#cp_Variants", null ],
[ "RTE_Components.h", "cp_SWComponents.html#cp_RTEComponents_h", null ],
[ "Bundles", "cp_SWComponents.html#cp_Bundles", null ],
[ "Instances", "cp_SWComponents.html#cp_Instances", null ],
[ "API Interface", "cp_SWComponents.html#cp_API", null ],
[ "User Code Templates", "cp_SWComponents.html#cp_CodeTemplates", null ],
[ "Example Projects", "cp_SWComponents.html#cp_Examples", null ]
] ],
[ "Pack with Device Support", "createPack_DFP.html", [
[ "Basic Device Family Pack", "createPack_DFP.html#cp_BasicDFP", null ],
[ "System and Startup Files", "createPack_DFP.html#cp_System_Startp", null ],
[ "System View Description File", "createPack_DFP.html#cp_SVD", null ],
[ "Flash Programming Algorithms", "createPack_DFP.html#cp_FlashProgrammingAlgorithm", null ],
[ "Debug Descriptions", "createPack_DFP.html#cp_debugdescription", null ],
[ "Device Properties", "createPack_DFP.html#cp_DeviceProperties", [
[ "Device Specific Software Components", "createPack_DFP.html#cp_DeviceSWComp", null ]
] ]
] ],
[ "Pack with Board Support", "createPackBoard.html", [
[ "Specify a Development Board", "createPackBoard.html#cp_SpecDevBoard", null ],
[ "Create a BSP Bundle", "createPackBoard.html#cp_BundleExample", null ]
] ],
[ "Pack Example", "pack_Example.html", null ],
[ "Utilities for Creating Packs", "createPackUtil.html", "createPackUtil" ],
[ "Publish a Pack", "createPackPublish.html", [
[ "Prerequisites", "createPackPublish.html#cp_prerequisites", null ],
[ "Local Installation", "createPackPublish.html#cp_LocalInstallation", null ],
[ "Web Download", "createPackPublish.html#cp_WebDownload", null ],
[ "Publishing using Arm's Pack Index Service", "createPackPublish.html#cp_KeilComPack", null ],
[ "Moving a pack from one URL to another", "createPackPublish.html#cp_PackRehosting", null ]
] ],
[ "Pack Description (*.pdsc) Format", "packFormat.html", "packFormat" ],
[ "Configuration Wizard Annotations", "configWizard.html", [
[ "Annotation Rules", "configWizard.html#configWizard_annotations", null ],
[ "Code Example", "configWizard.html#configWizard_codeExample", null ],
[ "Tool-specific display", "configWizard.html#configWizard_display", null ]
] ],
[ "Flash Programming", "flashAlgorithm.html", "flashAlgorithm" ],
[ "Debug Setup with CMSIS-Pack", "coresight_setup.html", "coresight_setup" ],
[ "Project Description (*.cpdsc) Format", "cpdsc_pg.html", [
[ "Definition of CMSIS project", "cpdsc_pg.html#cpdsc_definition", null ],
[ "CPDSC top level structure", "cpdsc_pg.html#cpdsc_structure", null ],
[ "/package (for CPDSC)", "cpdsc_pg.html#element_package_cpdsc", null ],
[ "/package/create", "cpdsc_pg.html#cpdsc_create_pg", null ],
[ "/package/create/project", "cpdsc_pg.html#element_project", null ],
[ "/package/create/project/target", "cpdsc_pg.html#cpdsc_target_pg", null ],
[ "/package/create/project/target/algorithm", "cpdsc_pg.html#element_target_algorithm", null ],
[ "/package/create/project/target/debugProbe", "cpdsc_pg.html#element_debugProbe", null ],
[ "/package/create/project/target/memory", "cpdsc_pg.html#element_target_memory", null ],
[ "/package/create/project/target/output", "cpdsc_pg.html#element_output", null ],
[ "/package/create/project/select", "cpdsc_pg.html#cpdsc_select_pg", null ],
[ "/package/create/project/select/component", "cpdsc_pg.html#element_project_component", null ],
[ "/package/create/project/select/component/file", "cpdsc_pg.html#element_component_file", null ],
[ "/package/create/project/files", "cpdsc_pg.html#cpdsc_files_pg", null ],
[ "/package/project/create/files/.../file", "cpdsc_pg.html#element_project_file", null ],
[ "/package/create/project/files/.../group", "cpdsc_pg.html#element_project_group", null ]
] ],
[ "System Description File (*.SDF) Format", "sdf_pg.html", [
[ "SDF top level structure", "sdf_pg.html#sdf_structure", null ],
[ "/system_description", "sdf_pg.html#sdf_element_system_description", null ],
[ "/system_description/debug_and_trace_config", "sdf_pg.html#sdf_element_debug_and_trace_config", null ],
[ "/system_description/debug_and_trace_config/debug", "sdf_pg.html#sdf_element_debug", null ],
[ "/system_description/.../config_item", "sdf_pg.html#sdf_element_config_item", null ],
[ "/system_description/debug_and_trace_config/trace", "sdf_pg.html#sdf_element_trace", null ],
[ "/system_description/debug_and_trace_config/trace/trace_capture", "sdf_pg.html#sdf_element_trace_capture", null ],
[ "/system_description/platform", "sdf_pg.html#sdf_element_platform", null ],
[ "/system_description/platform/scanchain", "sdf_pg.html#sdf_element_scanchain", null ],
[ "/system_description/platform/scanchain/dap", "sdf_pg.html#sdf_element_dap", null ],
[ "/system_description/platform/scanchain/device", "sdf_pg.html#sdf_element_device", null ],
[ "/system_description/platform/scanchain/../../config_items", "sdf_pg.html#sdf_element_config_items", null ],
[ "/system_description/platform/scanchain/../../device_info_items", "sdf_pg.html#sdf_element_device_info_items", null ],
[ "/system_description/platform/scanchain/../../device_info_items/device_info_item", "sdf_pg.html#sdf_element_device_info_item", null ],
[ "/system_description/platform/topology", "sdf_pg.html#sdf_element_topology", null ],
[ "/system_description/platform/topology/topology_link", "sdf_pg.html#sdf_element_topology_link", null ],
[ "/system_description/platform/clusters", "sdf_pg.html#sdf_element_clusters", null ],
[ "/system_description/platform/clusters/cluster", "sdf_pg.html#sdf_element_cluster", null ]
] ],
[ "CMSIS-Pack Index Files", "packIndexFile.html", [
[ "Package Index File (pidx)", "packIndexFile.html#pidxFile", null ],
[ "Vendor Index File (vidx)", "packIndexFile.html#vidxFile", null ],
[ "CMSIS-Pack Index Schema File", "packIndexFile.html#packIndexSchema", null ]
] ]
] ]
];
var NAVTREEINDEX =
[
"algorithmFunc.html"
];
var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';
var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';
var navTreeSubIndices = new Array();
function getData(varName)
{
var i = varName.lastIndexOf('/');
var n = i>=0 ? varName.substring(i+1) : varName;
return eval(n.replace(/\-/g,'_'));
}
function stripPath(uri)
{
return uri.substring(uri.lastIndexOf('/')+1);
}
function stripPath2(uri)
{
var i = uri.lastIndexOf('/');
var s = uri.substring(i+1);
var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
return m ? uri.substring(i-6) : s;
}
function localStorageSupported()
{
try {
return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
}
catch(e) {
return false;
}
}
function storeLink(link)
{
if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
window.localStorage.setItem('navpath',link);
}
}
function deleteLink()
{
if (localStorageSupported()) {
window.localStorage.setItem('navpath','');
}
}
function cachedLink()
{
if (localStorageSupported()) {
return window.localStorage.getItem('navpath');
} else {
return '';
}
}
function getScript(scriptName,func,show)
{
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.id = scriptName;
script.type = 'text/javascript';
script.onload = func;
script.src = scriptName+'.js';
if ($.browser.msie && $.browser.version<=8) {
// script.onload does not work with older versions of IE
script.onreadystatechange = function() {
if (script.readyState=='complete' || script.readyState=='loaded') {
func(); if (show) showRoot();
}
}
}
head.appendChild(script);
}
function createIndent(o,domNode,node,level)
{
var level=-1;
var n = node;
while (n.parentNode) { level++; n=n.parentNode; }
if (node.childrenData) {
var imgNode = document.createElement("img");
imgNode.style.paddingLeft=(16*level).toString()+'px';
imgNode.width = 16;
imgNode.height = 22;
imgNode.border = 0;
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function() {
if (node.expanded) {
$(node.getChildrenUL()).slideUp("fast");
node.plus_img.src = node.relpath+"ftv2pnode.png";
node.expanded = false;
} else {
expandNode(o, node, false, false);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
imgNode.src = node.relpath+"ftv2pnode.png";
} else {
var span = document.createElement("span");
span.style.display = 'inline-block';
span.style.width = 16*(level+1)+'px';
span.style.height = '22px';
span.innerHTML = '&#160;';
domNode.appendChild(span);
}
}
var animationInProgress = false;
function gotoAnchor(anchor,aname,updateLocation)
{
var pos, docContent = $('#doc-content');
if (anchor.parent().attr('class')=='memItemLeft' ||
anchor.parent().attr('class')=='fieldtype' ||
anchor.parent().is(':header'))
{
pos = anchor.parent().position().top;
} else if (anchor.position()) {
pos = anchor.position().top;
}
if (pos) {
var dist = Math.abs(Math.min(
pos-docContent.offset().top,
docContent[0].scrollHeight-
docContent.height()-docContent.scrollTop()));
animationInProgress=true;
docContent.animate({
scrollTop: pos + docContent.scrollTop() - docContent.offset().top
},Math.max(50,Math.min(500,dist)),function(){
if (updateLocation) window.location.href=aname;
animationInProgress=false;
});
}
}
function newNode(o, po, text, link, childrenData, lastNode)
{
var node = new Object();
node.children = Array();
node.childrenData = childrenData;
node.depth = po.depth + 1;
node.relpath = po.relpath;
node.isLast = lastNode;
node.li = document.createElement("li");
po.getChildrenUL().appendChild(node.li);
node.parentNode = po;
node.itemDiv = document.createElement("div");
node.itemDiv.className = "item";
node.labelSpan = document.createElement("span");
node.labelSpan.className = "label";
createIndent(o,node.itemDiv,node,0);
node.itemDiv.appendChild(node.labelSpan);
node.li.appendChild(node.itemDiv);
var a = document.createElement("a");
node.labelSpan.appendChild(a);
node.label = document.createTextNode(text);
node.expanded = false;
a.appendChild(node.label);
if (link) {
var url;
if (link.substring(0,1)=='^') {
url = link.substring(1);
link = url;
} else {
url = node.relpath+link;
}
a.className = stripPath(link.replace('#',':'));
if (link.indexOf('#')!=-1) {
var aname = '#'+link.split('#')[1];
var srcPage = stripPath($(location).attr('pathname'));
var targetPage = stripPath(link.split('#')[0]);
a.href = srcPage!=targetPage ? url : "javascript:void(0)";
a.onclick = function(){
storeLink(link);
if (!$(a).parent().parent().hasClass('selected'))
{
$('.item').removeClass('selected');
$('.item').removeAttr('id');
$(a).parent().parent().addClass('selected');
$(a).parent().parent().attr('id','selected');
}
var anchor = $(aname);
gotoAnchor(anchor,aname,true);
};
} else {
a.href = url;
a.onclick = function() { storeLink(link); }
}
} else {
if (childrenData != null)
{
a.className = "nolink";
a.href = "javascript:void(0)";
a.onclick = node.expandToggle.onclick;
}
}
node.childrenUL = null;
node.getChildrenUL = function() {
if (!node.childrenUL) {
node.childrenUL = document.createElement("ul");
node.childrenUL.className = "children_ul";
node.childrenUL.style.display = "none";
node.li.appendChild(node.childrenUL);
}
return node.childrenUL;
};
return node;
}
function showRoot()
{
var headerHeight = $("#top").height();
var footerHeight = $("#nav-path").height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
(function (){ // retry until we can scroll to the selected item
try {
var navtree=$('#nav-tree');
navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
} catch (err) {
setTimeout(arguments.callee, 0);
}
})();
}
function expandNode(o, node, imm, showRoot)
{
if (node.childrenData && !node.expanded) {
if (typeof(node.childrenData)==='string') {
var varName = node.childrenData;
getScript(node.relpath+varName,function(){
node.childrenData = getData(varName);
expandNode(o, node, imm, showRoot);
}, showRoot);
} else {
if (!node.childrenVisited) {
getNode(o, node);
} if (imm || ($.browser.msie && $.browser.version>8)) {
// somehow slideDown jumps to the start of tree for IE9 :-(
$(node.getChildrenUL()).show();
} else {
$(node.getChildrenUL()).slideDown("fast");
}
if (node.isLast) {
node.plus_img.src = node.relpath+"ftv2mlastnode.png";
} else {
node.plus_img.src = node.relpath+"ftv2mnode.png";
}
node.expanded = true;
}
}
}
function glowEffect(n,duration)
{
n.addClass('glow').delay(duration).queue(function(next){
$(this).removeClass('glow');next();
});
}
function highlightAnchor()
{
var aname = $(location).attr('hash');
var anchor = $(aname);
if (anchor.parent().attr('class')=='memItemLeft'){
var rows = $('.memberdecls tr[class$="'+
window.location.hash.substring(1)+'"]');
glowEffect(rows.children(),300); // member without details
} else if (anchor.parents().slice(2).prop('tagName')=='TR') {
glowEffect(anchor.parents('div.memitem'),1000); // enum value
} else if (anchor.parent().attr('class')=='fieldtype'){
glowEffect(anchor.parent().parent(),1000); // struct field
} else if (anchor.parent().is(":header")) {
glowEffect(anchor.parent(),1000); // section header
} else {
glowEffect(anchor.next(),1000); // normal member
}
gotoAnchor(anchor,aname,false);
}
function selectAndHighlight(hash,n)
{
var a;
if (hash) {
var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1);
a=$('.item a[class$="'+link+'"]');
}
if (a && a.length) {
a.parent().parent().addClass('selected');
a.parent().parent().attr('id','selected');
highlightAnchor();
} else if (n) {
$(n.itemDiv).addClass('selected');
$(n.itemDiv).attr('id','selected');
}
if ($('#nav-tree-contents .item:first').hasClass('selected')) {
$('#nav-sync').css('top','30px');
} else {
$('#nav-sync').css('top','5px');
}
showRoot();
}
function showNode(o, node, index, hash)
{
if (node && node.childrenData) {
if (typeof(node.childrenData)==='string') {
var varName = node.childrenData;
getScript(node.relpath+varName,function(){
node.childrenData = getData(varName);
showNode(o,node,index,hash);
},true);
} else {
if (!node.childrenVisited) {
getNode(o, node);
}
$(node.getChildrenUL()).css({'display':'block'});
if (node.isLast) {
node.plus_img.src = node.relpath+"ftv2mlastnode.png";
} else {
node.plus_img.src = node.relpath+"ftv2mnode.png";
}
node.expanded = true;
var n = node.children[o.breadcrumbs[index]];
if (index+1<o.breadcrumbs.length) {
showNode(o,n,index+1,hash);
} else {
if (typeof(n.childrenData)==='string') {
var varName = n.childrenData;
getScript(n.relpath+varName,function(){
n.childrenData = getData(varName);
node.expanded=false;
showNode(o,node,index,hash); // retry with child node expanded
},true);
} else {
var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
expandNode(o, n, true, true);
}
selectAndHighlight(hash,n);
}
}
}
} else {
selectAndHighlight(hash);
}
}
function removeToInsertLater(element) {
var parentNode = element.parentNode;
var nextSibling = element.nextSibling;
parentNode.removeChild(element);
return function() {
if (nextSibling) {
parentNode.insertBefore(element, nextSibling);
} else {
parentNode.appendChild(element);
}
};
}
function getNode(o, po)
{
var insertFunction = removeToInsertLater(po.li);
po.childrenVisited = true;
var l = po.childrenData.length-1;
for (var i in po.childrenData) {
var nodeData = po.childrenData[i];
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
i==l);
}
insertFunction();
}
function gotoNode(o,subIndex,root,hash,relpath)
{
var nti = navTreeSubIndices[subIndex][root+hash];
o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
navTo(o,NAVTREE[0][1],"",relpath);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
if (o.breadcrumbs) {
o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0, hash);
}
}
function navTo(o,root,hash,relpath)
{
var link = cachedLink();
if (link) {
var parts = link.split('#');
root = parts[0];
if (parts.length>1) hash = '#'+parts[1];
else hash='';
}
if (hash.match(/^#l\d+$/)) {
var anchor=$('a[name='+hash.substring(1)+']');
glowEffect(anchor.parent(),1000); // line number
hash=''; // strip line number anchors
//root=root.replace(/_source\./,'.'); // source link to doc link
}
var url=root+hash;
var i=-1;
while (NAVTREEINDEX[i+1]<=url) i++;
if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath)
} else {
getScript(relpath+'navtreeindex'+i,function(){
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash,relpath);
}
},true);
}
}
function showSyncOff(n,relpath)
{
n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
}
function showSyncOn(n,relpath)
{
n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
}
function toggleSyncButton(relpath)
{
var navSync = $('#nav-sync');
if (navSync.hasClass('sync')) {
navSync.removeClass('sync');
showSyncOff(navSync,relpath);
storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash'));
} else {
navSync.addClass('sync');
showSyncOn(navSync,relpath);
deleteLink();
}
}
function initNavTree(toroot,relpath)
{
var o = new Object();
o.toroot = toroot;
o.node = new Object();
o.node.li = document.getElementById("nav-tree-contents");
o.node.childrenData = NAVTREE;
o.node.children = new Array();
o.node.childrenUL = document.createElement("ul");
o.node.getChildrenUL = function() { return o.node.childrenUL; };
o.node.li.appendChild(o.node.childrenUL);
o.node.depth = 0;
o.node.relpath = relpath;
o.node.expanded = false;
o.node.isLast = true;
o.node.plus_img = document.createElement("img");
o.node.plus_img.src = relpath+"ftv2pnode.png";
o.node.plus_img.width = 16;
o.node.plus_img.height = 22;
if (localStorageSupported()) {
var navSync = $('#nav-sync');
if (cachedLink()) {
showSyncOff(navSync,relpath);
navSync.removeClass('sync');
} else {
showSyncOn(navSync,relpath);
}
navSync.click(function(){ toggleSyncButton(relpath); });
}
$(window).load(function(){
navTo(o,toroot,window.location.hash,relpath);
showRoot();
});
$(window).bind('hashchange', function(){
if (window.location.hash && window.location.hash.length>1){
var a;
if ($(location).attr('hash')){
var clslink=stripPath($(location).attr('pathname'))+':'+
$(location).attr('hash').substring(1);
a=$('.item a[class$="'+clslink+'"]');
}
if (a==null || !$(a).parent().parent().hasClass('selected')){
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
var link=stripPath2($(location).attr('pathname'));
navTo(o,link,$(location).attr('hash'),relpath);
} else if (!animationInProgress) {
$('#doc-content').scrollTop(0);
$('.item').removeClass('selected');
$('.item').removeAttr('id');
navTo(o,toroot,window.location.hash,relpath);
}
})
}
@@ -0,0 +1,242 @@
var NAVTREEINDEX0 =
{
"algorithmFunc.html":[11,2],
"algorithmFunc.html#BlankCheck":[11,2,0],
"algorithmFunc.html#EraseChip":[11,2,1],
"algorithmFunc.html#EraseSector":[11,2,2],
"algorithmFunc.html#Init":[11,2,3],
"algorithmFunc.html#ProgramPage":[11,2,4],
"algorithmFunc.html#UnInit":[11,2,5],
"algorithmFunc.html#Verify":[11,2,6],
"configWizard.html":[10],
"configWizard.html#configWizard_annotations":[10,0],
"configWizard.html#configWizard_codeExample":[10,1],
"configWizard.html#configWizard_display":[10,2],
"coresight_setup.html":[12],
"cp_Editors.html":[7,1],
"cp_Packs.html":[2],
"cp_Packs.html#PackFilenames":[2,8],
"cp_Packs.html#PackTutorials":[2,7],
"cp_Packs.html#cp_APIDef":[2,3],
"cp_Packs.html#cp_Combine":[2,5],
"cp_Packs.html#cp_Components":[2,0],
"cp_Packs.html#cp_Cond":[2,1],
"cp_Packs.html#cp_PackSteps":[2,6],
"cp_Packs.html#cp_RTECompH":[2,4],
"cp_Packs.html#cp_Requirements":[2,2],
"cp_Packs.html#pack_Cclass":[2,8,1],
"cp_Packs.html#pack_filename":[2,8,0],
"cp_SWComponents.html":[3],
"cp_SWComponents.html#cp_API":[3,8],
"cp_SWComponents.html#cp_Bundles":[3,6],
"cp_SWComponents.html#cp_CodeTemplates":[3,9],
"cp_SWComponents.html#cp_Components":[3,2],
"cp_SWComponents.html#cp_Conditions":[3,3],
"cp_SWComponents.html#cp_CreatePDSC":[3,0],
"cp_SWComponents.html#cp_Examples":[3,10],
"cp_SWComponents.html#cp_GeneratePack":[3,1],
"cp_SWComponents.html#cp_Instances":[3,7],
"cp_SWComponents.html#cp_RTEComponents_h":[3,5],
"cp_SWComponents.html#cp_Variants":[3,4],
"cp_ZIPTool.html":[7,2],
"cpdsc_pg.html":[13],
"cpdsc_pg.html#cpdsc_create_pg":[13,3],
"cpdsc_pg.html#cpdsc_definition":[13,0],
"cpdsc_pg.html#cpdsc_files_pg":[13,13],
"cpdsc_pg.html#cpdsc_select_pg":[13,10],
"cpdsc_pg.html#cpdsc_structure":[13,1],
"cpdsc_pg.html#cpdsc_target_pg":[13,5],
"cpdsc_pg.html#element_component_file":[13,12],
"cpdsc_pg.html#element_debugProbe":[13,7],
"cpdsc_pg.html#element_output":[13,9],
"cpdsc_pg.html#element_package_cpdsc":[13,2],
"cpdsc_pg.html#element_project":[13,4],
"cpdsc_pg.html#element_project_component":[13,11],
"cpdsc_pg.html#element_project_file":[13,14],
"cpdsc_pg.html#element_project_group":[13,15],
"cpdsc_pg.html#element_target_algorithm":[13,6],
"cpdsc_pg.html#element_target_memory":[13,8],
"createPackBoard.html":[5],
"createPackBoard.html#cp_BundleExample":[5,1],
"createPackBoard.html#cp_SpecDevBoard":[5,0],
"createPackPublish.html":[8],
"createPackPublish.html#cp_KeilComPack":[8,3],
"createPackPublish.html#cp_LocalInstallation":[8,1],
"createPackPublish.html#cp_PackRehosting":[8,4],
"createPackPublish.html#cp_WebDownload":[8,2],
"createPackPublish.html#cp_prerequisites":[8,0],
"createPackUtil.html":[7],
"createPack_DFP.html":[4],
"createPack_DFP.html#cp_BasicDFP":[4,0],
"createPack_DFP.html#cp_DeviceProperties":[4,5],
"createPack_DFP.html#cp_DeviceSWComp":[4,5,0],
"createPack_DFP.html#cp_FlashProgrammingAlgorithm":[4,3],
"createPack_DFP.html#cp_SVD":[4,2],
"createPack_DFP.html#cp_System_Startp":[4,1],
"createPack_DFP.html#cp_debugdescription":[4,4],
"debug_description.html":[12,0],
"debug_description.html#DebugFunctions":[12,0,6,2],
"debug_description.html#DebugSyntaxRules":[12,0,6,0],
"debug_description.html#DebugVars":[12,0,6,3],
"debug_description.html#ExpressionType":[12,0,6,1],
"debug_description.html#das_concept":[12,0,0],
"debug_description.html#das_elements":[12,0,1],
"debug_description.html#debugCoreStart":[12,0,4,3],
"debug_description.html#debugCoreStop":[12,0,4,4],
"debug_description.html#debugDeviceUnlock":[12,0,5,1],
"debug_description.html#debugPortSetup":[12,0,4,0],
"debug_description.html#debugPortStart":[12,0,4,1],
"debug_description.html#debugPortStop":[12,0,4,2],
"debug_description.html#default_sequences":[12,0,4],
"debug_description.html#externalTools":[12,0,6,4],
"debug_description.html#hwReset":[12,0,5,2],
"debug_description.html#nonstdExamples":[12,0,5],
"debug_description.html#pdsc_SequenceNameEnum_pg":[12,0,2],
"debug_description.html#resetCatchClear":[12,0,4,11],
"debug_description.html#resetCatchSet":[12,0,4,10],
"debug_description.html#resetHardware":[12,0,4,7],
"debug_description.html#resetHardwareAssert":[12,0,4,8],
"debug_description.html#resetHardwareDeassert":[12,0,4,9],
"debug_description.html#resetProcessor":[12,0,4,6],
"debug_description.html#resetSystem":[12,0,4,5],
"debug_description.html#sequenceExample":[12,0,5,3],
"debug_description.html#traceStart":[12,0,5,0],
"debug_description.html#usage_of_sequences":[12,0,3],
"debug_description.html#writing_sequences":[12,0,6],
"element_dominate.html":[9,6],
"element_keywords.html":[9,4],
"element_releases.html":[9,7],
"element_releases.html#element_release":[9,7,0],
"element_repository.html":[9,5],
"element_requirements_pg.html":[9,8],
"element_requirements_pg.html#element_compilers":[9,8,1],
"element_requirements_pg.html#element_languages":[9,8,2],
"element_requirements_pg.html#element_packages":[9,8,0],
"element_taxonomy.html":[9,9],
"element_taxonomy.html#element_taxonomyDescription":[9,9,0],
"flashAlgorithm.html":[11],
"flashAlgorithm.html#AddFPA":[11,1],
"flashAlgorithm.html#CreateFPA":[11,0],
"index.html":[],
"index.html#SWPackVariants":[0],
"packChk.html":[7,0],
"packChk.html#packChkMessages":[7,0,0],
"packFormat.html":[9],
"packFormat.html#Filenames":[9,0],
"packFormat.html#PDSC_Example":[9,2],
"packFormat.html#PackSchema":[9,1],
"packIndexFile.html":[15],
"packIndexFile.html#packIndexSchema":[15,2],
"packIndexFile.html#pidxFile":[15,0],
"packIndexFile.html#vidxFile":[15,1],
"pack_Example.html":[6],
"pack_revisionHistory.html":[1],
"pages.html":[],
"pdsc_apis_pg.html":[9,10],
"pdsc_apis_pg.html#element_api":[9,10,1],
"pdsc_apis_pg.html#element_apis":[9,10,0],
"pdsc_boards_pg.html":[9,13],
"pdsc_boards_pg.html#element_board":[9,13,1],
"pdsc_boards_pg.html#element_board_book":[9,13,7],
"pdsc_boards_pg.html#element_board_compatibleDevice":[9,13,4],
"pdsc_boards_pg.html#element_board_debugInterface":[9,13,6],
"pdsc_boards_pg.html#element_board_feature":[9,13,2],
"pdsc_boards_pg.html#element_board_image":[9,13,5],
"pdsc_boards_pg.html#element_board_mountedDevice":[9,13,3],
"pdsc_boards_pg.html#element_boards":[9,13,0],
"pdsc_components_pg.html":[9,15],
"pdsc_components_pg.html#Component_Bundle":[9,15,0],
"pdsc_components_pg.html#Component_Files":[9,15,1],
"pdsc_components_pg.html#Component_Instances":[9,15,2],
"pdsc_components_pg.html#Pre_Include_Global_h":[9,15,4],
"pdsc_components_pg.html#Pre_Include_Local_h":[9,15,5],
"pdsc_components_pg.html#RTE_Components_h":[9,15,3],
"pdsc_components_pg.html#element_bundle":[9,15,7],
"pdsc_components_pg.html#element_component":[9,15,8],
"pdsc_components_pg.html#element_components":[9,15,6],
"pdsc_components_pg.html#element_file":[9,15,10],
"pdsc_components_pg.html#element_files":[9,15,9],
"pdsc_conditions_pg.html":[9,14],
"pdsc_conditions_pg.html#element_accept":[9,14,2],
"pdsc_conditions_pg.html#element_condition":[9,14,1],
"pdsc_conditions_pg.html#element_conditions":[9,14,0],
"pdsc_conditions_pg.html#element_deny":[9,14,4],
"pdsc_conditions_pg.html#element_require":[9,14,3],
"pdsc_devices_pg.html":[9,12],
"pdsc_devices_pg.html#element_devices":[9,12,0],
"pdsc_examples_pg.html":[9,16],
"pdsc_examples_pg.html#element_example":[9,16,1],
"pdsc_examples_pg.html#element_example_attribute_component":[9,16,6],
"pdsc_examples_pg.html#element_example_attributes":[9,16,5],
"pdsc_examples_pg.html#element_example_board":[9,16,2],
"pdsc_examples_pg.html#element_example_project":[9,16,3],
"pdsc_examples_pg.html#element_example_project_env":[9,16,4],
"pdsc_examples_pg.html#element_examples":[9,16,0],
"pdsc_family_pg.html":[9,12,1],
"pdsc_family_pg.html#DebugSyntaxRules":[9,12,1,23,0],
"pdsc_family_pg.html#ExpressionType":[9,12,1,23,1],
"pdsc_family_pg.html#element_algorithm":[9,12,1,3],
"pdsc_family_pg.html#element_book":[9,12,1,7],
"pdsc_family_pg.html#element_compile":[9,12,1,8],
"pdsc_family_pg.html#element_dbg_datapatch":[9,12,1,25],
"pdsc_family_pg.html#element_debug":[9,12,1,24],
"pdsc_family_pg.html#element_debugconfig":[9,12,1,14],
"pdsc_family_pg.html#element_debugport":[9,12,1,16],
"pdsc_family_pg.html#element_debugvars":[9,12,1,15],
"pdsc_family_pg.html#element_description":[9,12,1,9],
"pdsc_family_pg.html#element_device":[9,12,1,2],
"pdsc_family_pg.html#element_dp_cjtag":[9,12,1,19],
"pdsc_family_pg.html#element_dp_jtag":[9,12,1,17],
"pdsc_family_pg.html#element_dp_swd":[9,12,1,18],
"pdsc_family_pg.html#element_environment":[9,12,1,10],
"pdsc_family_pg.html#element_family":[9,12,1,0],
"pdsc_family_pg.html#element_feature":[9,12,1,11],
"pdsc_family_pg.html#element_flashblock":[9,12,1,5],
"pdsc_family_pg.html#element_flashgap":[9,12,1,6],
"pdsc_family_pg.html#element_flashinfo":[9,12,1,4],
"pdsc_family_pg.html#element_memory":[9,12,1,12],
"pdsc_family_pg.html#element_processor":[9,12,1,13],
"pdsc_family_pg.html#element_seq_block":[9,12,1,23],
"pdsc_family_pg.html#element_seq_control":[9,12,1,22],
"pdsc_family_pg.html#element_sequence":[9,12,1,21],
"pdsc_family_pg.html#element_sequences":[9,12,1,20],
"pdsc_family_pg.html#element_subFamily":[9,12,1,1],
"pdsc_family_pg.html#element_trace":[9,12,1,26],
"pdsc_family_pg.html#element_trace_serialwire":[9,12,1,27],
"pdsc_family_pg.html#element_trace_tracebuffer":[9,12,1,29],
"pdsc_family_pg.html#element_trace_traceport":[9,12,1,28],
"pdsc_family_pg.html#element_variant":[9,12,1,30],
"pdsc_generators_pg.html":[9,11],
"pdsc_generators_pg.html#element_gen_argument":[9,11,7],
"pdsc_generators_pg.html#element_gen_command":[9,11,6],
"pdsc_generators_pg.html#element_gen_eclipse":[9,11,4],
"pdsc_generators_pg.html#element_gen_exe":[9,11,3],
"pdsc_generators_pg.html#element_gen_file":[9,11,10],
"pdsc_generators_pg.html#element_gen_files":[9,11,9],
"pdsc_generators_pg.html#element_gen_project_files":[9,11,8],
"pdsc_generators_pg.html#element_gen_select":[9,11,2],
"pdsc_generators_pg.html#element_gen_web":[9,11,5],
"pdsc_generators_pg.html#element_generator":[9,11,1],
"pdsc_generators_pg.html#element_generators":[9,11,0],
"pdsc_package_pg.html":[9,3],
"pdsc_package_pg.html#element_package":[9,3,0],
"sdf_pg.html":[14],
"sdf_pg.html#sdf_element_cluster":[14,17],
"sdf_pg.html#sdf_element_clusters":[14,16],
"sdf_pg.html#sdf_element_config_item":[14,4],
"sdf_pg.html#sdf_element_config_items":[14,11],
"sdf_pg.html#sdf_element_dap":[14,9],
"sdf_pg.html#sdf_element_debug":[14,3],
"sdf_pg.html#sdf_element_debug_and_trace_config":[14,2],
"sdf_pg.html#sdf_element_device":[14,10],
"sdf_pg.html#sdf_element_device_info_item":[14,13],
"sdf_pg.html#sdf_element_device_info_items":[14,12],
"sdf_pg.html#sdf_element_platform":[14,7],
"sdf_pg.html#sdf_element_scanchain":[14,8],
"sdf_pg.html#sdf_element_system_description":[14,1],
"sdf_pg.html#sdf_element_topology":[14,14],
"sdf_pg.html#sdf_element_topology_link":[14,15],
"sdf_pg.html#sdf_element_trace":[14,5],
"sdf_pg.html#sdf_element_trace_capture":[14,6],
"sdf_pg.html#sdf_structure":[14,0]
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

@@ -0,0 +1,416 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>packChk.exe</title>
<title>CMSIS-Pack: packChk.exe</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('packChk.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">packChk.exe </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p><b>packChk.exe</b> is a utility for validation of a Software Pack. It operates on the unzipped content of the Software Pack and is located in the directory <b>.\CMSIS\Utilities</b> of the <b>ARM::CMSIS</b> Pack.</p>
<p><b>packChk.exe</b> performs the following operations:</p>
<ul>
<li>Reads the content of the specified *.pdsc file. The path to this *.pdsc file is considered as root directory of the Software Pack.</li>
<li>Verifies the existence of all files in the Software Pack that are referenced in the *.pdsc file.</li>
<li>Checks for presence and correctness of mandatory elements such as &lt;vendor&gt;, &lt;version&gt;, etc.</li>
<li>Optionally, reads other PDSC files to resolve dependencies on &lt;apis&gt;, &lt;boards&gt;, and &lt;conditions&gt;.</li>
<li>Optionally, checks all System View Description files (*.SVD) referenced in the *.pdsc file using SVDConv.exe. Refer to <a href="../../SVD/html/svd_validate_file_pg.html">SVD File Validation</a> for details.</li>
<li>Optionally, verifies the element &lt;url&gt;.</li>
<li>Optionally, creates the standardized name of the Software Pack file for further processing in scripts.</li>
<li>Sets the exit status reflecting the validation result to: <br/>
0 : no errors detected <br/>
1 : errors during validation detected</li>
</ul>
<h2>Operation </h2>
<p><b>packChk.exe</b> is invoked from the command line:<br/>
</p>
<div class="fragment"><div class="line">packChk.exe &lt;pdsc_file&gt; &lt;options&gt;</div>
</div><!-- fragment --><p><br/>
</p>
<table class="cmtable" summary="packChk Args">
<tr>
<th>&lt;options&gt; </th><th>Short Name </th><th>Description </th></tr>
<tr>
<td>-i &lt;file&gt; </td><td>Check component dependencies </td><td>Reference PDSC file(s) used to resolve component dependencies in conditions. </td></tr>
<tr>
<td>-n &lt;file&gt; </td><td>Write Pack file name </td><td>Write a standardized name for the Software Pack to the specified ASCII file. </td></tr>
<tr>
<td>-s </td><td>Verify SVD files </td><td>Each SVD file referenced in the *.pdsc file is <a href="../../SVD/html/svd_validate_file_pg.html"><b>validated</b></a> with <b>SVDConv.exe</b>. With this option set, <b>SVDConv.exe</b> is invoked from the same directory as <b>packChk.exe</b>. </td></tr>
<tr>
<td>-u &lt;url&gt; </td><td>Pack Server URL </td><td>Verifies that the specified URL matches the &lt;url&gt; element in the *.pdsc file. </td></tr>
<tr>
<td>-v </td><td>Verbose </td><td>Prints extra process information. </td></tr>
<tr>
<td>-x&#160;&lt;msg-list&gt; </td><td>Suppress </td><td>Suppress all listed validation messages. You can separate the values with blanks to create a list or repeat the option. Ranges are not allowed. Suppressing validation messages does not affect error and warning counters. For a list of messages refer to <a href="#packchk_valid_msgs"><b>Validation Messages</b></a>. </td></tr>
<tr>
<td>-h/-? </td><td>Help </td><td>Show help. </td></tr>
</table>
<p><b>Examples</b></p>
<p>Run <b>packChk.exe</b> on the package description file called <b>MyVendor.MyPack.pdsc</b>. <b>packChk.exe</b> verifies the file against the Software Pack that is located in the same directory. </p>
<pre class="fragment">packChk.exe MyVendor.MyPack.pdsc
</pre><p>Run <b>packChk.exe</b> on the package description file called <b>MyVendor.MyPack.pdsc</b> in the current directory and try to resolve conditions using the ARM.CMSIS.pdsc file based in another directory. </p>
<pre class="fragment">packChk.exe MyVendor.MyPack.pdsc -i ..\..\PACK\ARM\CMSIS\ARM.CMSIS.pdsc
</pre><p>Run <b>packChk.exe</b> on the package description file called <b>MyVendor.MVCM3.pdsc</b>, verify SVD files, verify the URL to the Pack Server, and generate a ASCII text file with the standardized name of the Software Pack. </p>
<pre class="fragment">packChk.exe "MyVendor.MVCM3.pdsc" -s -u "http://www.myvendor.com/pack" -n packname.txt
</pre><p>Run <b>packChk.exe</b> on the package description file called <b>MyVendor.MVCM3.pdsc</b>. Suppress validation messages M304 and M331. </p>
<pre class="fragment">packChk.exe MyVendor.MVCM3.pdsc -x M304 M331 // messages as a list
packChk.exe MyVendor.MVCM3.pdsc -x M304 -x M331 // option repeated
</pre><h1><a class="anchor" id="packChkMessages"></a>
Error and Warning Messages</h1>
<p>The following table shows the errors and warnings issued by packChk.</p>
<h2>Internal Errors </h2>
<p>If you encounter one of the following errors, please send a problem report via email to <a href="#" onclick="location.href='mai'+'lto:'+'cms'+'is'+'@ar'+'m.'+'com'; return false;">cmsis<span style="display: none;">.nosp@m.</span>@arm<span style="display: none;">.nosp@m.</span>.com</a>.</p>
<table class="cmtable" summary="packChk Internal Msgs">
<tr>
<th>Message Number </th><th>Type </th><th>Description </th><th>Action </th></tr>
<tr>
<td>M100 </td><td>ERROR </td><td>GetModuleHandle failed </td><td>Call support. </td></tr>
<tr>
<td>M101 </td><td>ERROR </td><td>Unknown error! </td><td>Call support. </td></tr>
<tr>
<td>M102 </td><td>ERROR </td><td>MFC initialization failed </td><td>Call support. </td></tr>
<tr>
<td>M103 </td><td>ERROR </td><td>Internal Error: <em>'REF'</em> </td><td>Call support and submit the error message. </td></tr>
<tr>
<td>M104 - M107 </td><td>N.A. </td><td><em>not in use</em> </td><td>&mdash; </td></tr>
<tr>
<td>M108 </td><td>ERROR </td><td>Reading PDSC File failed! </td><td>Verify file and folder permissions. Verify whether the file is corrupt or in another folder. Repeat the process. If this error persists, call support. </td></tr>
<tr>
<td>M109 </td><td>ERROR </td><td>Constructing Model failed! </td><td>Building Model based on the PDSC information failed. Repeat the process. If this error persists, call support. </td></tr>
<tr>
<td>M110 </td><td>ERROR </td><td>Verifying Model failed </td><td>Model based verification of the PDCS information failed. Repeat the process. If this error persists, call support. </td></tr>
</table>
<h2>Invocation Errors </h2>
<table class="cmtable" summary="packChk Invocation Msgs">
<tr>
<th>Message Number </th><th>Type </th><th>Description </th><th>Action </th></tr>
<tr>
<td>M200 </td><td>ERROR </td><td>Invalid arguments! </td><td>At least one argument is wrong. Correct the argument. </td></tr>
<tr>
<td>M201 </td><td>ERROR </td><td>Too many arguments! </td><td>The list of arguments is too long. Verify if you have used one argument twice. </td></tr>
<tr>
<td>M202 </td><td>ERROR </td><td>No PDSC input file specified </td><td>Correct the command line. <b>packChk.exe</b> expects a *.pdsc file name as input. </td></tr>
<tr>
<td>M203 </td><td>ERROR </td><td>Error reading PDSC file <em>'PATH/FILENAME'!</em> </td><td>Verify the PDSC file for consistency. </td></tr>
<tr>
<td>M204 </td><td>ERROR </td><td>File not found: <em>'PATH'</em> </td><td>The specified PDSC file could not be found in the <em>PATH</em> displayed in the message. Correct the path or the filename. </td></tr>
<tr>
<td>M205 </td><td>ERROR </td><td>Cannot create Pack Name file <em>'PATH'</em> </td><td>Check the disk space or your permissions. Correct the path name. </td></tr>
<tr>
<td>M206 </td><td>ERROR </td><td>Multiple PDSC files found in package: <em>'FILES'</em> </td><td>Only one PDSC file is allowed in a package. Remove unnecessary PDSC files. The message lists all *.pdsc files found. </td></tr>
<tr>
<td>M207 </td><td>ERROR </td><td>PDSC file name mismatch! <br/>
Expected: <em>'PDSC1.pdsc'</em> <br/>
Actual : <em>'PDSC2.pdsc'</em> </td><td>The PDSC file expected has not been found. Rename or exchange the PDSC file. </td></tr>
<tr>
<td>M208 </td><td>ERROR </td><td>Error calling SVDConv.exe: <em>'PATH'</em> </td><td>SVDConv.exe was not found. Copy the executable into the directory of packChk.exe or enter the path where SVDConv.exe is located. Default is <span class="XML-Token">CMSIS\Utilities</span>. </td></tr>
<tr>
<td>M209 </td><td>ERROR </td><td>Unknown Option: <em>'OPT'</em> </td><td>The command line option entered is not known or invalid. </td></tr>
<tr>
<td>M210 </td><td>ERROR </td><td>Only one input file to be checked is allowed. </td><td>You can only check one PDSC file at a time. </td></tr>
</table>
<p><a class="anchor" id="packchk_valid_msgs"></a></p>
<h2>Validation Messages </h2>
<table class="cmtable" summary="packChk Validation Msgs">
<tr>
<th>Message Number </th><th>Type </th><th>Description </th><th>Action </th></tr>
<tr>
<td>M300 </td><td>ERROR </td><td>The following files are listed in PDSC but not part of the package: <br/>
<em>'PATH'</em>: <br/>
<em>'FILES'</em> </td><td>The files listed should be part of the package. However, these files could not be added to the package. Verify whether the files exist. Verify the file permissions. </td></tr>
<tr>
<td>M301 </td><td>ERROR </td><td>Checking Pack URL of PDSC file failed: <br/>
Expected URL : <em>'URL1'</em> <br/>
Package URL : <em>'URL2'</em> </td><td>The URL entered in the package does not match the value entered for comparison. Change the URL in the package. Check for possible misspellings of <em>URL1</em>. </td></tr>
<tr>
<td>M302 </td><td>ERROR</td><td>No vendor tag found in the PDSC file! Add the &lt;vendor&gt; tag and provide the vendor name. For example: <code>&lt;vendor&gt;Keil&lt;/vendor&gt;</code>. </td><td>No vendor entered in the PDSC file. Enter the tag <span class="XML-Token">&lt;vendor&gt;</span> and add the vendor name. Refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M303 </td><td>ERROR</td><td>No package name found in the PDSC file! Add the &lt;name&gt; tag and provide the package name. For example: <code>&lt;name&gt;MCU-Name_DFP&lt;/name&gt;</code>. </td><td>No package name found in the PDSC file. Enter the tag <span class="XML-Token">&lt;name&gt;</span> and add the package name. For example <span class="XML-Token">&lt;name&gt;MCU-Name_DFP&lt;/name&gt;</span>. The package name is mandatory to create the package. Refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M304 </td><td>ERROR </td><td>No package URL (&lt;url&gt;-tag and/or value) found in PDSC file! </td><td>Add the tag <span class="XML-Token">&lt;url&gt;</span> and enter a URL in the PDSC file. The URL points to the web page from which users can download the package. Refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M305 </td><td>ERROR</td><td>No package version ("version"-attribute in a &lt;release&gt;-tag) found in PDSC file! </td><td>No version or release information found in the PDSC file. Add the attribute <span class="XML-Token">version</span> to the tag <span class="XML-Token">&lt;release&gt;</span> and enter the version number. Refer to <a class="el" href="element_releases.html#element_release">/package/releases/release</a>. </td></tr>
<tr>
<td>M306 </td><td>ERROR</td><td>No package description found in the PDSC file. Add the &lt;description&gt;-tag and provide a descriptive text. </td><td>No package description was found in the PDSC file. Enter the tag <span class="XML-Token">&lt;description&gt;</span> and briefly describe the package content. Refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M307 </td><td>ERROR </td><td>Checking SVD file <em>'PATH'</em> failed! </td><td>Verify the consistency of the *.SVD file. Refer to <a href="../../SVD/html/svd_validate_file_pg.html">SVD File Validation</a>. </td></tr>
<tr>
<td>M308 </td><td>ERROR </td><td>SVD file <em>'PATH'</em> not found. Add the SVD file or correct the PDSC entry. </td><td>The *.SVD file was not found in the path specified in the message. Add the SVD file or correct the entry in the *.pdsc file. </td></tr>
<tr>
<td>M309 </td><td>ERROR </td><td>Cannot read file information: <em>'PATH'</em>. </td><td>Access to the file specified failed. Verify permissions and spelling. </td></tr>
<tr>
<td>M310 </td><td>ERROR </td><td>Filename mismatch (case sensitive):<br/>
PDSC name : <em>'PDSC_FILENAME'</em> <br/>
Filename : <em>'SYSTEM'</em> </td><td>Filenames are case sensitive. Correct spelling. </td></tr>
<tr>
<td>M323 </td><td>ERROR </td><td>File/Path not found: <em>'PATH'</em> </td><td>The file or path entered in the PDSC file could not be found. Verify the path information. </td></tr>
<tr>
<td>M324 </td><td>ERROR </td><td>Board referenced in Example <em>'EXAMPLE'</em> is undefined: <em>'VENDOR'</em> : <em>'BOARD'</em> </td><td>The board referenced in the example application could not be found. Define the board (<a class="el" href="pdsc_boards_pg.html#element_board">/package/boards/board</a>) or correct the reference information (<a class="el" href="pdsc_examples_pg.html#element_example_board">/package/examples/example/board</a>). </td></tr>
<tr>
<td>M325 </td><td>ERROR </td><td>Board <em>'NAME'</em> redefined, already defined in Line <em>'LINE'</em>: <em>'PATH'</em> </td><td>This board has been defined already in the line <em>'LINE'</em> of the file <em>'PATH'</em>. Verify and remove one of the board definitions. </td></tr>
<tr>
<td>M326 </td><td>ERROR </td><td>Path is not conformant: <em>'PATH'</em>: Absolute Paths or Drive references are not allowed, use Paths relative to PDSC file. </td><td>The path needs to be relative to the PDSC file so that a dependency of a certain file system does not occur. </td></tr>
<tr>
<td>M327 </td><td>ERROR </td><td>Path is not conformant: <em>'PATH'</em>: Backslashes are not recommended, use forward slashes. </td><td>Paths to files should adhere to the POSIX standard using forward slashes (/). </td></tr>
<tr>
<td>M328 </td><td>ERROR </td><td>Version not set for Release Information <em>'DESCR'</em> </td><td>The release defined through the description <em>'DESCR'</em> requires the attribute <span class="XML-Token">&lt;version&gt;</span>. Refer to <a class="el" href="element_releases.html#element_release">/package/releases/release</a>. </td></tr>
<tr>
<td>M329 </td><td>ERROR </td><td>Description not set for Release Information <em>'VER'</em> </td><td>The release defined through the version <em>'VER'</em> needs a description. Refer to <a class="el" href="element_releases.html#element_release">/package/releases/release</a>. </td></tr>
<tr>
<td>M330 </td><td>ERROR </td><td>Condition redefined: <em>'COND'</em>, already defined in Line <em>'LINE'</em> </td><td>The condition has been defined already in a previous line. Correct the condition name, or remove the duplicate. </td></tr>
<tr>
<td>M331 </td><td>WARNING </td><td>Condition unused: <em>'COND'</em> </td><td>The condition has been defined but not used further. Remove the condition or add condition rules. Refer to <a class="el" href="pdsc_conditions_pg.html#element_condition">/package/conditions/condition</a>. </td></tr>
<tr>
<td>M332 </td><td>ERROR </td><td>Condition undefined: <em>'COND'</em> </td><td>A condition has been used but not defined. Correct the name of the condition or define the missing condition. Refer to <a class="el" href="pdsc_conditions_pg.html#element_condition">/package/conditions/condition</a>. </td></tr>
<tr>
<td>M333 </td><td>WARNING </td><td>Component has no condition: Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, <em>Csub='CSUB'</em>, <em>Cversion=</em> 'CVER' </td><td>The component defined has no condition. If the component has restrictions, then add a condition to the component definition. Refer to <a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a>. </td></tr>
<tr>
<td>M334 </td><td>WARNING </td><td>Config File has no version: <em>'PATH'</em> </td><td>Add version information to the configuration file. </td></tr>
<tr>
<td>M335 </td><td>WARNING </td><td>Component declared as 'Board Support' has no ref to a device: Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, Cversion= <em>'CVER'</em> </td><td>A component defined as 'board support' needs a reference to a device. Add a device or correct the component definition. Refer to attribute <em>Cclass</em> of <a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a> and <a class="el" href="pdsc_boards_pg.html#element_board_mountedDevice">/package/boards/board/mountedDevice</a>. </td></tr>
<tr>
<td>M336 </td><td>WARNING </td><td>No reference to a device or device not found: Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, Cversion= <em>'CVER'</em> </td><td>Define the device <a class="el" href="pdsc_family_pg.html#element_device">/package/devices/family/../device</a> or correct the information about the device in the reference. </td></tr>
<tr>
<td>M337 </td><td>WARNING </td><td>File with category <em>'CAT'</em> has wrong extension <em>'EXT'</em>: <em>'PATH'</em> </td><td>The extension of the file does not match the file category. Verify the extension to match the category. Refer to <a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>. </td></tr>
<tr>
<td>M338 </td><td>WARNING </td><td>No releases found. </td><td>The PDSC file is missing release information. Add <span class="XML-Token">&lt;release&gt;</span> information to the file. Refer to <a class="el" href="element_releases.html">/package/releases element</a>. </td></tr>
<tr>
<td>M339 </td><td>WARNING </td><td>Include Path <em>'PATH'</em> must not be a file! </td><td>The path specified contains a filename. Correct the path infomation and remove the filename. </td></tr>
<tr>
<td>M340 </td><td>WARNING </td><td>Include Path <em>'PATH'</em> must end with '/' or '\' </td><td>Include paths must end with a slash or backslash. Verify and correct the path name. </td></tr>
<tr>
<td>M341 </td><td>WARNING </td><td>File with <em>'COMP'</em> dependency must have extension <em>'EXT'</em> : <em>'PATH'</em> </td><td>A file defining component dependencies must have the extension mentioned in the message. Verify the settings and correct the file extension. </td></tr>
<tr>
<td>M342 </td><td>WARNING </td><td>File with attribute <em>'ATTR'</em> must not have category <em>'CAT'</em>: <em>'PATH'</em> </td><td>A file with the attribute mentioned in the message must not have the category specified. Correct the attribute or the category.Refer to <a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>. </td></tr>
<tr>
<td>M343 </td><td>WARNING </td><td>File with attribute <em>'ATTR'</em> requires <em>'ATTR2'</em> attribute: <em>'PATH'</em> </td><td>A file with the attribute <em>'ATTR'</em> requires another attribute <em>'ATTR2'</em>. Add the required attribute or correct attribute <em>'ATTR'</em>. Refer to <a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>. </td></tr>
<tr>
<td>M344 </td><td>WARNING </td><td>File shall have condition containing <em>'COND'</em>: <em>'PATH'</em> </td><td>The file should have a condition. Define a condition in the file specified in the message. </td></tr>
<tr>
<td>M345 </td><td>WARNING </td><td>URL not found : <em>'URL'</em> </td><td>The specified URL could not be found. Correct the URL. Refer to <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M346 </td><td>WARNING </td><td>Referenced device(s) in <em>'BOARD'</em> not found: <em>'DEVICE'</em> </td><td>The device or devices specified for the board could not be found. Verify and correct the device name or the board name. Refer to <a class="el" href="pdsc_boards_pg.html#element_board_mountedDevice">/package/boards/board/mountedDevice</a> and <a class="el" href="pdsc_boards_pg.html#element_board_compatibleDevice">/package/boards/board/compatibleDevice</a>. </td></tr>
<tr>
<td>M347 </td><td>WARNING </td><td>Generator ID in Component Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, Cversion= <em>'CVER'</em> is undefined: <em>'GENID'</em> </td><td>The generator ID used in the component could not be found. Verify and correct the generator ID (<a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a>), or define the generator ID (ref <a class="el" href="pdsc_generators_pg.html#element_generator">/package/generators/generator</a>). </td></tr>
<tr>
<td>M348 </td><td>WARNING </td><td>Feature redefined for <em>'MCU'</em>, see Line <em>'REF_LINE'</em>: <em>'FEATURE'</em> </td><td>This feature <em>'FEATURE'</em> has been defined already on the same level in line <em>'REF_LINE'</em>. The feature characteristics defined on line <em>'LINE'</em> overwrite those from <em>'REF_LINE'</em>. Correct the feature (<a class="el" href="pdsc_family_pg.html#element_feature">/package/devices/family/.../feature</a>). </td></tr>
<tr>
<td>M349 </td><td>WARNING </td><td>Examples found, but no board description(s) found </td><td>Example projects have been found for a board that was not defined. Correct the entry for the examples (<a class="el" href="pdsc_examples_pg.html#element_example_board">/package/examples/example/board</a>) or define the board (<a class="el" href="pdsc_boards_pg.html#element_board">/package/boards/board</a>). </td></tr>
<tr>
<td>M350 </td><td>WARNING </td><td>No <em>'COMP'</em> found for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>The package (<a class="el" href="pdsc_package_pg.html#element_package">/package</a>) defines a Vendor-MCU combination for which no component was defined. Define a component (<a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a>) or verify the <em>'VENDOR'</em> - <em>'MCU'</em> settings. </td></tr>
<tr>
<td>M351 </td><td>WARNING </td><td>Component <em>'COMP'</em> (<em>'COMPID'</em>) error for <em>'VENDOR'</em>: <em>'MCU'</em> ( <em>'COMPILER'</em>): <em>'MSG'</em> </td><td>An unspecified error was found for the component. The message might give detailed information about the error. </td></tr>
<tr>
<td>M352 </td><td>WARNING </td><td>No Directories/Files found for <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em>: <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>No files or directories could be found for the defined component. Add the missing information. Refer to <a class="el" href="pdsc_components_pg.html#element_files">/package/.../files</a>. </td></tr>
<tr>
<td>M353 </td><td>WARNING </td><td>No <em>'FILECAT'</em> File found for Component <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>No file with the mentioned file category was found for the component. Verify whether the file exists or correct the information. Refer to attribute <em>category</em> in <a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>. </td></tr>
<tr>
<td>M354 </td><td>WARNING </td><td>Multiple <em>'FILECAT'</em> Files found for Component <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>Multiple files with the mentioned file category were found for the specified component. Verify and rename the files, or correct the component settings (<a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>). </td></tr>
<tr>
<td>M355 </td><td>WARNING </td><td>No <em>'FILECAT'</em> Directory found for Component <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>The directory specified for the file category was not found. Correct the information in the component settings (<a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a>). </td></tr>
<tr>
<td>M356 </td><td>WARNING </td><td>Multiple <em>'FILECAT'</em> Directories found for Component <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>Multiple directories were found for the same file category in the specified component. Remove obsolete information or correct the component settings. </td></tr>
<tr>
<td>M358 </td><td>WARNING </td><td>Header File <em>'HFILE'</em> for <em>'CFILE'</em> missing for Component <em>'COMP'</em> (<em>'COMPID'</em>) for <em>'VENDOR'</em> : <em>'MCU'</em> (<em>'COMPILER'</em>) </td><td>The header file defined for the component could not be found. Verify the header file settings (<a class="el" href="pdsc_components_pg.html#element_file">/package/.../files/file</a>) or whether the file exists. </td></tr>
<tr>
<td>M359 </td><td>WARNING </td><td>Family has no Device(s) or Subfamilies: <em>'FAMILY'</em> </td><td>The device family has no devices or subfamilies. Add the missing information (<a class="el" href="pdsc_family_pg.html#element_family">/package/devices/family</a>). </td></tr>
<tr>
<td>M360 </td><td>WARNING </td><td>Subfamily has no Device(s): <em>'SUBFAMILY'</em> </td><td>Add the missing information. Refer to <a class="el" href="pdsc_family_pg.html#element_subFamily">/package/devices/family/subFamily</a>. </td></tr>
<tr>
<td>M361 </td><td>WARNING </td><td>Generator ID in Taxonomy Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em> is undefined: <em>'GENID'</em> </td><td>The generator ID used in the taxonomy is not defined. Define or correct the generator ID (<a class="el" href="element_taxonomy.html">/package/taxonomy element</a>). </td></tr>
<tr>
<td>M362 </td><td>WARNING </td><td>Not all Component Dependencies for Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, Csub= <em>'CSUB'</em>, Cversion= <em>'CVER'</em>, Capiversion= <em>'APIVER'</em> can be resolved. <br/>
RTE Model reports: <em>'MSG'</em> </td><td>Some of the component dependencies could not be resolved. The message might contain additional information. Verify and correct component definition and dependency information. Refer to <a class="el" href="pdsc_components_pg.html#element_component">/package/components/.../component</a> attribute <em>condition</em>. </td></tr>
<tr>
<td>M363 </td><td>WARNING </td><td>No API defined for Component Cclass= <em>'CCLASS'</em>, Cgroup= <em>'CGROUP'</em>, Csub= <em>'CSUB'</em>, Cversion= <em>'CVER'</em>, Capiversion= <em>'APIVER'</em> </td><td>The package is missing the API information for the specified component. Refer to <a class="el" href="pdsc_apis_pg.html#element_apis">/package/apis</a>. </td></tr>
<tr>
<td>M364 </td><td>WARNING </td><td>No Devices for Condition <em>'COND'</em> available. </td><td>The specified condition refers to a device that does not exist. Define the device (<a class="el" href="pdsc_family_pg.html#element_device">/package/devices/family/../device</a>) or correct the information for the condition (<a class="el" href="pdsc_conditions_pg.html#element_condition">/package/conditions/condition</a>). </td></tr>
<tr>
<td>M365 </td><td>ERROR </td><td>Redefined DEVTYPE <em>'MCU'</em> found, see Line <em>LINE</em> </td><td>Remove duplicate device/variant entries. </td></tr>
<tr>
<td>M366 </td><td>ERROR </td><td>Redefined DEVTYPEEXIST as DEVTYPE <em>'MCU'</em> found, see Line <em>LINE</em> </td><td>Device has been redefined as variant or vice versa. Remove duplicate device/variant entries. </td></tr>
<tr>
<td>M368 </td><td>INFO </td><td>Redefined TYPEEXISTING as TYPE <em>'NAME'</em> found, see Line <em>LINE</em> </td><td>Family/subfamily/device/variant has been redefined as different type. </td></tr>
<tr>
<td>M369 </td><td>INFO </td><td>Feature is already defined for <em>'DEVICE'</em> and will be added, see Line <em>'LINE'</em>: <em>'FEATURE'</em>. </td><td>This feature <em>'FEATURE'</em> has been defined already on a higher level and as such it gets added to this <em>'DEVICE'</em>. This is usually done when some devices have a higher number of basic features. Correct the feature (<a class="el" href="pdsc_family_pg.html#element_feature">/package/devices/family/.../feature</a>) if this is a typo. </td></tr>
<tr>
<td>M370 </td><td>WARNING </td><td>URL is not conformant: <em>'URL'</em>:<br/>
Backslashes are not allowed in URL, use forward slashes. </td><td>Use standard URL notation using forward slashes (/). </td></tr>
<tr>
<td>M371 </td><td>ERROR </td><td><em>'SECTION'</em> Feature for <em>'MCU'</em>: <em>'FEATURE'</em> unknown. </td><td>This feature <em>'FEATURE'</em> is unknwon to the specified <em>'MCU'</em>. Correct the feature (<a class="el" href="pdsc_family_pg.html#element_feature">/package/devices/family/.../feature</a>) if this is a typo. </td></tr>
<tr>
<td>M372 </td><td>ERROR </td><td><em>'SECTION'</em> Feature for <em>'MCU'</em>: <em>'FEATURE'</em> misspelled, did you mean <em>'KNOWNFEATURE'</em> (<em>'DESCR'</em>). </td><td>This feature <em>'FEATURE'</em> resembles the feature <em>'KNOWNFEATURE'</em>. Correct the feature (<a class="el" href="pdsc_family_pg.html#element_feature">/package/devices/family/.../feature</a>) if this is a typo. </td></tr>
<tr>
<td>M373 </td><td>ERROR </td><td>Unsupported Schema Version: <em>'VER'</em>. </td><td>The schema version is not supported. Verify the attribute <span class="XML-Token">schemaVersion</span> of the element <a class="el" href="pdsc_package_pg.html#element_package">/package</a>. </td></tr>
<tr>
<td>M374 </td><td>ERROR </td><td>While checking Feature for <em>'MCU'</em>: Pname <em>'CPU'</em> not found. </td><td>The processor could not be found for the specified device. Refer to <a class="el" href="pdsc_family_pg.html#element_device">/package/devices/family/../device</a> and <a class="el" href="pdsc_family_pg.html#element_processor">/package/devices/family/.../processor</a>. </td></tr>
<tr>
<td>M375 </td><td>ERROR </td><td><em>'path/pdsc_file'</em>: No &lt;mountedDevice&gt; for board <em>'BOARD'</em> found. </td><td>If a board element does not contain a &lt;mountedDevice&gt; element, then the examples for this board are not shown and example projects may not appear in the development tools. Refer to <a class="el" href="pdsc_boards_pg.html#element_board_mountedDevice">/package/boards/board/mountedDevice</a> of <a class="el" href="pdsc_boards_pg.html#element_boards">/package/boards</a>. </td></tr>
<tr>
<td>M376 </td><td>ERROR </td><td>Schema Version not set! </td><td>Set a valid schema version in the PDSC file. </td></tr>
<tr>
<td>M377 </td><td>INFO </td><td>File <em>'NAME'</em> <em>TYPE</em> must have <em>'attr="config"'</em> </td><td>This file has to be configurable. Add the required attribute to achieve this. </td></tr>
</table>
<h2>XML Reader Errors </h2>
<table class="cmtable" summary="packChk XML Reader Msgs">
<tr>
<th>Message Number </th><th>Type </th><th>Description </th><th>Action </th></tr>
<tr>
<td>M401 </td><td>INFO </td><td>Did you mean <em>'TAG'</em>? </td><td>Specify the tag to be used. </td></tr>
<tr>
<td>M410 </td><td>WARNING </td><td>Lost xml file stream. </td><td>File corrupted. </td></tr>
<tr>
<td>M411 </td><td>WARNING </td><td>Preamble for <em>'UTF'</em> should not be used, specify via '&lt;?xml' </td><td>Specify encoding as UTF-8 only, without BOM. </td></tr>
<tr>
<td>M412 </td><td>WARNING </td><td>Unsupported format or extra characters found before '&lt;?xml': <em>'TEXT'</em> </td><td>Correct the XML file. </td></tr>
<tr>
<td>M413 </td><td>WARNING </td><td>UTF Format not supported: <em>'UTF'</em> </td><td>Select another UTF format. </td></tr>
<tr>
<td>M414 </td><td>ERROR </td><td>Cannot decode XML special character: <em>'SPECIALCHAR'</em>. </td><td>Correct the XML file. </td></tr>
<tr>
<td>M415 </td><td>ERROR </td><td>'&lt;&ndash;' found, should this be a comment '&lt;!&ndash;' ? </td><td>Looks like a misspelled comment. </td></tr>
<tr>
<td>M416 </td><td>ERROR </td><td>Begin Tag seems to end with a Single Tag. Is this a typo? </td><td>Correct the XML file. </td></tr>
<tr>
<td>M417 </td><td>ERROR </td><td>Inconsistent XML Structure </td><td>Correct the XML file. </td></tr>
<tr>
<td>M418 </td><td>ERROR </td><td>XML Stack deeper than 30 Items! Giving up. </td><td>Reduce the nested nodes. </td></tr>
<tr>
<td>M419 </td><td>ERROR </td><td>Begin Tag follows Text. Missing End Tag? </td><td>Correct the XML file. </td></tr>
<tr>
<td>M420 </td><td>ERROR </td><td>Missing quotes (") in Attributes: <em>'ATTRLINE'</em> </td><td>Correct the XML file. Enclose values in <span class="XML-Token">" "</span>. </td></tr>
<tr>
<td>M421 </td><td>ERROR </td><td>XML Hierarchy Error: Missing End Tags. </td><td>Correct the XML file. Verify for enclosing or nested tags. </td></tr>
<tr>
<td>M422 </td><td>ERROR </td><td>Error reading file <em>'NAME'</em> </td><td>File could not be read. </td></tr>
</table>
<h2>Model Errors </h2>
<table class="cmtable" summary="packChk Model Msgs">
<tr>
<th>Message Number </th><th>Type </th><th>Description </th><th>Action </th></tr>
<tr>
<td>M500 </td><td>TEXT </td><td>RTE Model reports: <em>MSG</em> </td><td>Error while preparing data. See massage for more details. </td></tr>
<tr>
<td>M502 </td><td>TEXT </td><td>RTE Model reports: #error <em>NUM:</em> <em>NAME</em> : <em>MSG</em> </td><td>Additional software components required. </td></tr>
<tr>
<td>M504 </td><td>TEXT </td><td>RTE Model reports: MISSING: &ndash; <em>SPACE</em> <em>NAME</em> </td><td>Add the missing component. </td></tr>
</table>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="createPackUtil.html">Utilities for Creating Packs</a></li>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,197 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Pack Description (*.pdsc) Format</title>
<title>CMSIS-Pack: Pack Description (*.pdsc) Format</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('packFormat.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Pack Description (*.pdsc) Format </div> </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#Filenames">Filename Conventions</a></li>
<li class="level1"><a href="#PackSchema">Pack Schema</a></li>
<li class="level1"><a href="#PDSC_Example">Example of a *.pdsc File</a></li>
</ul>
</div>
<div class="textblock"><p>The <b>Pack Description (*.pdsc) Format</b> uses standard XML annotations and is defined in the schema file <b>PACK.xsd</b>. Software components are distributed through <b>Software Packs</b>. A <a class="el" href="cp_SWComponents.html">Software Pack</a> is a zip file containing a single <b>Pack Description</b> file that describes dependencies to devices, processors, tool chains, or other software components.</p>
<p>A descriptive text of the <a class="el" href="cp_SWComponents.html">Software Pack</a>along the text information for devices, components, and examples is part of each a <b>Pack Description</b> (*.pdsc) file. In addition, information is provided which facilitates downloading, updating, and versioning of of a <a class="el" href="cp_SWComponents.html">Software Pack</a>. The *.pdsc file contains also the complete version history of the <a class="el" href="cp_SWComponents.html">Software Pack</a> with a brief list of the most significant changes.</p>
<h1><a class="anchor" id="Filenames"></a>
Filename Conventions</h1>
<p>A <a class="el" href="cp_SWComponents.html">Software Pack</a> must have a unique filename which uses the following format: <b>&lt;vendor&gt;.&lt;name&gt;.&lt;version&gt;.pack</b>.</p>
<p><b>Where:</b> </p>
<ul>
<li><b>&lt;vendor&gt;</b>: name of the supplier or vendor of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>&lt;name&gt;</b>: name of the <a class="el" href="cp_SWComponents.html">Software Pack</a>. It is the vendor's responsibility to ensure unique package names.</li>
<li><b>&lt;release version="X.Y.Z"&gt;</b>: <a class="el" href="pdsc_package_pg.html#VersionType">version number</a> of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>.pack</b>: file extension identifying a <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>&lt;vendor&gt; and &lt;name&gt; <em>must</em> <em>not</em> contain spaces.</dd></dl>
<p><br/>
The <b>Pack Description</b> (*.pdsc) file belonging to such a <a class="el" href="cp_SWComponents.html">Software Pack</a> file (&lt;vendor&gt;.&lt;name&gt;.&lt;version&gt;.pack) is version independent and has the format: <b>&lt;vendor&gt;.&lt;name&gt;.pdsc</b>.</p>
<p><b>Where:</b> </p>
<ul>
<li><b>&lt;vendor&gt;</b>: name of the supplier or vendor of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>&lt;name&gt;</b>: name of the <a class="el" href="cp_SWComponents.html">Software Pack</a> that is described by this *.pdsc file.</li>
<li><b>.pack</b>: file extension identifying a <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>&lt;vendor&gt; and &lt;name&gt; <em>must</em> <em>not</em> contain spaces.</dd></dl>
<p>Example filenames for software packs:</p>
<p>Software Pack for CMSIS Version 4.0 released by Arm.</p>
<ul>
<li><b>ARM.CMSIS.4.0.0.pack</b>: filename of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>ARM.CMSIS.pdsc</b>: filename of the <b>Pack Description</b> (*.pdsc) file.</li>
</ul>
<p>Device Family Pack for STM32F4 Version 1.0.0 released by ST Microelectronics.</p>
<ul>
<li><b>ST.STM32F4xx_DFP.1.0.0.pack</b>: filename of the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><b>ST.STM32F4xx.pdsc</b>: filename of the <b>Pack Description</b> (*.pdsc) file.</li>
</ul>
<dl class="section note"><dt>Note</dt><dd>All elements are case sensitive and must be consistently spelled in all places, i.e. the definition in the PDSC file must match the filenames of the *.pdsc and *.pack files. The file extensions (*.pdsc and *.pack) must be lower case.</dd></dl>
<h1><a class="anchor" id="PackSchema"></a>
Pack Schema</h1>
<p>The XML schema file <b>PACK.xsd</b> defines the sections used in a <b>*.pdsc</b> file. The current <b>PACK.xsd</b> can be found in the ARM.CMSIS pack in the directory .\CMSIS\Utilities.</p>
<p>The <a class="el" href="packFormat.html">Pack Description (*.pdsc) Format</a> is structured using grouping elements and contains the following top level elements:</p>
<ul>
<li><a class="el" href="pdsc_package_pg.html">&lt;package&gt;</a>: describes package related information like vendor, package name, description, version. Is the root element.</li>
<li><a class="el" href="element_keywords.html">&lt;keywords&gt;</a>: lists keywords to search for packages. Can be used for search engines.</li>
<li><a class="el" href="element_repository.html">&lt;repository&gt;</a>: specifies the URL and repository type of a public repository where the pack originates from.</li>
<li><a class="el" href="element_dominate.html">&lt;dominate&gt;</a>: the pack contains one or more device, API, or component that overrules other packs with identical items.</li>
<li><a class="el" href="element_releases.html">&lt;releases&gt;</a>: lists release versions with descriptions.</li>
<li><a class="el" href="element_requirements_pg.html">&lt;requirements&gt;</a>: lists required packs, compiler, programming language standards and their version or version range.</li>
<li><a class="el" href="element_taxonomy.html">&lt;taxonomy&gt;</a>: lists description elements that define component classes and component group names.</li>
<li><a class="el" href="pdsc_apis_pg.html">&lt;apis&gt;</a>: describes Application Programming Interfaces (API) Specifications contained in the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><a class="el" href="pdsc_generators_pg.html">&lt;generators&gt;</a>: specifies the tools that have been used to generate the PDSC file.</li>
<li><a class="el" href="pdsc_devices_pg.html">&lt;devices&gt;</a>: lists the devices supported by this <a class="el" href="cp_SWComponents.html">Software Pack</a>. It specifies the device attributes and files like flash programming algorithms, CMSIS device header files, CMSIS System View Descriptions, etc.</li>
<li><a class="el" href="pdsc_boards_pg.html">&lt;boards&gt;</a>: lists the development boards supported by the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><a class="el" href="pdsc_conditions_pg.html">&lt;conditions&gt;</a>: defines dependencies to devices, processors, components, and tools that are used within the <a class="el" href="cp_SWComponents.html">Software Pack</a>. It allows making components and files conditional.</li>
<li><a class="el" href="pdsc_components_pg.html">&lt;components&gt;</a>: lists the software components contained in the <a class="el" href="cp_SWComponents.html">Software Pack</a>.</li>
<li><a class="el" href="pdsc_examples_pg.html">&lt;examples&gt;</a>: specifies example projects contained in the PACK.</li>
</ul>
<h1><a class="anchor" id="PDSC_Example"></a>
Example of a *.pdsc File</h1>
<p>This example of a *.pdsc File explains the sections, particularly how dependencies are used to identify individual files of <a class="el" href="cp_SWComponents.html#cp_Components">Software Components</a>.</p>
<div class="image">
<img src="PDSC_Example_top.png" alt="PDSC_Example_top.png"/>
</div>
<div class="image">
<img src="PDSC_Example_bottom.png" alt="PDSC_Example_bottom.png"/>
<div class="caption">
Example of a *.pdsc File</div></div>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,80 @@
var packFormat =
[
[ "Filename Conventions", "packFormat.html#Filenames", null ],
[ "Pack Schema", "packFormat.html#PackSchema", null ],
[ "Example of a *.pdsc File", "packFormat.html#PDSC_Example", null ],
[ "/package element", "pdsc_package_pg.html", [
[ "/package", "pdsc_package_pg.html#element_package", null ]
] ],
[ "/package/keywords element", "element_keywords.html", null ],
[ "/package/repository element", "element_repository.html", null ],
[ "/package/dominate element", "element_dominate.html", null ],
[ "/package/releases element", "element_releases.html", [
[ "/package/releases/release", "element_releases.html#element_release", null ]
] ],
[ "/package/requirements", "element_requirements_pg.html", [
[ "/package/requirements/packages", "element_requirements_pg.html#element_packages", null ],
[ "/package/requirements/compilers", "element_requirements_pg.html#element_compilers", null ],
[ "/package/requirements/languages", "element_requirements_pg.html#element_languages", null ]
] ],
[ "/package/taxonomy element", "element_taxonomy.html", [
[ "/package/taxonomy/description", "element_taxonomy.html#element_taxonomyDescription", null ]
] ],
[ "/package/apis element", "pdsc_apis_pg.html", [
[ "/package/apis", "pdsc_apis_pg.html#element_apis", null ],
[ "/package/apis/api", "pdsc_apis_pg.html#element_api", null ]
] ],
[ "/package/generators element", "pdsc_generators_pg.html", [
[ "/package/generators", "pdsc_generators_pg.html#element_generators", null ],
[ "/package/generators/generator", "pdsc_generators_pg.html#element_generator", null ],
[ "/package/generators/generator/select", "pdsc_generators_pg.html#element_gen_select", null ],
[ "/package/generators/generator/exe", "pdsc_generators_pg.html#element_gen_exe", null ],
[ "/package/generators/generator/eclipse", "pdsc_generators_pg.html#element_gen_eclipse", null ],
[ "/package/generators/generator/web", "pdsc_generators_pg.html#element_gen_web", null ],
[ "/package/generators/generator/.../command", "pdsc_generators_pg.html#element_gen_command", null ],
[ "/package/generators/generator/.../argument", "pdsc_generators_pg.html#element_gen_argument", null ],
[ "/package/generators/generator/project_files", "pdsc_generators_pg.html#element_gen_project_files", null ],
[ "/package/generators/generator/files", "pdsc_generators_pg.html#element_gen_files", null ],
[ "/package/generators/generator/files/file", "pdsc_generators_pg.html#element_gen_file", null ]
] ],
[ "/package/devices element", "pdsc_devices_pg.html", "pdsc_devices_pg" ],
[ "/package/boards element", "pdsc_boards_pg.html", [
[ "/package/boards", "pdsc_boards_pg.html#element_boards", null ],
[ "/package/boards/board", "pdsc_boards_pg.html#element_board", null ],
[ "/package/boards/board/feature", "pdsc_boards_pg.html#element_board_feature", null ],
[ "/package/boards/board/mountedDevice", "pdsc_boards_pg.html#element_board_mountedDevice", null ],
[ "/package/boards/board/compatibleDevice", "pdsc_boards_pg.html#element_board_compatibleDevice", null ],
[ "/package/boards/board/image", "pdsc_boards_pg.html#element_board_image", null ],
[ "/package/boards/board/debugInterface", "pdsc_boards_pg.html#element_board_debugInterface", null ],
[ "/package/boards/board/book", "pdsc_boards_pg.html#element_board_book", null ]
] ],
[ "/package/conditions element", "pdsc_conditions_pg.html", [
[ "/package/conditions", "pdsc_conditions_pg.html#element_conditions", null ],
[ "/package/conditions/condition", "pdsc_conditions_pg.html#element_condition", null ],
[ "/package/conditions/condition/accept", "pdsc_conditions_pg.html#element_accept", null ],
[ "/package/conditions/condition/require", "pdsc_conditions_pg.html#element_require", null ],
[ "/package/conditions/condition/deny", "pdsc_conditions_pg.html#element_deny", null ]
] ],
[ "/package/components element", "pdsc_components_pg.html", [
[ "Component Bundle", "pdsc_components_pg.html#Component_Bundle", null ],
[ "Component Files", "pdsc_components_pg.html#Component_Files", null ],
[ "Component Instances", "pdsc_components_pg.html#Component_Instances", null ],
[ "RTE_Components.h", "pdsc_components_pg.html#RTE_Components_h", null ],
[ "Pre_Include_Global_h", "pdsc_components_pg.html#Pre_Include_Global_h", null ],
[ "Pre_Include_Local_h", "pdsc_components_pg.html#Pre_Include_Local_h", null ],
[ "/package/components", "pdsc_components_pg.html#element_components", null ],
[ "/package/components/bundle", "pdsc_components_pg.html#element_bundle", null ],
[ "/package/components/.../component", "pdsc_components_pg.html#element_component", null ],
[ "/package/.../files", "pdsc_components_pg.html#element_files", null ],
[ "/package/.../files/file", "pdsc_components_pg.html#element_file", null ]
] ],
[ "/package/examples element", "pdsc_examples_pg.html", [
[ "/package/examples", "pdsc_examples_pg.html#element_examples", null ],
[ "/package/examples/example", "pdsc_examples_pg.html#element_example", null ],
[ "/package/examples/example/board", "pdsc_examples_pg.html#element_example_board", null ],
[ "/package/examples/project", "pdsc_examples_pg.html#element_example_project", null ],
[ "/package/examples/project/environment", "pdsc_examples_pg.html#element_example_project_env", null ],
[ "/package/examples/example/attributes", "pdsc_examples_pg.html#element_example_attributes", null ],
[ "/package/examples/example/attributes/component", "pdsc_examples_pg.html#element_example_attribute_component", null ]
] ]
];
@@ -0,0 +1,284 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>CMSIS-Pack Index Files</title>
<title>CMSIS-Pack: CMSIS-Pack Index Files</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('packIndexFile.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">CMSIS-Pack Index Files </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>CMSIS-Pack is designed as a web-based distribution network. Each provider of a CMSIS-Pack (also referred to as <em>vendor</em>) is responsible for hosting, maintaining and publishing unique versions of a CMSIS-Pack.</p>
<p>A CMSIS-Pack is uniquely identified by &lt;vendor&gt;.&lt;pack name&gt;.&lt;version&gt;.pack. All published versions of a pack and the PDSC file need to be available in the same web folder specified by &lt;url&gt;. Multiple different packs may be located in the same web folder.</p>
<h1><a class="anchor" id="pidxFile"></a>
Package Index File (pidx)</h1>
<p>The package index file lists all CMSIS-Packs hosted and maintained by a vendor. The file is hosted by the vendor and has the name &lt;vendor&gt;.pidx. The &lt;vendor&gt; tag needs to match the file name. The file also contains the &lt;url&gt; to it's origin, as well as a &lt;timestamp&gt; of it's last update.</p>
<p>It is the vendor's obligation to update this file whenever:</p>
<ul>
<li>a new pack is added.</li>
<li>a new version of a pack is added.</li>
<li>a pack is deprecated.</li>
<li>a replacement for a pack becomes available.</li>
</ul>
<p><b>Example</b> MyVendor.pidx: </p>
<div class="fragment"><div class="line">&lt;?xml version=<span class="stringliteral">&quot;1.0&quot;</span> encoding=<span class="stringliteral">&quot;UTF-8&quot;</span> ?&gt;</div>
<div class="line"></div>
<div class="line">&lt;index schemaVersion=<span class="stringliteral">&quot;1.0.0&quot;</span> xs:noNamespaceSchemaLocation=<span class="stringliteral">&quot;PackIndex.xsd&quot;</span> xmlns:xs=<span class="stringliteral">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>&gt;</div>
<div class="line"> &lt;vendor&gt;MyVendor&lt;/vendor&gt;</div>
<div class="line"> &lt;url&gt;http:<span class="comment">//www.MyVendor.com/pack/&lt;/url&gt;</span></div>
<div class="line"> &lt;timestamp&gt;2017-01-25T15:00:10.7300074+00:00&lt;/timestamp&gt;</div>
<div class="line"> &lt;pindex&gt;</div>
<div class="line"> &lt;pdsc url=<span class="stringliteral">&quot;http://www.MyVendor.com/pack/mypack/&quot;</span> vendor=<span class="stringliteral">&quot;MyVendor&quot;</span> name=<span class="stringliteral">&quot;MyPack&quot;</span> version=<span class="stringliteral">&quot;1.1.0&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/pindex&gt;</div>
<div class="line">&lt;/index&gt;</div>
</div><!-- fragment --><p>Each individual pack is referenced by the attributes:</p>
<ul>
<li><code>url</code> = web folder where the PDSC and packs reside.</li>
<li><code>vendor</code> = vendor of the pack.</li>
<li><code>name</code> = the name of the pack.</li>
<li><code>version</code> = the version number of the latest available release for the pack.</li>
</ul>
<p>The package index file for the CMSIS-Pack compliant packs, hosted on www.keil.com can be found here: <a href="http://www.keil.com/pack/Keil.pidx">www.keil.com/pack/Keil.pidx</a></p>
<p>The benefit of a single package index file is, that this file only needs to be exchanged once and can be polled for updates and additions of packs by a vendor. To add a vendor's packs to the public list maintained on www.keil.com, send an email to <a href="#" onclick="location.href='mai'+'lto:'+'CMS'+'IS'+'@ar'+'m.'+'com'; return false;">CMSIS@arm.com</a> attaching a version of the &lt;vendor&gt;.pidx file.</p>
<h1><a class="anchor" id="vidxFile"></a>
Vendor Index File (vidx)</h1>
<p>A vendor index file lists package index files from different vendors. This information can be used to compile a list of known packs.</p>
<p><b>Example</b> MyVendor.vidx: </p>
<div class="fragment"><div class="line">&lt;?xml version=<span class="stringliteral">&quot;1.0&quot;</span> encoding=<span class="stringliteral">&quot;UTF-8&quot;</span> ?&gt;</div>
<div class="line"></div>
<div class="line">&lt;index schemaVersion=<span class="stringliteral">&quot;1.0&quot;</span> xmlns:xs=<span class="stringliteral">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> xs:noNamespaceSchemaLocation=<span class="stringliteral">&quot;PackIndex.xsd&quot;</span>&gt;</div>
<div class="line"> &lt;vendor&gt;MyVendor&lt;/vendor&gt;</div>
<div class="line"> &lt;url&gt;www.MyVendor.com/pack&lt;/url&gt;</div>
<div class="line"> &lt;timestamp&gt;2017-01-08T10:30:00&lt;/timestamp&gt;</div>
<div class="line"> &lt;vindex&gt;</div>
<div class="line"> &lt;pidx url=<span class="stringliteral">&quot;http://www.othervendor.com/MyPacks/&quot;</span> vendor=<span class="stringliteral">&quot;OtherVendor&quot;</span> /&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/vindex&gt;</div>
<div class="line"> &lt;!-- the section below is only intended <span class="keywordflow">for</span> the transition until all vendors use the &lt;vendor&gt;.pidx file</div>
<div class="line"> &lt;pindex&gt;</div>
<div class="line"> &lt;pdsc url=<span class="stringliteral">&quot;http://www.othervendor2.com/packs/&quot;</span> vendor=<span class="stringliteral">&quot;OtherVendor2&quot;</span> name=<span class="stringliteral">&quot;MyPack&quot;</span> version=<span class="stringliteral">&quot;2.3.0&quot;</span>/&gt;</div>
<div class="line"> ...</div>
<div class="line"> &lt;/pindex&gt;</div>
<div class="line">&lt;/index&gt;</div>
</div><!-- fragment --><p>The latest index file of CMSIS-Packs belonging to vendor="ARM" and vendor="Keil" that are hosted on www.keil.com/pack is maintained here: <a href="http://www.keil.com/pack/Keil.pidx">www.keil.com/pack/Keil.pidx</a></p>
<p>ARM also maintains a flat list of all CMSIS-Pack compliant packs reported to ARM here: <a href="http://www.keil.com/pack/index.pidx">www.keil.com/pack/index.pidx</a></p>
<p>The vendor index file containing references to the package index files (or optionally PDSC files) used for compiling this summary index file are listed in the Keil.vidx file and can be downloaded from here: <a href="http://www.keil.com/pack/Keil.vidx">www.keil.com/pack/Keil.vidx</a></p>
<p>Based on these publicly available index files, everyone is equally positioned to create an index of available packs and their latest versions.</p>
<h1><a class="anchor" id="packIndexSchema"></a>
CMSIS-Pack Index Schema File</h1>
<pre class="fragment">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!--
Copyright (c) 2013-2017 ARM Limited. All rights reserved.
SPDX-License-Identifier: Apache-2.0
Licensed under the Apache License, Version 2.0 (the License); you may
not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an AS IS BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
$Date: 23. Januar 2017
$Revision: 1.1.0
$Project: Schema File for Package Index File Format Specification
Package Index file naming convention &lt;vendor&gt;.pidx
Vendor Index file naming convention &lt;vendor&gt;.vidx
SchemaVersion=1.1.0
--&gt;
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified" version="1.1.0"&gt;
&lt;!-- semantic versioning (semver.org) &lt;major&gt;.&lt;minor&gt;.&lt;patch&gt;-&lt;quality&gt; --&gt;
&lt;xs:simpleType name="SemanticVersionType"&gt;
&lt;xs:restriction base="xs:string"&gt;
&lt;!-- &lt;major&gt; . &lt;minor&gt; . &lt;patch&gt; - &lt;quality&gt; + &lt;build meta info&gt; --&gt;
&lt;xs:pattern value="(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9][0-9]*|[0-9]*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?"/&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;!-- some strings are used to construct filenames (e.g. package name). Such names can contain only subset of characters and must not contain neither spaces nor dots. --&gt;
&lt;xs:simpleType name="RestrictedString"&gt;
&lt;xs:restriction base="xs:string"&gt;
&lt;xs:pattern value="[\-_A-Za-z0-9]+"/&gt;
&lt;xs:pattern value="\S(.*\S)?"&gt;&lt;/xs:pattern&gt;
&lt;/xs:restriction&gt;
&lt;/xs:simpleType&gt;
&lt;!-- Vendor index file Description Type --&gt;
&lt;xs:complexType name="VidxType"&gt;
&lt;xs:attribute name="url" type="xs:anyURI" use="required"/&gt;
&lt;xs:attribute name="vendor" type="RestrictedString" use="required"/&gt;
&lt;xs:attribute name="date" type="xs:date" use="optional"/&gt;
&lt;/xs:complexType&gt;
&lt;!-- Package Description Type --&gt;
&lt;xs:complexType name="PdscType"&gt;
&lt;xs:attribute name="url" type="xs:anyURI" use="required"/&gt;
&lt;xs:attribute name="vendor" type="RestrictedString" use="required"/&gt;
&lt;xs:attribute name="name" type="RestrictedString" use="required"/&gt;
&lt;xs:attribute name="version" type="SemanticVersionType" use="required"/&gt;
&lt;xs:attribute name="date" type="xs:date" use="optional"/&gt;
&lt;xs:attribute name="deprecated" type="xs:date" use="optional"/&gt;
&lt;xs:attribute name="replacement" type="RestrictedString" use="optional"/&gt;
&lt;xs:attribute name="size" type="xs:unsignedInt" use="optional"/&gt;
&lt;/xs:complexType&gt;
&lt;!-- Package Description file Type --&gt;
&lt;xs:complexType name="PindexType"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="pdsc" type="PdscType" maxOccurs="unbounded"/&gt;
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;
&lt;!-- Vendor vendor's package index file tag --&gt;
&lt;xs:complexType name="VindexType"&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="pidx" type="VidxType" maxOccurs="unbounded"/&gt;
&lt;/xs:sequence&gt;
&lt;/xs:complexType&gt;
&lt;!-- Index description root point (Vendor Index file, Package Index file --&gt;
&lt;xs:element name="index" nillable="true"&gt;
&lt;xs:complexType&gt;
&lt;xs:sequence&gt;
&lt;xs:element name="vendor" type="RestrictedString"/&gt;
&lt;xs:element name="url" type="xs:anyURI"/&gt;
&lt;xs:element name="timestamp" type="xs:dateTime" minOccurs="0"/&gt;
&lt;xs:choice minOccurs="1" maxOccurs="2"&gt;
&lt;!-- index/list of packs --&gt;
&lt;xs:element name="pindex" type="PindexType"/&gt;
&lt;!-- index/list of vendor index files --&gt;
&lt;xs:element name="vindex" type="VindexType"/&gt;
&lt;/xs:choice&gt;
&lt;/xs:sequence&gt;
&lt;xs:attribute name="schemaVersion" type="SemanticVersionType" use="required"/&gt;
&lt;/xs:complexType&gt;
&lt;/xs:element&gt;
&lt;/xs:schema&gt;
</pre> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:01 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,237 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Pack Example</title>
<title>CMSIS-Pack: Pack Example</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Pack
&#160;<span id="projectnumber">Version 1.6.0</span>
</div>
<div id="projectbrief">Delivery Mechanism for Software Packs</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('pack_Example.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Pack Example </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <b>ARM::CMSIS</b> Pack contains an example of a Software Pack that contains device support, board support and software components. This Pack can be used as a reference for user generated Software Packs. It is available in the directory \CMSIS\Pack\Example. It contains a <a class="el" href="pack_Example.html#PE_PDSC">PDSC example file</a> and all sub-directories containing the files referenced in the PDSC. <br/>
The example is a <a class="el" href="createPack_DFP.html">DFP</a> for NXP's LPC1800 series of microcontrollers. It also contains <a class="el" href="createPackBoard.html">BSP</a> information and software components, mainly peripheral drivers. Some of the drivers adhere to the <a href="../../Driver/html/index.html" class="el" target="_blank">CMSIS-Driver</a> standard. This is the layout of the sub-directories: </p>
<table class="doxtable">
<tr>
<th>Directory </th><th>Content </th><th>Section in PDSC </th></tr>
<tr>
<td><b>Boards</b> </td><td>CMSIS-RTOS Blinky uVision project running on the MCB1800 development board </td><td><a class="el" href="pdsc_examples_pg.html">&lt;examples&gt;</a> </td></tr>
<tr>
<td><a class="el" href="pack_Example.html#PE_CMSIS_Driver">CMSIS_Driver</a></td><td><a href="../../Driver/html/index.html"><b>CMSIS-Driver</b></a> compliant peripheral drivers</td><td><a class="el" href="pdsc_components_pg.html#element_component">&lt;component&gt;</a> </td></tr>
<tr>
<td><a class="el" href="pack_Example.html#PE_Device">Device</a> </td><td><a href="../../Core/html/index.html"><b>CMSIS-Core (Cortex-M)</b></a> files for LPC1800 series </td><td><a class="el" href="pdsc_family_pg.html#element_device">&lt;device&gt;</a> </td></tr>
<tr>
<td><a class="el" href="pack_Example.html#PE_Documents">Documents</a> </td><td>Documentation for devices and boards </td><td><a class="el" href="pdsc_family_pg.html#element_book">&lt;book&gt;</a> </td></tr>
<tr>
<td><b>Flash</b> </td><td><a class="el" href="flashAlgorithm.html">Flash Programming</a> and a sub-directory called <b>LPC18xx43xx_IAP</b> containing a uVision project for IAP (In-Application Programming) support</td><td><a class="el" href="pdsc_family_pg.html#element_algorithm">&lt;algorithm&gt;</a> </td></tr>
<tr>
<td><b>Images</b> </td><td>Images of the MCB1800 development board </td><td><a class="el" href="pdsc_boards_pg.html">&lt;board&gt;</a> </td></tr>
<tr>
<td><b>SVD</b> </td><td><a href="../../SVD/html/index.html"><b>SVD</b></a> file for LPC1800 series </td><td><a class="el" href="pdsc_family_pg.html#element_debug">&lt;debug&gt;</a> </td></tr>
</table>
<p><a class="anchor" id="PE_PDSC"></a></p>
<h2>PDSC Example File </h2>
<p>The PDSC file that is included in the example Pack is called <b>Keil.LPC1800_DFP.pdsc.txt</b>. The extension <code>txt</code> has been added to hide the file from development tools as it is not intended for installation. The file contains the following top level elements: </p>
<table class="doxtable">
<tr>
<th>XML Element </th><th>Purpose </th></tr>
<tr>
<td><a class="el" href="pdsc_package_pg.html">&lt;package&gt;</a> </td><td>Publish Pack information like vendor, name, version, etc. </td></tr>
<tr>
<td><a class="el" href="pdsc_devices_pg.html">&lt;devices&gt;</a> </td><td>Define four sub-families with 16 devices in total. </td></tr>
<tr>
<td><a class="el" href="pdsc_boards_pg.html">&lt;boards&gt;</a> </td><td>Show MCB1800 development board information. </td></tr>
<tr>
<td><a class="el" href="pdsc_conditions_pg.html">&lt;conditions&gt;</a> </td><td>Declare required conditions for software components. </td></tr>
<tr>
<td><a class="el" href="pdsc_components_pg.html">&lt;components&gt;</a> </td><td>Include startup/system files, HAL drivers, and CMSIS-Driver 2.0 compliant peripheral drivers. </td></tr>
<tr>
<td><a class="el" href="pdsc_examples_pg.html">&lt;examples&gt;</a> </td><td>Contain a CMSIS-RTOS Blinky example project for uVision running on the MCB1800 development board. </td></tr>
</table>
<p><a class="anchor" id="PE_CMSIS_Driver"></a></p>
<h2>Directory CMSIS_Driver </h2>
<p>The <b>CMSIS_Driver</b> directory contains the following <a href="../../Driver/html/index.html" class="el" target="_blank">CMSIS-Driver</a> compliant peripheral drivers. These drivers are supporting the NXP LPC1800 series: </p>
<table class="doxtable">
<tr>
<th>Driver </th><th>File </th><th>Software Component </th></tr>
<tr>
<td><a href="../../Driver/html/group__eth__interface__gr.html" class="el" target="_blank">Ethernet</a> </td><td>EMAC_LPC18xx.c </td><td><b>::CMSIS-Driver:Ethernet MAC</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__spi__interface__gr.html" class="el" target="_blank">SPI</a> </td><td>SSP_LPC18xx.c </td><td><b>::CMSIS-Driver:SPI</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__i2c__interface__gr.html" class="el" target="_blank">I2C</a> </td><td>I2C_LPC18xx.c </td><td><b>::CMSIS-Driver:I2C</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__mci__interface__gr.html" class="el" target="_blank">MCI</a> </td><td>MCI_LPC18xx.c </td><td><b>::CMSIS-Driver:MCI</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__usart__interface__gr.html" class="el" target="_blank">USART</a> </td><td>USART_LPC18xx.c </td><td><b>::CMSIS-Driver:USART</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__usbd__interface__gr.html" class="el" target="_blank">USB Device</a> </td><td>USBD_LPC18xx.c </td><td><b>::CMSIS-Driver:USB Device:USB0/1</b> </td></tr>
<tr>
<td><a href="../../Driver/html/group__usbh__interface__gr.html" class="el" target="_blank">USB Host</a> </td><td>USBH_LPC18xx.c </td><td><b>::CMSIS-Driver:USB Host:USB0/1</b> </td></tr>
</table>
<p>The following HAL drivers are required for the implementation of the <b>CMSIS-Driver</b> compliant peripheral drivers: </p>
<table class="doxtable">
<tr>
<th>Driver </th><th>File </th><th>Software Component </th></tr>
<tr>
<td>General purpose DMA driver </td><td>GPDMA_LPC18xx.c </td><td><b>::Device:GPDMA</b> </td></tr>
<tr>
<td>General purpose IO driver </td><td>GPIO_LPC18xx.c </td><td><b>::Device:GPIO</b> </td></tr>
<tr>
<td>System control unit driver </td><td>SCU_LPC18xx.c </td><td><b>::Device:SCU</b> </td></tr>
</table>
<p><a class="anchor" id="PE_Device"></a></p>
<h2>Directory Device </h2>
<p>The <b>Device</b> directory has two sub-directories: <b>Include</b> and <b>Source</b>. </p>
<table class="doxtable">
<tr>
<th>File </th><th>Purpose </th><th>Software Component </th></tr>
<tr>
<td>Include\LPC18xx.h </td><td>LPC1800 series header file </td><td><b>::CMSIS:CORE</b> </td></tr>
<tr>
<td>Include\system_LPC18xx.h </td><td>LPC1800 series system header file </td><td><b>::CMSIS:Startup</b> </td></tr>
<tr>
<td>Source\system_LPC18xx.c </td><td>LPC1800 series system source file </td><td><b>::CMSIS:Startup</b> </td></tr>
<tr>
<td>Source\ARM\startup_LPC18xx.s </td><td>LPC1800 series startup assembler file for ARMCC</td><td><b>::CMSIS:Startup</b> </td></tr>
<tr>
<td>Source\GCC\startup_LPC18xx.S </td><td>LPC1800 series startup assembler file for GCC </td><td><b>::CMSIS:Startup</b> </td></tr>
<tr>
<td>Source\IAR\startup_LPC18xx.s </td><td>LPC1800 series startup assembler file for IAR </td><td><b>::CMSIS:Startup</b> </td></tr>
</table>
<p><a class="anchor" id="PE_Documents"></a></p>
<h2>Directory Documents </h2>
<p>This directory incorporates the following documents: </p>
<table class="doxtable">
<tr>
<th>File </th><th>Purpose </th><th>Section in PDSC </th></tr>
<tr>
<td><b>dui0552a_cortex_m3_dgug.pdf</b> </td><td>Cortex-M3 Generic User Guide</td><td><a class="el" href="pdsc_family_pg.html#element_book">&lt;book&gt;</a> element of the device <a class="el" href="pdsc_family_pg.html#element_family">&lt;family&gt;</a> element </td></tr>
<tr>
<td><b>ES_LPC18X0.pdf</b> </td><td>LPC1800 Errata sheet </td><td><a class="el" href="pdsc_family_pg.html#element_book">&lt;book&gt;</a> element of the <a class="el" href="pdsc_family_pg.html#element_device">&lt;device&gt;</a> section </td></tr>
<tr>
<td><b>LPC1850_30_20_10.pdf</b> </td><td>LPC1800 Data sheet </td><td><a class="el" href="pdsc_family_pg.html#element_book">&lt;book&gt;</a> element of the <a class="el" href="pdsc_family_pg.html#element_device">&lt;device&gt;</a> section </td></tr>
<tr>
<td><b>mcb1800.chm</b> </td><td>MCB1800/4300 User's Guide </td><td><a class="el" href="pdsc_boards_pg.html#element_board_book">&lt;book&gt;</a> element of the <a class="el" href="pdsc_boards_pg.html">&lt;boards&gt;</a> section </td></tr>
<tr>
<td><b>MCB1800v1-3-schematics.chm</b> </td><td>MCB1800 schematics </td><td><a class="el" href="pdsc_boards_pg.html#element_board_book">&lt;book&gt;</a> element of the <a class="el" href="pdsc_boards_pg.html">&lt;boards&gt;</a> section </td></tr>
<tr>
<td><b>UM10430.pdf</b> </td><td>User manual for LPC1800 </td><td><a class="el" href="pdsc_family_pg.html#element_book">&lt;book&gt;</a> element of the <a class="el" href="pdsc_family_pg.html#element_device">&lt;device&gt;</a> section </td></tr>
</table>
<dl class="section note"><dt>Note</dt><dd>Some of these documents are only placeholders for copyright reasons. </dd></dl>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Jul 10 2019 15:21:00 for CMSIS-Pack Version 1.6.0 by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More