<?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>S12 / MagniV Microcontrollers中的主题 Re: Label Addressing in HCS12</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127212#M650</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I am not quite sure what you are trying to achieve, but I wonder if an array of function pointers might work.&amp;nbsp; In the following example, three functions are defined, that each require an int argument.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;/* Define 3-element array of function pointers */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void (*pfunc[3])(int) = {funcA,&amp;nbsp;funcB, funcC};&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcA (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcB (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcC (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;(pfunc[0])(3);&amp;nbsp; // Call funcA(3);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;(pfunc[2])(0);&amp;nbsp; // Call funcC(0);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 21 Mar 2007 20:58:07 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2007-03-21T20:58:07Z</dc:date>
    <item>
      <title>Label Addressing in HCS12</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127210#M648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hello,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am working on an autonomous robot for a university robotics club.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to program a system that periodically interrupts and performs a different action from a sequential list of instructions. I've done this before using pure assembly with the P&amp;amp;E WinIDE on the same chip, so it shouldn't be too difficult in Codewarrior, but it has been. I can't seem to find a way to load a label into a variable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I've tried using something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void *address = &amp;amp;&amp;amp;Label_1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but CodeWarrior does not seem to recognize &amp;amp;&amp;amp;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried using inline assembly to mark off each label using something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__asm Label_1: ; // define a label&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__asm LDD #Label_1; //load the address of the label into accumulator D&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;but Codewarrior gives me an error saying that Label Addressing mode is not supported!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So if someone knows how to make one of these methods work, that would be great. Or, if you know of a fast alternative (does not use many cpu cycles since this is a fairly short periodic timer interrupt), please let me know.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is an idea of the actions I want to take place:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[In init, define a label variable with the address of init]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Interrupt occurs]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[goto/BRA to the label]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Init: // perform any initialization that only occurs on first interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Load Step1 address into variable] - This is where the problem occurs&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Return from Interrupt]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Step1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Load Step1 into variable] - problem again&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Return from Interrupt]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Step2: // Assume this is the last step&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Load Step1 into variable to start sequence all over] - problem again&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[Return from Interrupt]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Notice that this method does not need to perform ANY checks after the interrupt,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;it simply performs a goto/BRA, and starts into that stage of execution.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for any help you can provide with this!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Mar 2007 01:20:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127210#M648</guid>
      <dc:creator>WEbots</dc:creator>
      <dc:date>2007-03-21T01:20:02Z</dc:date>
    </item>
    <item>
      <title>Re: Label Addressing in HCS12</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127211#M649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;This is really a C programming question rather than anything to do with the S12, so you may have more luck in the CodeWarrior forum.&lt;/DIV&gt;&lt;DIV&gt;Goto is regarded as "infinitely abusable" and "never necessary" by the creators of C so you should avoid using this approach if possible.&lt;/DIV&gt;&lt;DIV&gt;If you have a finite set of labels you can simply store the function number in a variable and call the relevant function using a switch statement. Alternatively, you can pass a pointer to the function you want but that is adding a lot of complexity that probably isn't necessary here.&lt;/DIV&gt;&lt;DIV&gt;If the initialisation is known at compile time you can just use macros to select the appropriate function.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Mar 2007 17:51:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127211#M649</guid>
      <dc:creator>Steve</dc:creator>
      <dc:date>2007-03-21T17:51:09Z</dc:date>
    </item>
    <item>
      <title>Re: Label Addressing in HCS12</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127212#M650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I am not quite sure what you are trying to achieve, but I wonder if an array of function pointers might work.&amp;nbsp; In the following example, three functions are defined, that each require an int argument.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;/* Define 3-element array of function pointers */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void (*pfunc[3])(int) = {funcA,&amp;nbsp;funcB, funcC};&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcA (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcB (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void funcC (int)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;(pfunc[0])(3);&amp;nbsp; // Call funcA(3);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;(pfunc[2])(0);&amp;nbsp; // Call funcC(0);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 21 Mar 2007 20:58:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Label-Addressing-in-HCS12/m-p/127212#M650</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-03-21T20:58:07Z</dc:date>
    </item>
  </channel>
</rss>

