Jump to content

Estrutura de ponteiros para funções em ROM(flash....)?


trans_istor
 Share

Recommended Posts

Desculpa falar em assembly, mas nesta linguagem é simlpes, muito simples. Lá vamos:

Aquando da compilação, são guardados os endereços das rotinas, funções que se quer.

Estes endereços serão consecutivos (ROM). Quando o programa arranca, coloca em RAM

um ponteiro para essas rotinas. Assim quando chamo uma rotina, numa primeira fase

é decidido qual o conjunto de rotinas a chamar. E numa segunda fase o offset.

Obrigado pelo teu tempo.

Link to comment
Share on other sites

Isto é +/- o pretendido. Agradecia, se houvesse uma maneira melhor, ou correcções a este código.

Código ©:

void teste(void);
void teste1(void);
void teste2(void);
void outro_teste(void);
void outro_teste1(void);
void outro_teste2(void);

typedef struct {
void(*outro_ptr)(void);
void(*outro_ptr1)(void);
void(*outro_ptr2)(void);
}OUTRO_TESTE;

OUTRO_TESTE const NEW_OUTRO_TESTE =
{
outro_teste,
outro_teste1,
outro_teste2,
};

typedef struct {
void(*ptr)(void);
void(*ptr1)(void);
void(*ptr2)(void);
}TESTE;

TESTE const NEW_TESTE =
{
teste,
teste1,
teste2,
};

typedef struct {
void const *RAM_address_teste;
void const *RAM_address_outro_teste;
}RAM;

RAM New_RAM;

int main()
{

New_RAM.RAM_address_teste = &NEW_TESTE.ptr; //Dois pointeiros colocados na RAM, apontando para o início,
New_RAM.RAM_address_outro_teste = &NEW_OUTRO_TESTE; //de cada conjunto sequencial, de três endereços das rotinas.

return 0;
}


void teste(void)
{
int yy = 0xAAAA;
}

void teste1(void)
{
int yy = 0xBBBB;
}

void teste2(void)
{
int yy = 0xCCCC;
}

void outro_teste(void)
{
int yy = 0xAAAA0000;
}

void outro_teste1(void)
{
int yy = 0xAAAA1111;
}

void outro_teste2(void)
{
int yy = 0xAAAA2222;
}
Edited by apocsantos
geshi
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.