<?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 Re: Using array of functions in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138170#M4889</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;
#pragma CONST_SEG __FAR_SEG ROM_TABLES MyConst
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;What's ROM_TABLES? Maybe some preprocessor magic, maybe some bug in your code.&lt;BR /&gt;Check that you don't get any warnings about illegal pragmas.&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 29 Nov 2006 02:33:10 GMT</pubDate>
    <dc:creator>CompilerGuru</dc:creator>
    <dc:date>2006-11-29T02:33:10Z</dc:date>
    <item>
      <title>Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138162#M4881</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I've created a function pointer&amp;nbsp;array in FLASH&amp;nbsp;as follows:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#pragma CONST_SEG ROM_TABLES MyConst&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;typedef void (* FunctionType)(void);&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;const FunctionType jumptable[64] = {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;mstate_00,&amp;nbsp; mstate_01,&amp;nbsp; mstate_02,&amp;nbsp;...&amp;nbsp;&amp;nbsp;mstate_63 };&amp;nbsp;&amp;nbsp;// states 00-63&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;I'm calling the funcition as follows:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(*jumptable[mstate])();&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;and the compiler is generating:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;4349:&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;(*jumptable[mstate])();&amp;nbsp;// got to the appropriate subroutine&lt;BR /&gt;&amp;nbsp;01c0 be00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; mstate&lt;BR /&gt;&amp;nbsp;01c2 58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSLX&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c3 8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLRH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c4 &lt;SPAN style="color: #ff0000;"&gt;e600&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDA&amp;nbsp;&amp;nbsp; @jumptable,X&lt;BR /&gt;&amp;nbsp;01c6 &lt;SPAN style="color: #ff0000;"&gt;ee01&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; @jumptable:1,X&lt;BR /&gt;&amp;nbsp;01c8 87&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHA&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c9 8a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PULH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01ca fd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSR&amp;nbsp;&amp;nbsp; ,X&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This causes a link error because it's generating the indexed 8-bit offset loads (&lt;SPAN style="color: #ff0000;"&gt;e600&lt;/SPAN&gt; &amp;amp; &lt;SPAN style="color: #ff0000;"&gt;ee00&lt;/SPAN&gt;)&amp;nbsp;rather than the indexed 16-bit offset loads (&lt;SPAN style="color: #ff0000;"&gt;d60000&lt;/SPAN&gt; &amp;amp;&amp;nbsp;&lt;SPAN style="color: #ff0000;"&gt;de0000&lt;/SPAN&gt;)&amp;nbsp;I need.&amp;nbsp; How do I convince the compiler it must treat jumptable as a "far" entity?&amp;nbsp; I've tried adding the "far" qualifier without success.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;BR /&gt;Carlos&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 00:05:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138162#M4881</guid>
      <dc:creator>CJH</dc:creator>
      <dc:date>2006-11-29T00:05:24Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138163#M4882</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;How did you declare all the 'mstate_xx' stuff?&lt;BR /&gt;&lt;BR /&gt;You should have something like 64 functions of the form 'void mstate_xx(void) {}', right? Which confuses me... why did your program even compile, the heck with the linking! A statement in which *jumptable[mstate_xx] appears should have croaked, you're feeding a pointer into an index [] field. Unless you have all kinds of warnings/errors disabled...&lt;BR /&gt;&lt;BR /&gt;Al&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 00:35:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138163#M4882</guid>
      <dc:creator>Geezer</dc:creator>
      <dc:date>2006-11-29T00:35:03Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138164#M4883</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Al,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Yes, the&amp;nbsp;functions are declared like:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void mstate_00(void) { ... }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I think you're mistaking the "mstate_xx()" functions with a byte variable "mstate" which I'm using in the function call:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;( * jumptable [ mstate ]) ( );&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;Carlos&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 00:47:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138164#M4883</guid>
      <dc:creator>CJH</dc:creator>
      <dc:date>2006-11-29T00:47:07Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138165#M4884</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Absolutely right, I got your names confused. Sorry.&lt;BR /&gt;&lt;BR /&gt;VOID x_0(void);&lt;BR /&gt;VOID x_1(void);&lt;BR /&gt;VOID x_2(void);&lt;BR /&gt;&lt;BR /&gt;#pragma CONST_SEG ROM&lt;BR /&gt;typedef void (* FunctionType)(void);&lt;BR /&gt;const FunctionType jumptable[64] = {&lt;BR /&gt;x_0, x_1, x_2}; // states 00-63&lt;BR /&gt;&lt;BR /&gt;VOID x_0(void)&lt;BR /&gt;{ ERROR_NUM = 0;&lt;BR /&gt;}&lt;BR /&gt;VOID x_1(void)&lt;BR /&gt;{ERROR_NUM = 1;&lt;BR /&gt;}&lt;BR /&gt;VOID x_2(void)&lt;BR /&gt;{ERROR_NUM = 2;&lt;BR /&gt;}&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;VOID main(VOID) {&lt;BR /&gt;&lt;BR /&gt;(*jumptable[1])();&lt;BR /&gt;&lt;BR /&gt;GENERATES THE FOLLOWING ASM (CW5, GT32A):&lt;BR /&gt;&lt;BR /&gt;58: (*jumptable[1])();&lt;BR /&gt;0009 320002 [5] LDHX jumptable:2&lt;BR /&gt;000c fd [5] JSR ,X&lt;BR /&gt;&lt;BR /&gt;It sims just fine. Don't know what else to say.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 00:57:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138165#M4884</guid>
      <dc:creator>Geezer</dc:creator>
      <dc:date>2006-11-29T00:57:50Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138166#M4885</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;OK - I figured out the difference.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I copied your code and compiled and got&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;30:&amp;nbsp; (*jumptable[1])();&lt;BR /&gt;&amp;nbsp;0003 5502&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDHX&amp;nbsp; jumptable:2&lt;BR /&gt;&amp;nbsp;0005 fd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSR&amp;nbsp;&amp;nbsp; ,X&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Apparently, the difference is that I have selected the TINY memory model, while you had the SMALL model.&amp;nbsp; When I change to SMALL, I do get&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;37:&amp;nbsp; (*jumptable[1])();&lt;BR /&gt;&amp;nbsp;0012 ce0002&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; jumptable:2&lt;BR /&gt;&amp;nbsp;0015 89&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHX&amp;nbsp;&lt;BR /&gt;&amp;nbsp;0016 8a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PULH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;0017 ce0003&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; jumptable:3&lt;BR /&gt;&amp;nbsp;001a fd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSR&amp;nbsp;&amp;nbsp; ,X&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;which is what I want.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This is what I find in the help file under "TINY memory model":&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;P&gt;&lt;FONT color="#3333CC"&gt;In the TINY memory model, all data including stack must fit into the zero page. Data pointers are assumed to have 8-bit addresses if not explicitly specified with the keyword __far. The code address space is still 64 kB and function pointers are still 16-bit large. The TINY memory model is selected with the -Mt compiler option.&lt;/FONT&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;DIV&gt;Can't I force the 16-bit address for array jumptable?&amp;nbsp; I haven't figured out how, but I would think I should be able to...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Otherwise, I'll have to figure out what other effects changing to "SMALL" would have on the rest of my code.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Carlos&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:17:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138166#M4885</guid>
      <dc:creator>CJH</dc:creator>
      <dc:date>2006-11-29T02:17:08Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138167#M4886</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Which memory model are you using?&lt;BR /&gt;In the tiny, far (this includes flash) objects have to be explicitly declared as such as the default access size is direct.&lt;BR /&gt;This is done by using the __FAR_SEG qualifier in the #pragma&lt;BR /&gt;&lt;BR /&gt;#pragma CONST_SEG __FAR_SEG ROM&lt;BR /&gt;...&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:17:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138167#M4886</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2006-11-29T02:17:50Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138168#M4887</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Daniel,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Yes, I'm using the TINY model, and I've added the __FAR_SEG qualifier to my #pragma:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#pragma CONST_SEG __FAR_SEG ROM_TABLES MyConst&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;I'm still getting the result:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;01c0 be00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; mstate&lt;BR /&gt;&amp;nbsp;01c2 58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSLX&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c3 8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLRH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c4 e600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDA&amp;nbsp;&amp;nbsp; @jumptable,X&lt;BR /&gt;&amp;nbsp;01c6 ee01&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; @jumptable:1,X&lt;BR /&gt;&amp;nbsp;01c8 87&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHA&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c9 8a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PULH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01ca fd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSR&amp;nbsp;&amp;nbsp; ,X&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;BR /&gt;Carlos&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:24:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138168#M4887</guid>
      <dc:creator>CJH</dc:creator>
      <dc:date>2006-11-29T02:24:05Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138169#M4888</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Strange, it works for me.&lt;BR /&gt;&lt;BR /&gt;&lt;PRE&gt;
