Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
a61c4d726This file is pinned to the selected release. Download the original to open it in your design tool.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>DIY Logging Volt/Ampmeter: STM32F103C8T6_powermeter-interface/Drivers/RTT/SEGGER_RTT_printf.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</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: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">DIY Logging Volt/Ampmeter
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></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">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('SEGGER__RTT__printf_8c_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">SEGGER_RTT_printf.c</div> </div>
</div><!--header-->
<div class="contents">
<a href="SEGGER__RTT__printf_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">* SEGGER Microcontroller GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">* The Embedded Experts *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">* (c) 1995 - 2019 SEGGER Microcontroller GmbH *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">* www.segger.com Support: support@segger.com *</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">* SEGGER RTT * Real Time Transfer for embedded targets *</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">* All rights reserved. *</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">* SEGGER strongly recommends to not make any changes *</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">* to or modify the source code of this software in order to stay *</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">* compatible with the RTT protocol and J-Link. *</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">* Redistribution and use in source and binary forms, with or *</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">* without modification, are permitted provided that the following *</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">* condition is met: *</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">* o Redistributions of source code must retain the above copyright *</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">* notice, this condition and the following disclaimer. *</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment">* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">* DAMAGE. *</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment">* *</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">---------------------------END-OF-HEADER------------------------------</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">File : SEGGER_RTT_printf.c</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">Purpose : Replacement for printf to write formatted data via RTT</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">Revision: $Rev: 17697 $</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">----------------------------------------------------------------------</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="SEGGER__RTT_8h.html">SEGGER_RTT.h</a>"</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="SEGGER__RTT__Conf_8h.html">SEGGER_RTT_Conf.h</a>"</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">*</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">* Defines, configurable</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">*</span></div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#ifndef SEGGER_RTT_PRINTF_BUFFER_SIZE</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor"> #define SEGGER_RTT_PRINTF_BUFFER_SIZE (64)</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include <stdlib.h></span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include <stdarg.h></span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  </div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912"> 68</a></span> <span class="preprocessor">#define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0)</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab"> 69</a></span> <span class="preprocessor">#define FORMAT_FLAG_PAD_ZERO (1u << 1)</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f"> 70</a></span> <span class="preprocessor">#define FORMAT_FLAG_PRINT_SIGN (1u << 2)</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#ad778ec441def4e07c9f153470d9b3aaa"> 71</a></span> <span class="preprocessor">#define FORMAT_FLAG_ALTERNATE (1u << 3)</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">*</span></div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">* Types</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">*</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  </div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html"> 80</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">char</span>* pBuffer;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordtype">unsigned</span> BufferSize;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordtype">unsigned</span> Cnt;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordtype">int</span> ReturnValue;</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html#ab8724b23ebf34566d69eb6ed4a0b374e"> 86</a></span>  </div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html#a26ff82b7970c500bb29f098cf49dd065"> 87</a></span>  <span class="keywordtype">unsigned</span> RTTBufferIndex;</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7"> 88</a></span> } <a class="code" href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a>;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec"> 90</a></span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">*</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structSEGGER__RTT__PRINTF__DESC.html#a843108780297879b7b99e4b31fc98463"> 92</a></span> <span class="comment">* Function prototypes</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">*</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">*</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">* Static code</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">*</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">*</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">* _StoreChar</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a"> 107</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a> * p, <span class="keywordtype">char</span> c) {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordtype">unsigned</span> Cnt;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  Cnt = p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a>;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> ((Cnt + 1u) <= p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a26ff82b7970c500bb29f098cf49dd065">BufferSize</a>) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  *(p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#ab8724b23ebf34566d69eb6ed4a0b374e">pBuffer</a> + Cnt) = c;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a> = Cnt + 1u;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a>++;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="comment">// Write part of string, when the buffer is full</span></div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a> == p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a26ff82b7970c500bb29f098cf49dd065">BufferSize</a>) {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">if</span> (<a class="code" href="SEGGER__RTT_8c.html#a491a86b2cc2d8cd9a475710624f17cc6">SEGGER_RTT_Write</a>(p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a843108780297879b7b99e4b31fc98463">RTTBufferIndex</a>, p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#ab8724b23ebf34566d69eb6ed4a0b374e">pBuffer</a>, p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a>) != p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a>) {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> = -1;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  p-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a> = 0u;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">*</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">* _PrintUnsigned</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a"> 132</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a>(<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a> * pBufferDesc, <span class="keywordtype">unsigned</span> v, <span class="keywordtype">unsigned</span> Base, <span class="keywordtype">unsigned</span> NumDigits, <span class="keywordtype">unsigned</span> FieldWidth, <span class="keywordtype">unsigned</span> FormatFlags) {</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _aV2C[16] = {<span class="charliteral">'0'</span>, <span class="charliteral">'1'</span>, <span class="charliteral">'2'</span>, <span class="charliteral">'3'</span>, <span class="charliteral">'4'</span>, <span class="charliteral">'5'</span>, <span class="charliteral">'6'</span>, <span class="charliteral">'7'</span>, <span class="charliteral">'8'</span>, <span class="charliteral">'9'</span>, <span class="charliteral">'A'</span>, <span class="charliteral">'B'</span>, <span class="charliteral">'C'</span>, <span class="charliteral">'D'</span>, <span class="charliteral">'E'</span>, <span class="charliteral">'F'</span> };</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordtype">unsigned</span> Div;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordtype">unsigned</span> Digit;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">unsigned</span> Number;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">unsigned</span> Width;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordtype">char</span> c;</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  Number = v;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  Digit = 1u;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// Get actual field width</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  Width = 1u;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">while</span> (Number >= Base) {</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  Number = (Number / Base);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  Width++;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (NumDigits > Width) {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  Width = NumDigits;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">// Print leading chars if necessary</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>) == 0u) {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">if</span> (FieldWidth != 0u) {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>) == <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>) && (NumDigits == 0u)) {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  c = <span class="charliteral">'0'</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  c = <span class="charliteral">' '</span>;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">while</span> ((FieldWidth != 0u) && (Width < FieldWidth)) {</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  FieldWidth--;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, c);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> < 0) {</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0) {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="comment">// Compute Digit.</span></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">// Loop until Digit has the value of the highest digit required.</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">// Example: If the output is 345 (Base 10), loop 2 times until Digit is 100.</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">while</span> (1) {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">if</span> (NumDigits > 1u) { <span class="comment">// User specified a min number of digits to print? => Make sure we loop at least that often, before checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned)</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  NumDigits--;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  Div = v / Digit;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">if</span> (Div < Base) { <span class="comment">// Is our divider big enough to extract the highest digit from value? => Done</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  Digit *= Base;</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="comment">// Output digits</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  Div = v / Digit;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  v -= Div * Digit;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, _aV2C[Div]);</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> < 0) {</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  Digit /= Base;</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  } <span class="keywordflow">while</span> (Digit);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="comment">// Print trailing spaces if necessary</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span> ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>) == <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>) {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (FieldWidth != 0u) {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">while</span> ((FieldWidth != 0u) && (Width < FieldWidth)) {</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  FieldWidth--;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, <span class="charliteral">' '</span>);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> < 0) {</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> }</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">*</span></div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="comment">* _PrintInt</span></div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#a381d5912e509ba85b307f6a3ae604871"> 222</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="SEGGER__RTT__printf_8c.html#a381d5912e509ba85b307f6a3ae604871">_PrintInt</a>(<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a> * pBufferDesc, <span class="keywordtype">int</span> v, <span class="keywordtype">unsigned</span> Base, <span class="keywordtype">unsigned</span> NumDigits, <span class="keywordtype">unsigned</span> FieldWidth, <span class="keywordtype">unsigned</span> FormatFlags) {</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordtype">unsigned</span> Width;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">int</span> Number;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  </div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  Number = (v < 0) ? -v : v;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// Get actual field width</span></div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  Width = 1u;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">while</span> (Number >= (<span class="keywordtype">int</span>)Base) {</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  Number = (Number / (int)Base);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  Width++;</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (NumDigits > Width) {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  Width = NumDigits;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a>) == <a class="code" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a>))) {</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  FieldWidth--;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  </div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// Print leading spaces if necessary</span></div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span> ((((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>) == 0u) || (NumDigits != 0u)) && ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>) == 0u)) {</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">if</span> (FieldWidth != 0u) {</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">while</span> ((FieldWidth != 0u) && (Width < FieldWidth)) {</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  FieldWidth--;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, <span class="charliteral">' '</span>);</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> < 0) {</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// Print sign if necessary</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0) {</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (v < 0) {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  v = -v;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, <span class="charliteral">'-'</span>);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a>) == <a class="code" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a>) {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, <span class="charliteral">'+'</span>);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  </div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0) {</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// Print leading zeros if necessary</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span> (((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>) == <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>) && ((FormatFlags & <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>) == 0u) && (NumDigits == 0u)) {</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (FieldWidth != 0u) {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">while</span> ((FieldWidth != 0u) && (Width < FieldWidth)) {</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  FieldWidth--;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(pBufferDesc, <span class="charliteral">'0'</span>);</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> < 0) {</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  }</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (pBufferDesc-><a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0) {</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="comment">// Print number without sign</span></div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a>(pBufferDesc, (<span class="keywordtype">unsigned</span>)v, Base, NumDigits, FieldWidth, FormatFlags);</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  }</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  </div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment">*</span></div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment">* Public code</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment">*</span></div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">**********************************************************************</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment">*</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">* SEGGER_RTT_vprintf</span></div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment">*</span></div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment">* Function description</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment">* Stores a formatted string in SEGGER RTT control block.</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">* This data is read by the host.</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment">*</span></div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment">* Parameters</span></div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment">* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal")</span></div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">* sFormat Pointer to format string</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment">* pParamList Pointer to the list of arguments for the format string</span></div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">*</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">* Return values</span></div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">* >= 0: Number of bytes which have been stored in the "Up"-buffer.</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="comment">* < 0: Error</span></div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#af3b81398913b7f7df425208067caab38"> 317</a></span> <span class="keywordtype">int</span> <a class="code" href="SEGGER__RTT__printf_8c.html#af3b81398913b7f7df425208067caab38">SEGGER_RTT_vprintf</a>(<span class="keywordtype">unsigned</span> BufferIndex, <span class="keyword">const</span> <span class="keywordtype">char</span> * sFormat, va_list * pParamList) {</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordtype">char</span> c;</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a> BufferDesc;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordtype">int</span> v;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordtype">unsigned</span> NumDigits;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordtype">unsigned</span> FormatFlags;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keywordtype">unsigned</span> FieldWidth;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordtype">char</span> acBuffer[<a class="code" href="SEGGER__RTT__Conf_8h.html#a077a1988b454a012aeafa0f7f0a63c95">SEGGER_RTT_PRINTF_BUFFER_SIZE</a>];</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#ab8724b23ebf34566d69eb6ed4a0b374e">pBuffer</a> = acBuffer;</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a26ff82b7970c500bb29f098cf49dd065">BufferSize</a> = <a class="code" href="SEGGER__RTT__Conf_8h.html#a077a1988b454a012aeafa0f7f0a63c95">SEGGER_RTT_PRINTF_BUFFER_SIZE</a>;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a> = 0u;</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a843108780297879b7b99e4b31fc98463">RTTBufferIndex</a> = BufferIndex;</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> = 0;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  c = *sFormat;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  sFormat++;</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">if</span> (c == 0u) {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'%'</span>) {</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="comment">// Filter out flags</span></div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  FormatFlags = 0u;</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  v = 1;</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  c = *sFormat;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">switch</span> (c) {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">case</span> <span class="charliteral">'-'</span>: FormatFlags |= <a class="code" href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a>; sFormat++; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">case</span> <span class="charliteral">'0'</span>: FormatFlags |= <a class="code" href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a>; sFormat++; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">case</span> <span class="charliteral">'+'</span>: FormatFlags |= <a class="code" href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a>; sFormat++; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">case</span> <span class="charliteral">'#'</span>: FormatFlags |= <a class="code" href="SEGGER__RTT__printf_8c.html#ad778ec441def4e07c9f153470d9b3aaa">FORMAT_FLAG_ALTERNATE</a>; sFormat++; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">default</span>: v = 0; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  } <span class="keywordflow">while</span> (v);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="comment">// filter out field with</span></div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  FieldWidth = 0u;</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  c = *sFormat;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span> ((c < <span class="charliteral">'0'</span>) || (c > <span class="charliteral">'9'</span>)) {</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  }</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  sFormat++;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  FieldWidth = (FieldWidth * 10u) + ((<span class="keywordtype">unsigned</span>)c - <span class="charliteral">'0'</span>);</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  } <span class="keywordflow">while</span> (1);</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  </div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="comment">// Filter out precision (number of digits to display)</span></div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  NumDigits = 0u;</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  c = *sFormat;</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'.'</span>) {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  sFormat++;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  c = *sFormat;</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">if</span> ((c < <span class="charliteral">'0'</span>) || (c > <span class="charliteral">'9'</span>)) {</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  sFormat++;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  NumDigits = NumDigits * 10u + ((unsigned)c - <span class="charliteral">'0'</span>);</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  } <span class="keywordflow">while</span> (1);</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="comment">// Filter out length modifier</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  c = *sFormat;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> ((c == <span class="charliteral">'l'</span>) || (c == <span class="charliteral">'h'</span>)) {</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  sFormat++;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  c = *sFormat;</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  }</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  } <span class="keywordflow">while</span> (1);</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="comment">// Handle specifiers</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">switch</span> (c) {</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: {</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordtype">char</span> c0;</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  v = va_arg(*pParamList, <span class="keywordtype">int</span>);</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  c0 = (char)v;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(&BufferDesc, c0);</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">case</span> <span class="charliteral">'d'</span>:</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  v = va_arg(*pParamList, <span class="keywordtype">int</span>);</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a381d5912e509ba85b307f6a3ae604871">_PrintInt</a>(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">case</span> <span class="charliteral">'u'</span>:</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  v = va_arg(*pParamList, <span class="keywordtype">int</span>);</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a>(&BufferDesc, (<span class="keywordtype">unsigned</span>)v, 10u, NumDigits, FieldWidth, FormatFlags);</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">case</span> <span class="charliteral">'x'</span>:</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">case</span> <span class="charliteral">'X'</span>:</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  v = va_arg(*pParamList, <span class="keywordtype">int</span>);</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a>(&BufferDesc, (<span class="keywordtype">unsigned</span>)v, 16u, NumDigits, FieldWidth, FormatFlags);</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">case</span> <span class="charliteral">'s'</span>:</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  {</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> * s = va_arg(*pParamList, <span class="keyword">const</span> <span class="keywordtype">char</span> *);</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  c = *s;</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  s++;</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'\0'</span>) {</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(&BufferDesc, c);</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  } <span class="keywordflow">while</span> (BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0);</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">case</span> <span class="charliteral">'p'</span>:</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  v = va_arg(*pParamList, <span class="keywordtype">int</span>);</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a>(&BufferDesc, (<span class="keywordtype">unsigned</span>)v, 16u, 8u, 8u, 0u);</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">case</span> <span class="charliteral">'%'</span>:</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(&BufferDesc, <span class="charliteral">'%'</span>);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  }</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  sFormat++;</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a>(&BufferDesc, c);</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  } <span class="keywordflow">while</span> (BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> >= 0);</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  </div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">if</span> (BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> > 0) {</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="comment">// Write remaining data, if any</span></div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">if</span> (BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a> != 0u) {</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="SEGGER__RTT_8c.html#a491a86b2cc2d8cd9a475710624f17cc6">SEGGER_RTT_Write</a>(BufferIndex, acBuffer, BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a>);</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a> += (int)BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">Cnt</a>;</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">return</span> BufferDesc.<a class="code" href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">ReturnValue</a>;</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  </div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="comment">/*********************************************************************</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="comment">*</span></div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="comment">* SEGGER_RTT_printf</span></div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="comment">*</span></div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="comment">* Function description</span></div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="comment">* Stores a formatted string in SEGGER RTT control block.</span></div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="comment">* This data is read by the host.</span></div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="comment">*</span></div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="comment">* Parameters</span></div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment">* BufferIndex Index of "Up"-buffer to be used. (e.g. 0 for "Terminal")</span></div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="comment">* sFormat Pointer to format string, followed by the arguments for conversion</span></div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="comment">*</span></div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="comment">* Return values</span></div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="comment">* >= 0: Number of bytes which have been stored in the "Up"-buffer.</span></div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment">* < 0: Error</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="comment">*</span></div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="comment">* Notes</span></div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment">* (1) Conversion specifications have following syntax:</span></div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment">* %[flags][FieldWidth][.Precision]ConversionSpecifier</span></div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="comment">* (2) Supported flags:</span></div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="comment">* -: Left justify within the field width</span></div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="comment">* +: Always print sign extension for signed conversions</span></div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="comment">* 0: Pad with 0 instead of spaces. Ignored when using '-'-flag or precision</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="comment">* Supported conversion specifiers:</span></div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="comment">* c: Print the argument as one char</span></div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="comment">* d: Print the argument as a signed integer</span></div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="comment">* u: Print the argument as an unsigned integer</span></div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="comment">* x: Print the argument as an hexadecimal integer</span></div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="comment">* s: Print the string pointed to by the argument</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="comment">* p: Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.)</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="SEGGER__RTT__printf_8c.html#a442758fd24cb811b92e67782f215bf5a"> 491</a></span> <span class="keywordtype">int</span> <a class="code" href="SEGGER__RTT__printf_8c.html#a442758fd24cb811b92e67782f215bf5a">SEGGER_RTT_printf</a>(<span class="keywordtype">unsigned</span> BufferIndex, <span class="keyword">const</span> <span class="keywordtype">char</span> * sFormat, ...) {</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordtype">int</span> r;</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  va_list ParamList;</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  </div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  va_start(ParamList, sFormat);</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  r = <a class="code" href="SEGGER__RTT__printf_8c.html#af3b81398913b7f7df425208067caab38">SEGGER_RTT_vprintf</a>(BufferIndex, sFormat, &ParamList);</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  va_end(ParamList);</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> r;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> }</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="comment">/*************************** End of file ****************************/</span></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_a53c542240e13bbbd1fa306f58b18a86f"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#a53c542240e13bbbd1fa306f58b18a86f">FORMAT_FLAG_PRINT_SIGN</a></div><div class="ttdeci">#define FORMAT_FLAG_PRINT_SIGN</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00070">SEGGER_RTT_printf.c:70</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_a381d5912e509ba85b307f6a3ae604871"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#a381d5912e509ba85b307f6a3ae604871">_PrintInt</a></div><div class="ttdeci">static void _PrintInt(SEGGER_RTT_PRINTF_DESC *pBufferDesc, int v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00222">SEGGER_RTT_printf.c:222</a></div></div>
<div class="ttc" id="aSEGGER__RTT__Conf_8h_html"><div class="ttname"><a href="SEGGER__RTT__Conf_8h.html">SEGGER_RTT_Conf.h</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_a946fe9d784f16b58f192682d4708b28a"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#a946fe9d784f16b58f192682d4708b28a">_StoreChar</a></div><div class="ttdeci">static void _StoreChar(SEGGER_RTT_PRINTF_DESC *p, char c)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00107">SEGGER_RTT_printf.c:107</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html_a843108780297879b7b99e4b31fc98463"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html#a843108780297879b7b99e4b31fc98463">SEGGER_RTT_PRINTF_DESC::RTTBufferIndex</a></div><div class="ttdeci">unsigned RTTBufferIndex</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00092">SEGGER_RTT_printf.c:92</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_a442758fd24cb811b92e67782f215bf5a"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#a442758fd24cb811b92e67782f215bf5a">SEGGER_RTT_printf</a></div><div class="ttdeci">int SEGGER_RTT_printf(unsigned BufferIndex, const char *sFormat,...)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00491">SEGGER_RTT_printf.c:491</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_a4eeb979e266bc20c1b01fd6e597c2912"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#a4eeb979e266bc20c1b01fd6e597c2912">FORMAT_FLAG_LEFT_JUSTIFY</a></div><div class="ttdeci">#define FORMAT_FLAG_LEFT_JUSTIFY</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00068">SEGGER_RTT_printf.c:68</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html_a65faff93dba548785741e95b5bd4e5b7"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html#a65faff93dba548785741e95b5bd4e5b7">SEGGER_RTT_PRINTF_DESC::Cnt</a></div><div class="ttdeci">unsigned Cnt</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00088">SEGGER_RTT_printf.c:88</a></div></div>
<div class="ttc" id="aSEGGER__RTT__Conf_8h_html_a077a1988b454a012aeafa0f7f0a63c95"><div class="ttname"><a href="SEGGER__RTT__Conf_8h.html#a077a1988b454a012aeafa0f7f0a63c95">SEGGER_RTT_PRINTF_BUFFER_SIZE</a></div><div class="ttdeci">#define SEGGER_RTT_PRINTF_BUFFER_SIZE</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__Conf_8h_source.html#l00098">SEGGER_RTT_Conf.h:98</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html">SEGGER_RTT_PRINTF_DESC</a></div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00080">SEGGER_RTT_printf.c:80</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_ad778ec441def4e07c9f153470d9b3aaa"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#ad778ec441def4e07c9f153470d9b3aaa">FORMAT_FLAG_ALTERNATE</a></div><div class="ttdeci">#define FORMAT_FLAG_ALTERNATE</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00071">SEGGER_RTT_printf.c:71</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_acccd380b32c202ab9aac750aae8a62ab"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#acccd380b32c202ab9aac750aae8a62ab">FORMAT_FLAG_PAD_ZERO</a></div><div class="ttdeci">#define FORMAT_FLAG_PAD_ZERO</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00069">SEGGER_RTT_printf.c:69</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_af3b81398913b7f7df425208067caab38"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#af3b81398913b7f7df425208067caab38">SEGGER_RTT_vprintf</a></div><div class="ttdeci">int SEGGER_RTT_vprintf(unsigned BufferIndex, const char *sFormat, va_list *pParamList)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00317">SEGGER_RTT_printf.c:317</a></div></div>
<div class="ttc" id="aSEGGER__RTT_8c_html_a491a86b2cc2d8cd9a475710624f17cc6"><div class="ttname"><a href="SEGGER__RTT_8c.html#a491a86b2cc2d8cd9a475710624f17cc6">SEGGER_RTT_Write</a></div><div class="ttdeci">unsigned SEGGER_RTT_Write(unsigned BufferIndex, const void *pBuffer, unsigned NumBytes)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT_8c_source.html#l01185">SEGGER_RTT.c:1185</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html_a26ff82b7970c500bb29f098cf49dd065"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html#a26ff82b7970c500bb29f098cf49dd065">SEGGER_RTT_PRINTF_DESC::BufferSize</a></div><div class="ttdeci">unsigned BufferSize</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00087">SEGGER_RTT_printf.c:87</a></div></div>
<div class="ttc" id="aSEGGER__RTT__printf_8c_html_aadf842d5880650ed055cde1624c06d5a"><div class="ttname"><a href="SEGGER__RTT__printf_8c.html#aadf842d5880650ed055cde1624c06d5a">_PrintUnsigned</a></div><div class="ttdeci">static void _PrintUnsigned(SEGGER_RTT_PRINTF_DESC *pBufferDesc, unsigned v, unsigned Base, unsigned NumDigits, unsigned FieldWidth, unsigned FormatFlags)</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00132">SEGGER_RTT_printf.c:132</a></div></div>
<div class="ttc" id="aSEGGER__RTT_8h_html"><div class="ttname"><a href="SEGGER__RTT_8h.html">SEGGER_RTT.h</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html_ab8724b23ebf34566d69eb6ed4a0b374e"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html#ab8724b23ebf34566d69eb6ed4a0b374e">SEGGER_RTT_PRINTF_DESC::pBuffer</a></div><div class="ttdeci">char * pBuffer</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00086">SEGGER_RTT_printf.c:86</a></div></div>
<div class="ttc" id="astructSEGGER__RTT__PRINTF__DESC_html_a04a163688303b84088292b87423845ec"><div class="ttname"><a href="structSEGGER__RTT__PRINTF__DESC.html#a04a163688303b84088292b87423845ec">SEGGER_RTT_PRINTF_DESC::ReturnValue</a></div><div class="ttdeci">int ReturnValue</div><div class="ttdef"><b>Definition:</b> <a href="SEGGER__RTT__printf_8c_source.html#l00090">SEGGER_RTT_printf.c:90</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_4e5f16ccb0512908371dae1ef268cc7e.html">STM32F103C8T6_powermeter-interface</a></li><li class="navelem"><a class="el" href="dir_4a957a805603a308ca7ef702854b01cc.html">Drivers</a></li><li class="navelem"><a class="el" href="dir_2f93a1c982b4b342d3e3419801723bd0.html">RTT</a></li><li class="navelem"><a class="el" href="SEGGER__RTT__printf_8c.html">SEGGER_RTT_printf.c</a></li>
<li class="footer">Generated on Mon Dec 13 2021 16:18:48 for DIY Logging Volt/Ampmeter by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>