Отговори на тема  [ 5 мнения ] 
масив от указатели към ф-ии в прог. памет 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение масив от указатели към ф-ии в прог. памет
Здравейте,

Имам този масив от указатели към функции:
Код:
static void (*optable[256])() = {   
/*        |  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  A  |  B  |  C  |  D  |  E  |  F  |      */
/* 0 */      brk,  ora,  nop,  slo,  nop,  ora,  asl,  slo,  php,  ora,  asl,  nop,  nop,  ora,  asl,  slo, /* 0 */
/* 1 */      bpl,  ora,  nop,  slo,  nop,  ora,  asl,  slo,  clc,  ora,  nop,  slo,  nop,  ora,  asl,  slo, /* 1 */
/* 2 */      jsr,  and,  nop,  rla,  bit,  and,  rol,  rla,  plp,  and,  rol,  nop,  bit,  and,  rol,  rla, /* 2 */
/* 3 */      bmi,  and,  nop,  rla,  nop,  and,  rol,  rla,  sec,  and,  nop,  rla,  nop,  and,  rol,  rla, /* 3 */
/* 4 */      rti,  eor,  nop,  sre,  nop,  eor,  lsr,  sre,  pha,  eor,  lsr,  nop,  jmp,  eor,  lsr,  sre, /* 4 */
/* 5 */      bvc,  eor,  nop,  sre,  nop,  eor,  lsr,  sre,  cli,  eor,  nop,  sre,  nop,  eor,  lsr,  sre, /* 5 */
/* 6 */      rts,  adc,  nop,  rra,  nop,  adc,  ror,  rra,  pla,  adc,  ror,  nop,  jmp,  adc,  ror,  rra, /* 6 */
/* 7 */      bvs,  adc,  nop,  rra,  nop,  adc,  ror,  rra,  sei,  adc,  nop,  rra,  nop,  adc,  ror,  rra, /* 7 */
/* 8 */      nop,  sta,  nop,  sax,  sty,  sta,  stx,  sax,  dey,  nop,  txa,  nop,  sty,  sta,  stx,  sax, /* 8 */
/* 9 */      bcc,  sta,  nop,  nop,  sty,  sta,  stx,  sax,  tya,  sta,  txs,  nop,  nop,  sta,  nop,  nop, /* 9 */
/* A */      ldy,  lda,  ldx,  lax,  ldy,  lda,  ldx,  lax,  tay,  lda,  tax,  nop,  ldy,  lda,  ldx,  lax, /* A */
/* B */      bcs,  lda,  nop,  lax,  ldy,  lda,  ldx,  lax,  clv,  lda,  tsx,  lax,  ldy,  lda,  ldx,  lax, /* B */
/* C */      cpy,  cmp,  nop,  dcp,  cpy,  cmp,  dec,  dcp,  iny,  cmp,  dex,  nop,  cpy,  cmp,  dec,  dcp, /* C */
/* D */      bne,  cmp,  nop,  dcp,  nop,  cmp,  dec,  dcp,  cld,  cmp,  nop,  dcp,  nop,  cmp,  dec,  dcp, /* D */
/* E */      cpx,  sbc,  nop,  isb,  cpx,  sbc,  inc,  isb,  inx,  sbc,  nop,  sbc,  cpx,  sbc,  inc,  isb, /* E */
/* F */      beq,  sbc,  nop,  isb,  nop,  sbc,  inc,  isb,  sed,  sbc,  nop,  isb,  nop,  sbc,  inc,  isb  /* F */
};


Викам съответната ф-я така:
Код:
        (*optable[opcode])();


Ето и една ф-я:
Код:
static void lda() {
    penaltyop = 1;
    value = getvalue();
    a = (uint8_t)(value & 0x00FF);

    zerocalc(a);
    signcalc(a);
}



Проблема е следния:
правя масива да е в прог.памет
Код:
static const void (*optable[256])() PROGMEM= {   


И имам следната грешка:
Код:
Error   514   invalid type argument of unary '*' (have 'int')   D:\6502\emu\6502_pc\6502_pc\c6502_cpu.c   840   4   6502_pc


плюс уорнинг за всяка стойност от масива
Код:
Warning   3   (near initialization for 'optable[0]') [enabled by default]   D:\6502\emu\6502_pc\6502_pc\c6502_cpu.c   760   14   6502_pc


Някакви идеи ?


Нед Дек 01, 2013 7:48 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Мар 22, 2010 8:52 pm
Мнения: 328
Мнение Re: масив от указатели към ф-ии в прог. памет
typedef void (*funcptr_t)(void);

static const funcptr_t optable[256] = {nop};


Така optable е в .rodata сегмента.


Нед Дек 01, 2013 9:08 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение Re: масив от указатели към ф-ии в прог. памет
Бях близо.

Код:
  typedef void (*FPtr)(void); 
  FPtr Key_Protab[] PROGMEM = { keypro1, keypro2, keypro3 };
 
and to call,

  FPtr ptr = (FPtr) pgm_read_word(&Key_Protab[functionID]); 
  ptr();


http://lists.gnu.org/archive/html/avr-gcc-list/2004-02/msg00191.html


Нед Дек 01, 2013 11:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: масив от указатели към ф-ии в прог. памет
Малко офф-топик.
Това 6502 емулатор за AVRMEGA ли е?

_________________
Warriors of the Night, ASSEMBLER!!!


Пон Дек 02, 2013 12:42 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Сря Фев 06, 2013 10:25 am
Мнения: 197
Мнение Re: масив от указатели към ф-ии в прог. памет
ike написа:
Малко офф-топик.
Това 6502 емулатор за AVRMEGA ли е?

Беше на чисто C. Заредих му един ром и тръгна.
Направих го за атмега. Сега ще закача малко SPI рам и SPI eeprom и ще видим какво ще стане.
Снощи го подкарах само с NOP-ове и преброи всичките адреси.


Пон Дек 02, 2013 10:54 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни