This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

array problem

Hi all

I've a array located at code segment named

StandardModeType is a struct has some integer values

StandardModeType code StandardModeTable_rc7_17[]={
...
}

I want to creat a pointer in xdata and I want to creat a poiter to access them using

StandardModeType code *xdata StandardModeTable_rc7[];


altough my variable show the right place at code memory, when I try to display values for these variable two different values exist.
StandardModeTable_rc7[0]->StdVFreq
StandardModeTable_rc7_17[0].StdVFreq

what can cause this problem? Any idea.

Parents Reply Children
  • Here..

    StandardModeType code StandardModeTable_rc7_17[]={
      ...
      /* you put data in here */
    }
    

    .. you define the array size by filling it with data. Say you put 5 values in it and the array will have 5 elements (index 0 to 4).

    After that you create an array of pointers:

    StandardModeType code *xdata StandardModeTable_rc7[];
    

    This array (of pointers) has no size specified. It should have at least the same size as StandardModeTable_rc7_17. Now you're just writing to undefined memory.

    So... Put a number between [ and ].

  • Hi,

    Just an aside, but apart from initialising 'initialisingStandardModeTable_rc7[]' do you ever modify the addresses stored in this array?.
    If no then why not remove this array altogether?

    Mark

  • I defined variable like the following

    StandardModeType code *xdata StandardModeTable_rc7[32];

    so it has a finite dimension

    and I can see that each member show the right code space address but the values for these the same address differs.

    following are What I see from emulator

    StandardModeTable_rc7[0]: struct STANDARDMODESTRUCT *  &Code:2EFAH
    
    &StandardModeTable_rc7_17[0]: 2EFAH
    


    StandardModeTable_rc7[0]->Some!=StandardModeTable_rc7_17[0].Some

  • This may be too obvious a question, but you don't have a banked application, do you? If so, then if your code table isn't located in an unbanked area or copied to every page, this problem could ensue.

  • I've a banked applicatio 4 banks, and I described problem more detail with a new thread today titled array and banking

    thx

  • Mustafa,

    That thread doesn't appear for me yet, but I suspect I know the cause of your problem now. You're looking at values with your pointer when the wrong code bank is selected. If you want this sort of thing to work automatically without your managing the code pages manually, you'll need to use the LX51 linker and create far pointers so that the data can be fetched from the proper code page.