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

how to use function pointer array???

Hi All

I have use function pointer array like this

main.c
uchar i;
for(i = 0;i<END_COMMAND;i++)
printf("%bu %x\n",i,Func_table[i]);

cmd.h

typedef void (*Func) (void);
void init_func(void);
void reset_func(void);
void end_command(void);

cmd.c

Func Func_Table[] =
{
init_func,
reset_func,
end_command
}

void init_func(void){DO_SOMETHING}
void reset_func(void){DO_SOMETHING}
void end_command(void){DO_SOMETHING}

When I run in Keil IDE Debug mode
it can trace into code and print correct
function address (Ex 0 ff00 1 ff10 2 ff20)
,but when I run into flash,all function address is print zero(ex 0 0 1 0 2 0)
so I got reset when use this Func_Table
why??

Thanks a lot

Parents
  • TYPE BASE LENGTH RELOCATION SEGMENT NAME
    -----------------------------------------------------

    * * * * * * * D A T A M E M O R Y * * * * * * *
    REG 0000H 0008H ABSOLUTE "REG BANK 0"
    DATA 0008H 0005H UNIT _DATA_GROUP_
    000DH 0013H *** GAP ***
    BIT 0020H.0 0001H.1 UNIT _BIT_GROUP_
    0021H.1 0000H.7 *** GAP ***
    IDATA 0022H 0001H UNIT ?STACK

    * * * * * * * X D A T A M E M O R Y * * * * * * *
    XDATA 0000H 009CH UNIT ?XD?MPG450
    XDATA 009CH 0028H UNIT _XDATA_GROUP_
    XDATA 00C4H 0019H UNIT ?XD?_RS232_PROCESS?DEBUG
    XDATA 00DDH 0009H UNIT ?XD?_DMA_TASK_SCHEDULER?MPG450
    XDATA 00E6H 0008H UNIT ?XD?DMA_TASK_EXECUTE?MPG450
    XDATA 00EEH 0005H UNIT ?XD?_CHANGE_VIDEO_SIZE?FUNC
    XDATA 00F3H 0003H UNIT ?XD?EXINT1_INT_ROUTINE?MPG450
    XDATA 00F6H 0003H UNIT ?XD?DRAMC_BIST?FUNC
    XDATA 00F9H 0002H UNIT ?XD?SET_CHECKSUM?FUNC
    XDATA 00FBH 0001H UNIT ?XD?CPU_UR0_INIT?CPU_API
    XDATA 00FCH 0001H UNIT ?XD?_PDMAC_START?MPG450
    XDATA 00FDH 0001H UNIT ?XD?MAIN?MPG450
    XDATA 00FEH 0001H UNIT ?XD?RS232_INPUT?DEBUG
    BL51 BANKED LINKER/LOCATER V5.03 07/27/2005 10:38:22 PAGE 2


    XDATA 00FFH 0001H UNIT ?XD?END_COMMAND?USERCMD

    * * * * * * * C O D E M E M O R Y * * * * * * *
    CODE 0000H 0003H ABSOLUTE
    CODE 0003H 000CH UNIT ?PR?SET_CHECKSUM?FUNC
    CODE 000FH 0001H UNIT ?PR?INIT_MPG450?USERCMD
    CODE 0010H 0001H UNIT ?PR?RESET_MPG450?USERCMD
    0011H 0002H *** GAP ***
    CODE 0013H 0003H ABSOLUTE
    CODE 0016H 07CAH UNIT ?PR?_RS232_PROCESS?DEBUG
    CODE 07E0H 07B2H UNIT ?PR?DMA_TASK_EXECUTE?MPG450
    CODE 0F92H 054AH UNIT ?PR?_DMA_TASK_SCHEDULER?MPG450
    CODE 14DCH 0365H UNIT ?PR?PRINTF?PRINTF
    CODE 1841H 023FH UNIT ?CO?DEBUG
    CODE 1A80H 0194H UNIT ?PR?_CHANGE_VIDEO_SIZE?FUNC
    CODE 1C14H 0194H UNIT ?C?LIB_CODE
    CODE 1DA8H 0135H UNIT ?PR?RS232_INPUT?DEBUG
    CODE 1EDDH 010AH UNIT ?PR?WDT_RESET?WDTC
    CODE 1FE7H 00C8H UNIT ?PR?EXINT1_INT_ROUTINE?MPG450
    CODE 20AFH 009AH UNIT ?PR?_PDMAC_START?MPG450
    CODE 2149H 0090H UNIT ?PR?SYSTEM_INIT?MPG450
    CODE 21D9H 008CH UNIT ?C_C51STARTUP
    CODE 2265H 0085H UNIT ?C_INITSEG
    CODE 22EAH 0070H UNIT ?PR?MAIN?MPG450
    CODE 235AH 0043H UNIT ?PR?BUS_READY?FUNC
    CODE 239DH 0041H UNIT ?PR?SHOW_MENU?DEBUG
    CODE 23DEH 0037H UNIT ?PR?DRAMC_BIST?FUNC
    CODE 2415H 0036H UNIT ?PR?WDTC_INIT?WDTC
    CODE 244BH 0034H UNIT ?PR?CPU_RAM_INIT?CPU_API
    CODE 247FH 0032H UNIT ?PR?CPU_UR0_INIT?CPU_API
    CODE 24B1H 0027H UNIT ?PR?PUTCHAR?PUTCHAR
    CODE 24D8H 0026H UNIT ?CO?MPG450
    CODE 24FEH 0026H UNIT ?PR?END_COMMAND?USERCMD
    CODE 2524H 001DH UNIT ?PR?TOINT?TOINT
    CODE 2541H 000AH UNIT ?PR?_GETKEY?_GETKEY
    CODE 254BH 0007H UNIT ?PR?CPU_EXINT1_SET?CPU_API

