Eu tenho um PIC18F46K22 e programo -o com o compilador XC8. No final, terei um sistema como um PC com stdin
e stdout
. Portanto, no loop principal, haverá uma função que está verificando se há novas entradas. Se houver entrada, uma função será chamada de acordo. Por exemplo, quando eu insiro um A stdin
ativado, o PIC executará uma função como em function_A
vez da function_B
qual é chamada quando insiro um B.
Quando o PIC for concluído com a função, desejo que a nova entrada seja enviada para a função. Portanto, ao pressionar A, o transmissor RS232 é aberto, a partir desse momento todas as entradas serão enviadas pelo RS232. No final, o projeto é um editor de texto independente. Portanto, ao pressionar A, o sistema de arquivos é aberto. A partir desse momento, você não está mais editando textos, mas procurando uma lista de arquivos. Isso significa que pressionar Cima e Baixo significa algo diferente do ambiente de edição de texto.
Pensei muito em como programar isso em C. Pensei nisso ontem à noite e gostaria de saber se é possível e, em caso afirmativo, como. O que eu quero fazer é:
- A
main
função chama uma função comofunction_A
function_A
altera uma variável globalfunction_addr
para o ponteiro de endereço da funçãoin_function_A
- A partir desse momento,
main
chama a funçãofunction_addr
quando houver uma nova entrada.
Então, o que eu precisaria é de uma main
função que verifique se function_addr
é zero. Se for, uma função 'normal' deve ser chamada, como function_A
. Caso contrário, a função at function_addr
deve ser chamada. Eu também preciso de um function_A
que muda function_addr
para um ponteiro para in_function_A
.
Nota: quando a função do sistema de arquivos deve ser fechada, is_function_A
basta mudar function_addr
para 0.
Então, basicamente, minha pergunta é como posso
- Obter o endereço de uma função (e armazená-lo em uma variável)
- Chamar uma função em um endereço especificado