<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>ColdFire/68K Microcontrollers and Processorsのトピックparameter passing to sprintf</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/parameter-passing-to-sprintf/m-p/135888#M1720</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;I'm writing for the MCF5407 on CW6.2.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I need to write a wrapper around sprintf that has the same syntax as sprintf but with an additional parameter.&amp;nbsp; My&amp;nbsp;funtcion will strip out the new parameter for processing, but needs to pass the remaining params to sprintf.&amp;nbsp; My new function needs to have the same syntax as sprintf with the addition of the new param.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My problem has been with handling the value list which follows the format string.&amp;nbsp; Does anyone have any tricks to pass along for doing this?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here is a skeleton of what I am trying to do:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;int dprintf(int flag, char* fmt, ... )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern char global_string[];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// process flag&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sprintf(global_string, fmt, ... );&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I tried doing some pointer math against fmt, giving me a pointer to the next argument in the dprintf list:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;asm int&lt;BR /&gt;dprintf(int flag, const char *fmt, ... )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;char *&amp;nbsp;ap;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern char OUTSTR[];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;if((flag &amp;amp; 0x01) == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;ap = (char*) ((char *)&amp;amp;fmt + sizeof(fmt));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return sprintf(OUTSTR, fmt, ap);&lt;BR /&gt;}&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;However, sprintf simply processed the pointer as the first value for the fmt string.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Joe&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 13 May 2006 04:33:00 GMT</pubDate>
    <dc:creator>nanoGeek</dc:creator>
    <dc:date>2006-05-13T04:33:00Z</dc:date>
    <item>
      <title>parameter passing to sprintf</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/parameter-passing-to-sprintf/m-p/135888#M1720</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;I'm writing for the MCF5407 on CW6.2.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I need to write a wrapper around sprintf that has the same syntax as sprintf but with an additional parameter.&amp;nbsp; My&amp;nbsp;funtcion will strip out the new parameter for processing, but needs to pass the remaining params to sprintf.&amp;nbsp; My new function needs to have the same syntax as sprintf with the addition of the new param.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My problem has been with handling the value list which follows the format string.&amp;nbsp; Does anyone have any tricks to pass along for doing this?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here is a skeleton of what I am trying to do:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;int dprintf(int flag, char* fmt, ... )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern char global_string[];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// process flag&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return sprintf(global_string, fmt, ... );&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I tried doing some pointer math against fmt, giving me a pointer to the next argument in the dprintf list:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;asm int&lt;BR /&gt;dprintf(int flag, const char *fmt, ... )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;char *&amp;nbsp;ap;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;extern char OUTSTR[];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;if((flag &amp;amp; 0x01) == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: 'Courier New';"&gt;&amp;nbsp;&amp;nbsp;ap = (char*) ((char *)&amp;amp;fmt + sizeof(fmt));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return sprintf(OUTSTR, fmt, ap);&lt;BR /&gt;}&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;However, sprintf simply processed the pointer as the first value for the fmt string.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Joe&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 May 2006 04:33:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/parameter-passing-to-sprintf/m-p/135888#M1720</guid>
      <dc:creator>nanoGeek</dc:creator>
      <dc:date>2006-05-13T04:33:00Z</dc:date>
    </item>
    <item>
      <title>Re: parameter passing to sprintf</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/parameter-passing-to-sprintf/m-p/135889#M1721</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;You should be using&amp;nbsp;the helpers in&amp;nbsp;stdarg.h&amp;nbsp;to access&amp;nbsp;these&amp;nbsp;arguments. Instead of calling sprintf you will need to call vsprintf. sprintf actually ends up calling vsprintf. This should all be covered in any good book on C.&lt;/P&gt;&lt;P&gt;Note that pointer arithmetic is a no-no in this case as some of the arguments may be passed in registers. The way the arguments are passed can be compiler specific and might change based on compile time options, especially options that effect the optimizations.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 13 May 2006 07:48:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/parameter-passing-to-sprintf/m-p/135889#M1721</guid>
      <dc:creator>zkwayne</dc:creator>
      <dc:date>2006-05-13T07:48:36Z</dc:date>
    </item>
  </channel>
</rss>