ANSI-C/cC++ Compiler for HC08 V-5.0.21 Build 6124, May  5 2006

    1:  #include "hidef.h"
    2:  #include "derivative.h"
    3: 
    4:  char index;
    5:  #pragma CONST_SEG __FAR_SEG ROM
    6:  typedef void (* FunctionType)(void);
    7:  const FunctionType jumptable[64];
    8: 
    9:  void main(void) {

Function: main
Source  : main.c
Options : ... -Mt

   10:    jumptable[index]();
  0000 be00     [3]             LDX   index
  0002 58       [1]             LSLX 
  0003 8c       [1]             CLRH 
  0004 d60000   [4]             LDA   @jumptable,X
  0007 de0001   [4]             LDX   @jumptable:1,X
  000a 87       [2]             PSHA 
  000b 8a       [2]             PULH 
  000c fc       [2]             JMP   ,X
   11:  }
   12: 
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:31:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138169#M4888</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2006-11-29T02:31:18Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138170#M4889</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;
#pragma CONST_SEG __FAR_SEG ROM_TABLES MyConst
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;What's ROM_TABLES? Maybe some preprocessor magic, maybe some bug in your code.&lt;BR /&gt;Check that you don't get any warnings about illegal pragmas.&lt;BR /&gt;&lt;BR /&gt;Daniel&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:33:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138170#M4889</guid>
      <dc:creator>CompilerGuru</dc:creator>
      <dc:date>2006-11-29T02:33:10Z</dc:date>
    </item>
    <item>
      <title>Re: Using array of functions</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138171#M4890</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Daniel,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You're right, I was getting an error for the #pragma - it scrolled off the window and I hadn't noticed it.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I've changed it to&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#pragma CONST_SEG __FAR_SEG MyConst&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;and now it no longer generates an error, and it also works right!&amp;nbsp; I get:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;4349:&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;(*jumptable[mstate])();&amp;nbsp;// got to the appropriate subroutine&lt;BR /&gt;&amp;nbsp;01c0 be00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [3]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; mstate&lt;BR /&gt;&amp;nbsp;01c2 58&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LSLX&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c3 8c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLRH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01c4 d60000&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDA&amp;nbsp;&amp;nbsp; @jumptable,X&lt;BR /&gt;&amp;nbsp;01c7 de0001&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; @jumptable:1,X&lt;BR /&gt;&amp;nbsp;01ca 87&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PSHA&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01cb 8a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [2]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PULH&amp;nbsp;&lt;BR /&gt;&amp;nbsp;01cc fd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [4]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JSR&amp;nbsp;&amp;nbsp; ,X&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;ROM_TABLES is a "SECTION" in my .PRM file that I've defined to keep the data areas separate from the code, but that name did not belong in the #pragma.&amp;nbsp; I have a line in the .PRM&amp;nbsp;that says:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;PLACEMENT&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;MyConst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; ROM_TABLES;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Guess I was confused on the syntax of the #pragma.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks to all for the help!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Carlos&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 29 Nov 2006 02:45:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Using-array-of-functions/m-p/138171#M4890</guid>
      <dc:creator>CJH</dc:creator>
      <dc:date>2006-11-29T02:45:16Z</dc:date>
    </item>
  </channel>
</rss>

