Dúvida CCS

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Dúvida CCS

Mensagempor MOR_AL » 21 Fev 2007 10:24

Caros colegas do Fórum.

Uma vez possuindo o conhecimento da linguagem assembler para os microcontroladores PIC, chegou o momento de aprofundar-me no conhecimento da linguagem C da CCS.

Analisando o programa EX_DTMF.C, existente no subdiretório “Examples”, notei a presença da diretiva #include <kbd.c> na linha 58. Com a intenção de saber o porquê desta diretiva, observei que havia apenas duas funções que poderiam obter informações deste arquivo (kbd.c).

A primeira na linha 144, kbd_init ( ) ; e a segunda na linha 148, k=kbd_getc ( ) ;

Acontece que, observando o arquivo kdb.c, no subdiretório “Drivers”, a função kdb_init ( ) começa assim:

void kbd_init() {
}

char kbd_getc( ) {
static BYTE kbd_call_count;
.
.
.

Pergunto:

Existe o character “}” na segunda linha, logo após “void kbd_init() {“?

O quê exatamente faz uma função que possui “{“ seguido de “}”?

Gostaria que vocês se manifestassem, no sentido de tentar responder à minha questão.

Não testei o programa. Não sei se funciona.

Grato.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor KrafT » 21 Fev 2007 10:54

Funciona sim, direitinho.

{ e } delimitam o começo e o fim da função.

Na verdade isso é C, ou seja, vc deve estudar a base do C. CCS é consequencia.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor MOR_AL » 21 Fev 2007 14:43

{ e } delimitam o começo e o fim da função.


Foi isso que eu também pensei KrafT.

Mas repare que no começo da função está

void kbd_init() {
}


ou seja, é uma função que não faz nada, pois logo após o primeiro"{" vem um "}" . Não há nenhum "statement" entre eles.

Desculpe, mas minha dúvida ainda persiste.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor zielpunkt » 21 Fev 2007 15:25

A sua questão tem lógica. Dando uma olhada por cima do código, é uma função vazia, sim. Mas, então, pq dizem pra chamá-la antes de qquer coisa? Bem, parece que por conta de padronização pura e simples...ou por falta de revisão no texto. Afinal, inicializar 'o que' numa matriz de chaves 3X4 (sendo que as definições de pinos, etc, aparecem logo no início do código) ?

Abço.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor KrafT » 21 Fev 2007 15:38

Se o CCS fosse bom não teria uma função vazia, hehe... e se tivesse o compilador removeria devido sua inutilidade...

Mas te acustuma a CCS é uma ótima empresa de venda de upgrades. A melhor que eu conheço.

Eu só fui perceber isso quando comecei a usar CodeWarior, Keil, Iar e ZDS2...
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor Fábio Pereira » 21 Fev 2007 20:35

Bom Kraft,

Pode ser que o compilador tenha realmente removido a função, pois ele não comentou sobre a presença dela no código objeto gerado pelo compilador.

Me parece que a tal função kbd_init() deveria inicializar as linhas de E/S destinadas ao teclado mas por algum motivo o código foi retirado.

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor MOR_AL » 21 Fev 2007 20:44

Ok!

Parece ser apenas um erro de digitação no texto do arquivo. Vou verificar as chaves para observar se há o mesmo número de "abre chave" e "fecha chave", e se suas posições relativas encontram-se corretas.

Se descobrir algo postarei aqui.

Grato Kraft e zielpunkt pelo pronto auxílio.

MOR_AL

PS: Enquanto respondia com esta mensagem, apareceu a contribuição do Fábio Pereira.

Obrigado também pela dica.
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor andre_luis » 22 Fev 2007 08:33

Fábio Pereira escreveu:Bom Kraft,
Me parece que a tal função kbd_init() deveria inicializar as linhas de E/S destinadas ao teclado mas por algum motivo o código foi retirado.


É, isso que voce falou faz bastante sentido, sobretudo quando voce deseja utilizar uma função "pronta" do CCS, mas seu circuito já está montado de outra maneira; como por exemplo, um teclado usando Pull-down ao invez de Pull-up.
Editado pela última vez por andre_luis em 22 Fev 2007 12:37, em um total de 1 vez.
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Pask » 22 Fev 2007 12:20

Caro MOR-AL, muitas foram as vezes em que vc me ajudou. Agora, vou tentar ajudar você, mesmo conhecendo pouco de C.
Em C, toda chave de abertura precisa obrigatoriamente de uma chave correspondente de fechamento, senão o compilador dá uma mensagem de ERRO e não cria o EXE. Portanto, se no seu código, vc tiver 3 chaves de abertura, terá que ter 3 chaves de fechamento; se forem 10 chaves de abertura, deverão ser 10 chaves de fechamento e assim por diante.
UM EXEMPLO:

void qualquer_coisa() { //inicia a função
while(k!=10) { //inicia o laço enquanto dentro
da função
..................... //várias outras instruções
dentro do laço enquanto
} //chave de fechamento do
laço enquanto. Enquanto a
condição dentro dos parênteses
for considera verdadeira, os
comandos dentro das chaves
continuam sendo executados.
} //chave de finalização da função
"qualquer_coisa".

Então veja: 2 chaves de abertura e 2 chaves de fechamento correspondentes a elas.
Em C existe um segredo: dependendo da posição de colocação desses pares de chaves de abertura e fechamento, você pode alterar completamente a lógica de funcionamento do seu programa. Então, é preciso ter claramente na cabeça a lógica desejada para o seu código fonte e posicionar as chaves no lugar certo para que tudo funcione.

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor KrafT » 22 Fev 2007 22:04

Achei na versao 3.077 a rotina com algum conteúdo:

Código: Selecionar todos
void kbd_init() {
#ifdef __PCM__
    port_b_pullups(true);   // If not PCM be sure to use external pullups
#endif
}


Muito provavelmente eles mudaram o kit deles, talvez incluindo esses resistores por fora e removeram o código. Devem ter mantido a função apenas por compatibilidade, se não quem compilasse um programa funcional numa nova versão iria receber o aviso de funcao nao definida/encontrada.
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor MOR_AL » 23 Fev 2007 19:24

Caro Pask.

Obrigado pelas dicas. Programava muito em QBASIC e depois em MatLab.
Achei que deveria migrar para o C, assim comecei a estudá-lo. Já tenho feito diversos programas em C, porém, com a descontinuidade do uso, pois minha área é eletrônica analógica, acabei esquecendo muita coisa. Agora estou utilizando o C da CCS. Acho interessante, perfeitamente válido e até necessário em aplicações profissionais, onde o tempo de projeto é um fator importante. O assembler é minha linguagem preferida, pois você tem maior controle da máquina e dos tempos, além de conseguir colocar mais coisas no mesmo espaço de memória. O fator negativo, é claro, é o tempo de programação e dificuldades para alterações. Tem que haver um compromisso, um bom senso. Aí cada qual escolhe o que melhor lhe convier.

Minha dúvida surgiu porque tenho algumas reservas quanto a programas prontos. Quando chegam à minha mão prefiro dissecá-lo para entendê-lo. Assim, se não funcionar, ou se for necessário alguma alteração para satisfazer meus interesses, terei mais condições em resolver o problema.

É sempre bom contar com o auxílio da comunidade do fórum, motivo pelo qual, sempre que posso, tento ajudar.

Caro KrafT.

Obrigado pelo seu comentário. É isso aí. Com a contribuição de muitos, o problema é analisado sob diversos aspectos.

Grato a todos vocês.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Pask » 23 Fev 2007 19:36

Caro MOR_AL, observo que da turma deste fórum, vc é o que demonstra um bom ou mesmo ótimo nível de conhecimento dos assuntos em geral. Isto é muito bom porque eu também entendo da eletrônica analógica. Poderemos, assim, trocar mais idéias sobre esta área também.
Até mais...

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor MOR_AL » 23 Fev 2007 19:46

Pask.

Pode contar comigo. Qualquer coisa terei prazer em ser útil.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor Maurício » 23 Fev 2007 21:10

Salve.

Em C, se uma função está aberta (não foi compilada), ela é pra ser modificada pelo próprio programador, pro cara colocar A SUA função particular, lá.

[]'s

RETI.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor MOR_AL » 23 Fev 2007 23:46

Olá Maurício.

...ela é pra ser modificada pelo próprio programador...


Esta é uma afirmação que, apesar de óbvia, mostra um caminho para solucionar o problema. Aparentemente é o que deve ser feito.

Grato.


MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x