trans_istor Posted April 4, 2015 at 09:05 PM Report Share #580799 Posted April 4, 2015 at 09:05 PM Cumprimentos a todos. Ando aqui às voltas, e preciso da vossa ajuda. Quero guardar em Rom(FLASH...) uma tabela de ponteiros para funções, colocando um ponteiro em RAM para essa tabela. Alguma ideia? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted April 5, 2015 at 07:13 AM Report Share #580804 Posted April 5, 2015 at 07:13 AM podes desenvolver as caracteristicas d oque pretendes realizar ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
trans_istor Posted April 5, 2015 at 09:02 PM Author Report Share #580828 Posted April 5, 2015 at 09:02 PM 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 More sharing options...
bubulindo Posted April 6, 2015 at 05:33 AM Report Share #580835 Posted April 6, 2015 at 05:33 AM Se calhar esclareceres qual e a plataforma em que estas a programar e se queres a solucao em Assembly ou C, sera benefico... include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
trans_istor Posted April 6, 2015 at 11:32 AM Author Report Share #580842 Posted April 6, 2015 at 11:32 AM A ajuda é bem-vinda em C. Link to comment Share on other sites More sharing options...
trans_istor Posted April 7, 2015 at 12:34 AM Author Report Share #580875 Posted April 7, 2015 at 12:34 AM (edited) 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 April 7, 2015 at 05:16 PM by apocsantos geshi Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now