<?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>topic Function pointer / callback function serial communication in CodeWarrior for MCU</title>
    <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198874#M7423</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello everyone&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since a few weeks i start to do programming &amp;nbsp;for freescale MCU's ( i use MC9S08AW ) .&amp;nbsp;&lt;/P&gt;&lt;P&gt;About 15 years ago i did some C/C++ programming under a MS-DOS enviroment and then switch to windows programming using Delphi. I still know C but pointers stuff is very far in my head.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to make a general communication library that I can use in all my projects. The freescale specific stuff is working. I can send and receive data from the SCI but I can't manage to get working the callback function. The function is called but the parameters contain rubish data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is what I have done, sorry for the long post.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- define my callback&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;typedef void (*com_callback)(const unsigned int iReceived);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare internal callback ( comm-lib.c )&lt;/P&gt;&lt;P&gt;volatile static com_callback ReceivedData;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- create function to assign call back&amp;nbsp;&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;void uart_setcallback( void (*my_callback )(const unsigned int iReceived) );&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare my call back ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- and it implementation ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;if ( iReceived == 2 )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- assign the callback ( main.c )&lt;/P&gt;&lt;P&gt;uart_setcallback ( *com_binnen );&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When compiling i get a warning "&lt;A target="_blank"&gt;&lt;/A&gt;Indirection to different types .................." but its compiling.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Can any one help me with what i'm doing wrong&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Peter&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 14 Jul 2009 14:17:30 GMT</pubDate>
    <dc:creator>Peverix</dc:creator>
    <dc:date>2009-07-14T14:17:30Z</dc:date>
    <item>
      <title>Function pointer / callback function serial communication</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198874#M7423</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello everyone&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since a few weeks i start to do programming &amp;nbsp;for freescale MCU's ( i use MC9S08AW ) .&amp;nbsp;&lt;/P&gt;&lt;P&gt;About 15 years ago i did some C/C++ programming under a MS-DOS enviroment and then switch to windows programming using Delphi. I still know C but pointers stuff is very far in my head.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to make a general communication library that I can use in all my projects. The freescale specific stuff is working. I can send and receive data from the SCI but I can't manage to get working the callback function. The function is called but the parameters contain rubish data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is what I have done, sorry for the long post.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- define my callback&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;typedef void (*com_callback)(const unsigned int iReceived);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare internal callback ( comm-lib.c )&lt;/P&gt;&lt;P&gt;volatile static com_callback ReceivedData;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- create function to assign call back&amp;nbsp;&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;void uart_setcallback( void (*my_callback )(const unsigned int iReceived) );&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare my call back ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- and it implementation ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;if ( iReceived == 2 )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- assign the callback ( main.c )&lt;/P&gt;&lt;P&gt;uart_setcallback ( *com_binnen );&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When compiling i get a warning "&lt;A target="_blank"&gt;&lt;/A&gt;Indirection to different types .................." but its compiling.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Can any one help me with what i'm doing wrong&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Peter&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2009 14:17:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198874#M7423</guid>
      <dc:creator>Peverix</dc:creator>
      <dc:date>2009-07-14T14:17:30Z</dc:date>
    </item>
    <item>
      <title>Re: Function pointer / callback function serial communication</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198875#M7424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;P&gt;- define my callback&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;typedef void (*com_callback)(const unsigned int iReceived);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;const in parameter list is bit odd.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare internal callback ( comm-lib.c )&lt;/P&gt;&lt;P&gt;volatile static com_callback ReceivedData;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;To be more precise, you not declare callback ^^ here, but define variable ReceivedData, which is a pointer to your callback routine.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;- create function to assign call back&amp;nbsp;&amp;nbsp;( comm-lib.c )&lt;/P&gt;&lt;P&gt;void uart_setcallback( void (*my_callback )(const unsigned int iReceived) );&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;You typedefed com_callback. You may retype this ^^&amp;nbsp;line&amp;nbsp;simpler&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void uart_setcallback( com_callback&amp;nbsp;my_callback);&amp;nbsp;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- declare my call back ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;You declared ^^ here function com_binnen returning pointer to callback routine.&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- and it implementation ( main.c )&lt;/P&gt;&lt;P&gt;com_callback com_binnen ( const unsigned int iReceived )&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;if ( iReceived == 2 )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- assign the callback ( main.c )&lt;/P&gt;&lt;P&gt;uart_setcallback ( *com_binnen );&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When compiling i get a warning "&lt;A target="_blank"&gt;&lt;/A&gt;Indirection to different types .................." but its compiling.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Can any one help me with what i'm doing wrong&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;A target="_blank"&gt;&lt;/A&gt;Peter&amp;nbsp;&lt;/P&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;// define type com_callback, that&amp;nbsp;will be a&amp;nbsp;pointer to callback routine&amp;nbsp;with following characteristics:&lt;/P&gt;&lt;P&gt;//&amp;nbsp; return type - void&lt;/P&gt;&lt;P&gt;//&amp;nbsp; arguments - unsigned int&lt;/P&gt;&lt;P&gt;typedef void (*com_callback)(unsigned int iReceived);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//Define callback function foo1&lt;/P&gt;&lt;P&gt;void foo1(unsigned int i)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//Define callback function foo2&lt;/P&gt;&lt;P&gt;void foo2(unsigned int i)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//Define pointer to callback routine, coult be static, volatile and combinations&lt;/P&gt;&lt;P&gt;com_callback Callback;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;// routine&amp;nbsp;to set Callback variable&amp;nbsp;&lt;/P&gt;&lt;P&gt;void SetCallback(com_callback cb)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Callback = cb;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void test(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set Callback directly&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Callback = foo1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // call Callback&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Callback(123);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set Callback using SetCallback&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetCallback(foo1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetCallback(foo2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // call Callback&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Callback(123);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2009 15:15:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198875#M7424</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2009-07-14T15:15:52Z</dc:date>
    </item>
    <item>
      <title>Re: Function pointer / callback function serial communication</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198876#M7425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you already for you clear explination about function pointers.&lt;/P&gt;&lt;P&gt;Now I start to understand how it is working again and why i was gettng the compiler warning. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How ever even when i try you simple example , it is going wrong.&lt;/P&gt;&lt;P&gt;When debugging and calling CallBack(123) it jumps to the foo1 or foo2 function but the local variable i doesn't have the right value 123 but some rubush value.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Maybe it have someting to do with the order the values or put on the stack.&lt;/P&gt;&lt;P&gt;I remember from before you have cdcecl and pascal ( but this is windows i don't know if this also exists with freescale ).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Peter&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2009 16:03:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198876#M7425</guid>
      <dc:creator>Peverix</dc:creator>
      <dc:date>2009-07-14T16:03:42Z</dc:date>
    </item>
    <item>
      <title>Re: Function pointer / callback function serial communication</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198877#M7426</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Do you mean debugger shows worng i value? Because I just tried my example.&amp;nbsp;To check code is working, I defined static int varible and made callbacks writing their argument to this static variable. Code&amp;nbsp;works properly, but while in&amp;nbsp;callback, debugger shows odd argument values.&lt;/P&gt;&lt;P&gt;In CW for HCS08, functions receive single int argument in HX pair. Check if contents of HX pair is correct or not.&amp;nbsp;It is the most easiest for debugger to inspect variables when variables are stored in RAM. In cases when store to RAM is optimized out, you may have problems inspecting your variables...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2009 18:31:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198877#M7426</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2009-07-14T18:31:14Z</dc:date>
    </item>
    <item>
      <title>Re: Function pointer / callback function serial communication</title>
      <link>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198878#M7427</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks again men, indeed it was only a debugger problem showing odd values for i.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When i declare static variable and fill in this it is working.&lt;/P&gt;&lt;P&gt;I was looking 1,5 day for a problem that wasn't one. But I learned much again those day .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 14 Jul 2009 18:40:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/CodeWarrior-for-MCU/Function-pointer-callback-function-serial-communication/m-p/198878#M7427</guid>
      <dc:creator>Peverix</dc:creator>
      <dc:date>2009-07-14T18:40:35Z</dc:date>
    </item>
  </channel>
</rss>