Reply
  • TYPE BASE LENGTH RELOCATION SEGMENT NAME
    -----------------------------------------------------

    * * * * * * * D A T A M E M O R Y * * * * * * *
    REG 0000H 0008H ABSOLUTE "REG BANK 0"
    DATA 0008H 0005H UNIT _DATA_GROUP_
    000DH 0013H *** GAP ***
    BIT 0020H.0 0001H.1 UNIT _BIT_GROUP_
    0021H.1 0000H.7 *** GAP ***
    IDATA 0022H 0001H UNIT ?STACK

    * * * * * * * X D A T A M E M O R Y * * * * * * *
    XDATA 0000H 009CH UNIT ?XD?MPG450
    XDATA 009CH 0028H UNIT _XDATA_GROUP_
    XDATA 00C4H 0019H UNIT ?XD?_RS232_PROCESS?DEBUG
    XDATA 00DDH 0009H UNIT ?XD?_DMA_TASK_SCHEDULER?MPG450
    XDATA 00E6H 0008H UNIT ?XD?DMA_TASK_EXECUTE?MPG450
    XDATA 00EEH 0005H UNIT ?XD?_CHANGE_VIDEO_SIZE?FUNC
    XDATA 00F3H 0003H UNIT ?XD?EXINT1_INT_ROUTINE?MPG450
    XDATA 00F6H 0003H UNIT ?XD?DRAMC_BIST?FUNC
    XDATA 00F9H 0002H UNIT ?XD?SET_CHECKSUM?FUNC
    XDATA 00FBH 0001H UNIT ?XD?CPU_UR0_INIT?CPU_API
    XDATA 00FCH 0001H UNIT ?XD?_PDMAC_START?MPG450
    XDATA 00FDH 0001H UNIT ?XD?MAIN?MPG450
    XDATA 00FEH 0001H UNIT ?XD?RS232_INPUT?DEBUG
    BL51 BANKED LINKER/LOCATER V5.03 07/27/2005 10:38:22 PAGE 2


    XDATA 00FFH 0001H UNIT ?XD?END_COMMAND?USERCMD

    * * * * * * * C O D E M E M O R Y * * * * * * *
    CODE 0000H 0003H ABSOLUTE
    CODE 0003H 000CH UNIT ?PR?SET_CHECKSUM?FUNC
    CODE 000FH 0001H UNIT ?PR?INIT_MPG450?USERCMD
    CODE 0010H 0001H UNIT ?PR?RESET_MPG450?USERCMD
    0011H 0002H *** GAP ***
    CODE 0013H 0003H ABSOLUTE
    CODE 0016H 07CAH UNIT ?PR?_RS232_PROCESS?DEBUG
    CODE 07E0H 07B2H UNIT ?PR?DMA_TASK_EXECUTE?MPG450
    CODE 0F92H 054AH UNIT ?PR?_DMA_TASK_SCHEDULER?MPG450
    CODE 14DCH 0365H UNIT ?PR?PRINTF?PRINTF
    CODE 1841H 023FH UNIT ?CO?DEBUG
    CODE 1A80H 0194H UNIT ?PR?_CHANGE_VIDEO_SIZE?FUNC
    CODE 1C14H 0194H UNIT ?C?LIB_CODE
    CODE 1DA8H 0135H UNIT ?PR?RS232_INPUT?DEBUG
    CODE 1EDDH 010AH UNIT ?PR?WDT_RESET?WDTC
    CODE 1FE7H 00C8H UNIT ?PR?EXINT1_INT_ROUTINE?MPG450
    CODE 20AFH 009AH UNIT ?PR?_PDMAC_START?MPG450
    CODE 2149H 0090H UNIT ?PR?SYSTEM_INIT?MPG450
    CODE 21D9H 008CH UNIT ?C_C51STARTUP
    CODE 2265H 0085H UNIT ?C_INITSEG
    CODE 22EAH 0070H UNIT ?PR?MAIN?MPG450
    CODE 235AH 0043H UNIT ?PR?BUS_READY?FUNC
    CODE 239DH 0041H UNIT ?PR?SHOW_MENU?DEBUG
    CODE 23DEH 0037H UNIT ?PR?DRAMC_BIST?FUNC
    CODE 2415H 0036H UNIT ?PR?WDTC_INIT?WDTC
    CODE 244BH 0034H UNIT ?PR?CPU_RAM_INIT?CPU_API
    CODE 247FH 0032H UNIT ?PR?CPU_UR0_INIT?CPU_API
    CODE 24B1H 0027H UNIT ?PR?PUTCHAR?PUTCHAR
    CODE 24D8H 0026H UNIT ?CO?MPG450
    CODE 24FEH 0026H UNIT ?PR?END_COMMAND?USERCMD
    CODE 2524H 001DH UNIT ?PR?TOINT?TOINT
    CODE 2541H 000AH UNIT ?PR?_GETKEY?_GETKEY
    CODE 254BH 0007H UNIT ?PR?CPU_EXINT1_SET?CPU_API

Children