| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- <!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>Keil MCBSTM32F400 Evaluation Board</title>
- <title>CMSIS-Zone: Keil MCBSTM32F400 Evaluation Board</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-Zone
-  <span id="projectnumber">Version 1.0.0</span>
- </div>
- <div id="projectbrief">System Resource Management</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 Page</span></a></li>
- <li class="current"><a href="pages.html"><span>Usage and 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('zTEMCB400.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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </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">Keil MCBSTM32F400 Evaluation Board </div> </div>
- </div><!--header-->
- <div class="contents">
- <div class="textblock"><p>This single processor demo application shows how to do the <a class="el" href="UseCases.html#UseCase_MPU">MPU Protection</a>. Using CMSIS-Zone, it generates:</p>
- <ul>
- <li>A header file that contains #defines to control the various linker scatter files (and might be used in other parts of the application).</li>
- <li>The MPU configuration table source and header files. These contain MPU register settings used during thread switching to update accessible memory regions.</li>
- </ul>
- <p>The application itself shows how to isolate network stack threads from the user application.</p>
- <h1><a class="anchor" id="zTEMCB400_Eclipse"></a>
- Using the CMSIS-Zone project</h1>
- <ul>
- <li><a class="el" href="zTExamples.html#zTExImport">Import</a> the project "Examples\MCBSTM32F400\Zone" into the CMSIS-Zone utility</li>
- <li><a class="el" href="zTUI.html#zTProjEx">Open</a> the MCBSTM32F400.azone file</li>
- <li><a class="el" href="zTUIGenerate.html">Generate</a> the related output files</li>
- </ul>
- <p>The MCBSTM32F400.azone file of that project has the following configuration settings:</p>
- <ul>
- <li>Project mode is set to <code>Execution</code>.</li>
- <li><a class="el" href="zTUIZonePart.html#zTUICreate">Added the zones</a> <code>Net</code>, <code>Main</code>, <code>RTX</code>, <code>Blinky</code>, <code>Timer</code>, <code>Idle</code> </li>
- <li><a class="el" href="zTUIMemPerRes.html#zTUIMemAdd">Created the memory regions</a> <code>CODE</code>, <code>RAM_SHARED</code>, <code>RAM_NET</code>, <code>RAM_MAIN</code>, <code>RAM_PRIVILEGED</code>, <code>RAM_EVR</code>, <code>RAM_BSD</code>, <code>RAM_LED</code>, <code>RAM_ADC</code>, <code>RAM_TIMER</code>, and <code>RAM_IDLE</code> </li>
- <li>Selected various memory regions and peripherals for using in the different zones: <div class="image">
- <img src="MCB400_zones.png" alt="MCB400_zones.png"/>
- </div>
- </li>
- </ul>
- <p>The zones use common Flash region for all the application code but different SRAM regions to segregate thread data. To generate the output, click on the <a class="el" href="zTUIGenerate.html">Generate</a> button in the Zone Editor tool bar. This creates the following files in the <code>ftl_gen</code> directory:</p>
- <table class="doxtable">
- <tr>
- <th align="left">Template File </th><th align="left">Generated File </th><th align="left">Description </th></tr>
- <tr>
- <td align="left">dump_fzone.txt.ftl </td><td align="left">dump_fzone.txt </td><td align="left">Contains the complete model </td></tr>
- <tr>
- <td align="left">helper.ftlinc </td><td align="left">N/A </td><td align="left">Helper template file with FTL functions. </td></tr>
- <tr>
- <td align="left">mem_layout.h.ftl </td><td align="left">mem_layout.h </td><td align="left">Header file that contains the memory region definitions, for example for the linker scatter file. </td></tr>
- <tr>
- <td align="left">mputable.c.ftl </td><td align="left">mputable.c </td><td align="left">MPU Table data definition. </td></tr>
- <tr>
- <td align="left">mputable.h.ftl </td><td align="left">mputable.h </td><td align="left">MPU Table data declaration. </td></tr>
- <tr>
- <td align="left">scatter.sct.ftl </td><td align="left">scatter.sct </td><td align="left">Example scatter file for MPU protection. </td></tr>
- </table>
- <p>These files can be used in any IDE to create the final application. In the following, the usage in Arm Keil MDK is described.</p>
- <h1><a class="anchor" id="zTEMCB400_MDK"></a>
- Using the MDK project</h1>
- <p>The example project can be loaded, built and debugged in µVision by performing the following steps:</p>
- <ol type="1">
- <li>Navigate to Examples/MCBSTM32F400/MDK</li>
- <li>Open the project workspace Blinky_Net.uvprojx</li>
- <li>Optional: Update the generated files by executing the copy_gen.bat script.</li>
- <li>Run the build in MDK.</li>
- </ol>
- <h1><a class="anchor" id="zTEMCB400_MDK_Setup"></a>
- MDK project setup</h1>
- <p>The projects Blinky_Net use the files generated in CMSIS-Zone as follows:</p>
- <table class="doxtable">
- <tr>
- <th align="left">File </th><th align="left">Description </th></tr>
- <tr>
- <td align="left">mem_layout.h </td><td align="left">Input for the linker scatter files. </td></tr>
- <tr>
- <td align="left">mputable.c </td><td align="left">MPU Table data definition. </td></tr>
- <tr>
- <td align="left">mputable.h </td><td align="left">MPU Table data declaration. </td></tr>
- <tr>
- <td align="left">scatter.sct </td><td align="left">Initial template for scatter file. </td></tr>
- </table>
- <h2><a class="anchor" id="zTEMCB400_hwsScatter"></a>
- scatter.sct</h2>
- <p>As explained previously, the #defines in <code>mem_layout.h</code> can be used to create generic scatter files that are easy to update once changes in the CMSIS-Zone project happen. Using the <b>mem_layout.h</b> file from CMSIS-Zone, the following scatter file is used in the <code>Blinky_Net</code> project, which is based on the generated scatter file template (scatter.sct):</p>
- <div class="fragment"><div class="line"><span class="preprocessor">#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m3 -xc</span></div>
- <div class="line"><span class="preprocessor"></span></div>
- <div class="line"><span class="preprocessor">#include "mem_layout.h"</span></div>
- <div class="line"></div>
- <div class="line">LR_CODE REGION_CODE_START REGION_CODE_SIZE {</div>
- <div class="line"> ER_CODE REGION_CODE_START REGION_CODE_SIZE {</div>
- <div class="line"> .o (RESET,+FIRST)</div>
- <div class="line"> (InRoot$$Sections)</div>
- <div class="line"> .ANY (+RO, +XO)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_PRIVILEGED REGION_RAM_PRIVILEGED_START REGION_RAM_PRIVILEGED_SIZE {</div>
- <div class="line"> Net_Config.o (.bss.os.*.cb)</div>
- <div class="line"> .ANY (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_SHARED REGION_RAM_SHARED_START REGION_RAM_SHARED_SIZE {</div>
- <div class="line"> system_stm32f4xx.o (.data.SystemCoreClock)</div>
- <div class="line">; *.o (.data.shared)</div>
- <div class="line"> .o (.bss.shared)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_EVR REGION_RAM_EVR_START UNINIT REGION_RAM_EVR_SIZE {</div>
- <div class="line"> EventRecorder.o (+ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_BSD REGION_RAM_BSD_START REGION_RAM_BSD_SIZE {</div>
- <div class="line"> bsd.o (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_NET REGION_RAM_NET_START REGION_RAM_NET_SIZE {</div>
- <div class="line"> Net*.lib (+RW +ZI)</div>
- <div class="line"> Net_Config.o (.bss*)</div>
- <div class="line"> emac_stm32f4xx.o (+RW +ZI)</div>
- <div class="line"> phy_ksz8081rna.o (+RW +ZI)</div>
- <div class="line"> phy_st802rt1.o (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_TIMER REGION_RAM_TIMER_START REGION_RAM_TIMER_SIZE {</div>
- <div class="line"> timer.o (+RW +ZI)</div>
- <div class="line"> .o (.bss.os.thread.stack.rtx.timer)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_ADC REGION_RAM_ADC_START REGION_RAM_ADC_SIZE {</div>
- <div class="line"> adc.o (+RW +ZI)</div>
- <div class="line"> adc_mcbstm32f400.o (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_LED REGION_RAM_LED_START REGION_RAM_LED_SIZE {</div>
- <div class="line"> led.o (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_MAIN REGION_RAM_MAIN_START REGION_RAM_MAIN_SIZE {</div>
- <div class="line"> app.o (+RW +ZI)</div>
- <div class="line"> }</div>
- <div class="line"> RW_RAM_IDLE REGION_RAM_IDLE_START REGION_RAM_IDLE_SIZE {</div>
- <div class="line"> RTX_Config.o (+RW +ZI)</div>
- <div class="line"> .o (.bss.os.thread.stack.rtx.idle)</div>
- <div class="line"> }</div>
- <div class="line">}</div>
- </div><!-- fragment --><p>The data segments of segregated software components have been allocated to distinct memory regions. </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="zoneToolUsage.html">CMSIS-Zone Utility</a></li><li class="navelem"><a class="el" href="zTExamples.html">Examples</a></li>
- <li class="footer">Generated on Thu Apr 9 2020 15:50:03 for CMSIS-Zone Version 1.0.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>
|