📄 rprintf_8c-source.html
字号:
00193 <span class="comment">// uartPrintfNum(16, 6, FALSE, '.', 0x5AA5); --> "..5AA5"</span><a name="l00194"></a><a class="code" href="group__rprintf.html#ga10">00194</a> <span class="keywordtype">void</span> <a class="code" href="group__rprintf.html#ga10">rprintfNum</a>(<span class="keywordtype">char</span> base, <span class="keywordtype">char</span> numDigits, <span class="keywordtype">char</span> isSigned, <span class="keywordtype">char</span> padchar, <span class="keywordtype">long</span> n)00195 {00196 <span class="comment">// define a global HexChars or use line below</span>00197 <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00198 <span class="keywordtype">char</span> *p, buf[32];00199 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> x;00200 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> count;00201 00202 <span class="comment">// prepare negative number</span>00203 <span class="keywordflow">if</span>( isSigned && (n < 0) )00204 {00205 x = -n;00206 }00207 <span class="keywordflow">else</span>00208 {00209 x = n;00210 }00211 00212 <span class="comment">// setup little string buffer</span>00213 count = (numDigits-1)-(isSigned?1:0);00214 p = buf + <span class="keyword">sizeof</span> (buf);00215 *--p = <span class="charliteral">'\0'</span>;00216 00217 <span class="comment">// force calculation of first digit</span>00218 <span class="comment">// (to prevent zero from not printing at all!!!)</span>00219 *--p = hexchar(x%base); x /= base;00220 <span class="comment">// calculate remaining digits</span>00221 <span class="keywordflow">while</span>(count--)00222 {00223 <span class="keywordflow">if</span>(x != 0)00224 {00225 <span class="comment">// calculate next digit</span>00226 *--p = hexchar(x%base); x /= base;00227 }00228 <span class="keywordflow">else</span>00229 {00230 <span class="comment">// no more digits left, pad out to desired length</span>00231 *--p = padchar;00232 }00233 }00234 00235 <span class="comment">// apply signed notation if requested</span>00236 <span class="keywordflow">if</span>( isSigned )00237 {00238 <span class="keywordflow">if</span>(n < 0)00239 {00240 *--p = <span class="charliteral">'-'</span>;00241 }00242 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(n > 0)00243 {00244 *--p = <span class="charliteral">'+'</span>;00245 }00246 <span class="keywordflow">else</span>00247 {00248 *--p = <span class="charliteral">' '</span>;00249 }00250 }00251 00252 <span class="comment">// print the string right-justified</span>00253 count = numDigits;00254 <span class="keywordflow">while</span>(count--)00255 {00256 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(*p++);00257 }00258 }00259 00260 <span class="preprocessor">#ifdef RPRINTF_FLOAT</span>00261 <span class="preprocessor"></span><span class="comment">// *** rprintfFloat ***</span>00262 <span class="comment">// floating-point print</span>00263 <span class="keywordtype">void</span> rprintfFloat(<span class="keywordtype">char</span> numDigits, <span class="keywordtype">double</span> x)00264 {00265 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> firstplace = FALSE;00266 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> negative;00267 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i, digit;00268 <span class="keywordtype">double</span> place = 1.0;00269 00270 <span class="comment">// save sign</span>00271 negative = (x<0);00272 <span class="comment">// convert to absolute value</span>00273 x = (x>0)?(x):(-x);00274 00275 <span class="comment">// find starting digit place</span>00276 <span class="keywordflow">for</span>(i=0; i<15; i++)00277 {00278 <span class="keywordflow">if</span>((x/place) < 10.0)00279 <span class="keywordflow">break</span>;00280 <span class="keywordflow">else</span>00281 place *= 10.0;00282 }00283 <span class="comment">// print polarity character</span>00284 <span class="keywordflow">if</span>(negative)00285 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00286 <span class="keywordflow">else</span>00287 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'+'</span>);00288 00289 <span class="comment">// print digits</span>00290 <span class="keywordflow">for</span>(i=0; i<numDigits; i++)00291 {00292 digit = (x/place);00293 00294 <span class="keywordflow">if</span>(digit | firstplace | (place == 1.0))00295 {00296 firstplace = TRUE;00297 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(digit+0x30);00298 }00299 <span class="keywordflow">else</span>00300 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">' '</span>);00301 00302 <span class="keywordflow">if</span>(place == 1.0)00303 {00304 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'.'</span>);00305 }00306 00307 x -= (digit*place);00308 place /= 10.0;00309 }00310 }00311 <span class="preprocessor">#endif</span>00312 <span class="preprocessor"></span>00313 <span class="preprocessor">#ifdef RPRINTF_SIMPLE</span>00314 <span class="preprocessor"></span><span class="comment">// *** rprintf1RamRom ***</span>00315 <span class="comment">// called by rprintf() - does a simple printf (supports %d, %x, %c)</span>00316 <span class="comment">// Supports:</span>00317 <span class="comment">// %d - decimal</span>00318 <span class="comment">// %x - hex</span>00319 <span class="comment">// %c - character</span><a name="l00320"></a><a class="code" href="group__rprintf.html#ga11">00320</a> <span class="keywordtype">int</span> <a class="code" href="group__rprintf.html#ga11">rprintf1RamRom</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...)00321 {00322 <span class="comment">// simple printf routine</span>00323 <span class="comment">// define a global HexChars or use line below</span>00324 <span class="comment">//static char HexChars[16] = "0123456789ABCDEF";</span>00325 <span class="keywordtype">char</span> format_flag;00326 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> u_val, div_val, base;00327 va_list ap;00328 00329 va_start(ap, format);00330 <span class="keywordflow">for</span> (;;)00331 {00332 <span class="keywordflow">while</span> ((format_flag = READMEMBYTE(stringInRom,format++) ) != <span class="charliteral">'%'</span>)00333 { <span class="comment">// Until '%' or '\0'</span>00334 <span class="keywordflow">if</span> (!format_flag)00335 {00336 va_end(ap);00337 <span class="keywordflow">return</span>(0);00338 }00339 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(format_flag);00340 }00341 00342 <span class="keywordflow">switch</span> (format_flag = READMEMBYTE(stringInRom,format++) )00343 {00344 <span class="keywordflow">case</span> <span class="charliteral">'c'</span>: format_flag = va_arg(ap,<span class="keywordtype">int</span>);00345 <span class="keywordflow">default</span>: <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(format_flag); <span class="keywordflow">continue</span>;00346 <span class="keywordflow">case</span> <span class="charliteral">'d'</span>: base = 10; div_val = 10000; <span class="keywordflow">goto</span> CONVERSION_LOOP;00347 <span class="comment">// case 'x': base = 16; div_val = 0x10;</span>00348 <span class="keywordflow">case</span> <span class="charliteral">'x'</span>: base = 16; div_val = 0x1000;00349 00350 CONVERSION_LOOP:00351 u_val = va_arg(ap,<span class="keywordtype">int</span>);00352 <span class="keywordflow">if</span> (format_flag == <span class="charliteral">'d'</span>)00353 {00354 <span class="keywordflow">if</span> (((<span class="keywordtype">int</span>)u_val) < 0)00355 {00356 u_val = - u_val;00357 <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(<span class="charliteral">'-'</span>);00358 }00359 <span class="keywordflow">while</span> (div_val > 1 && div_val > u_val) div_val /= 10;00360 }00361 <span class="keywordflow">do</span>00362 {00363 <span class="comment">//rprintfChar(pgm_read_byte(HexChars+(u_val/div_val)));</span>00364 <a class="code" href="group__rprintf.html#ga6">rprintfu04</a>(u_val/div_val);00365 u_val %= div_val;00366 div_val /= base;00367 } <span class="keywordflow">while</span> (div_val);00368 }00369 }00370 va_end(ap);00371 }00372 <span class="preprocessor">#endif</span>00373 <span class="preprocessor"></span>00374 00375 <span class="preprocessor">#ifdef RPRINTF_COMPLEX</span>00376 <span class="preprocessor"></span><span class="comment">// *** rprintf2RamRom ***</span>00377 <span class="comment">// called by rprintf() - does a more powerful printf (supports %d, %u, %o, %x, %c, %s)</span>00378 <span class="comment">// Supports:</span>00379 <span class="comment">// %d - decimal</span>00380 <span class="comment">// %u - unsigned decimal</span>00381 <span class="comment">// %o - octal</span>00382 <span class="comment">// %x - hex</span>00383 <span class="comment">// %c - character</span>00384 <span class="comment">// %s - strings</span>00385 <span class="comment">// and the width,precision,padding modifiers</span>00386 <span class="comment">// **this printf does not support floating point numbers</span>00387 <span class="keywordtype">int</span> rprintf2RamRom(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> stringInRom, <span class="keyword">const</span> <span class="keywordtype">char</span> *sfmt, ...)00388 {00389 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *f, *bp;00390 <span class="keyword">register</span> <span class="keywordtype">long</span> l;00391 <span class="keyword">register</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> u;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -