Página 1 de 1

Utilizando C no Keil

MensagemEnviado: 19 Abr 2007 16:04
por power
Olá Pessoal blz!

Estou precisando da ajuda dos amigos. Eu só programo em assembly do 8051, mas gostaria de começar a programar em C. Já fiz uns programas em C para computador mas faz algum tempo que não uso mais e quando comecei a utilizar o C para 8051 ficou tudo meio confuso. Por exemplo
quando faço todo o programa em um único modulo principal roda legal, mas gostaria de fazer de uma forma mais profissional, isto é, tentar modularizar, coisas do tipo; modulo para eeprom , módulo para lcd,etc...
Eu já fiz uma pesquisa no forum, mas algumas coisas ainda estão meio confusas, como por exemplo como declarar uma variavel global que
possa ser utilizada em varios módulos. Eu olhei o tutorial parte1 do Jean,
que por sinal tava muito bem escrito, mas não consequi as outras partes do tutorial para baixar se alguem tiver e puder me enviar eu agradeço.
Ou se alguem tiver exemplos bem descritos de como declarar variaveis
globais e declaraçao de modulos, como inserir codigo asm em c.
Eu estou utilizando o Keil e até ja fui no site da Keil, mas como meu inglês e pobre fica difícil. Bom se alguem querer ajudar eu aceito qualquer orientação.
Até +, colegas!

MensagemEnviado: 19 Abr 2007 18:36
por brasilma
Beleza Power,

A melhor dica que posso te dar é:

PROGRAMAÇÃO C PARA MICROCONTROLADORES 8051
MAURICIO CARDOSO DE SÁ

Ele explica a programação C voltada para o 8051 desde o inico.

Explica o uso do compilador Keil.

Abraços,
MArcos.

MensagemEnviado: 19 Abr 2007 19:03
por Maurício
Falou, Marcos! :lol:
Olá, power. Bem-vindo ao fórum.

Apesar de que é puxar a brasa pra sardinha, mas...

Eu trato destes assuntos que vc citou, no meu curso online:

http://www.microgenios.com.br/doc_ead/f ... icial.html

Dá uma visitada, lá. Mas, é um curso de técnicas avançadas em C para o 8051. É necessário ter conhecimentos de C básico para programação do 51.

Agora, não dá pra responder. Fim de semana eu volto. Espero!

[]'s

RETI.

Utilizando C no Keil

MensagemEnviado: 23 Abr 2007 11:38
por power
Olá Brasilma,
Obrigado pela sugestão. Com certeza eu preciso comprar um
livro para dar uma olhada quando tiver dúvidas, o problema eh que
nesse momento tô meio sem dinheiro para investir em conhecimento
e como precisso dessas informações para terminar um projeto
vou ter que contar com a ajuda do pessoal do forum.

Olá Mauricio,
Olhei no seu site este curso online e parece ser bastante
interessante, mas como falei pro Brasilma no momento vai ser
meio difícil por questões financeiras. Sei que conhecimento
custa dinheiro, mas tenho que me virar do jeito que dá, por enquanto.

só gostaria de fazer uma pergunta, eu fiz um teste com variveis
globais como descrevo abaixo e quanto vou compilar da a sequinte mensagem

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_R1
MODULE: principal.obj (PRINCIPAL)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_S1 MODULE: principal.obj (PRINCIPAL)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_S1 MODULE: principal.obj (PRINCIPAL)
ADDRESS: 0019H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_R1 MODULE: principal.obj (PRINCIPAL)
ADDRESS: 001DH
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_R1 MODULE: multiplicacao.obj (MULTIPLICACAO)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: VG_S1 MODULE: multiplicacao.obj (MULTIPLICACAO)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_R1 MODULE: multiplicacao.obj (MULTIPLICACAO)
ADDRESS: 0028H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: VG_S1 MODULE: multiplicacao.obj (MULTIPLICACAO)
ADDRESS: 002BH Program Size: data=10.0 xdata=0 code=68 "TesHeader" - 0 Error(s), 8 Warning(s).

Esses WARNING são normais ou estou fazendo algo errado. Tem uma forma correta de fazer
para não aparecer esses WARNING.



- criei um modulo calculos.c
- um calculos.h
- um modulo multiplicacao.c
- um multiplicacao.h
- um modulo principal.c e
- um modulo variaveis.h onde esta as declarações das variaveis globais



No modulo calculos.c
//-------------------------
#include<REGX52.H>


unsigned char soma(unsigned a,unsigned b)
{
unsigned c=0;

c=(a+b);
return c;
}



No modulo calculos.h
//----------------------
#include<REGX52.H>

#ifndef _calculos_h
#define _calculos_h
extern unsigned char soma(unsigned a,unsigned b);

#endif




No modulo multiplicacao.c
//-------------------------

#include<REGX52.H>
#include"calculos.h"
#include"variaveis.h"

unsigned char multSimples(unsigned char a, unsigned char b)
{
unsigned char r;
r=soma(a,b);
r=(r+VG_r1); // VG_r1 eh uma variavel global
r=VG_s1; // VG_s1 eh outra variavel global
return(r*3);
}




No modulo multiplicacao.h
//--------------------------
#include<REGX52.H>

#ifndef _multiplicacao_h
#define _multiplicacao_h
extern unsigned char multSimples(unsigned char a, unsigned char b);

#endif

No modulo variaveis.h
//----------------------
#ifndef _variaveis_h1
#define _variaveis_h1
extern unsigned char VG_x1;
extern unsigned char VG_s1;
extern unsigned char VG_r1;

#endif



No modulo principal.c
//------------------------

#include<REGX52.H>
#include"calculos.h"
#include"multiplicacao.h"
#include"variaveis.h"

/*------------------------------------------------------*
* Main
*
*-------------------------------------------------------*/
void main(void)
{
unsigned char x,y,z;

x=1;
y=2;
z=soma(x,y);
z=multSimples(x,5);
VG_r1=(3+VG_s1);
z=z+VG_r1;

while(1);



}

Re: Utilizando C no Keil

MensagemEnviado: 23 Abr 2007 11:48
por andre_luis
No modo multiplicação.c, por exemplo, eu nao vi voce declarar :
extern unsigned char VG_s1 ;

Segue por esse caminho.

+++

MensagemEnviado: 23 Abr 2007 13:24
por power
Olá Andre_teprom,

No modulo multiplicação.c eu inclui o modulo variaveis.h onde declaro
as variaveis globais, e a variavel VG_s1 eh global.
Valeu pela dica!

MensagemEnviado: 23 Abr 2007 23:18
por Maurício
É isso mesmo que o André disse. Seus procedimentos são os corretos.
Só que vc não declarou a variável global unsigned char VG_s1, em nenhum módulo do programa. Talvez seja por isso que o Keil não consiga resolver a referência que é feita ao símbolo.
Existe o símbolo externo declarado em algum módulo, mas, não foi criada a variável externa a que esse símbolo se refere.

Eu, declaro minhas variáveis globais no escopo do módulo main, e declaro como extern, em algum módulo que eu vá utilizar essa variável.
É um método. Mas, óbvio, existem vários outros.

[]'s

RETI.

MensagemEnviado: 25 Abr 2007 10:09
por power
Olá pessoal, blz,

Agradeço a ajuda do Andre_teprom assim como a ajuda do Mauricio. Ainda esta meio confuso esta parte de declaração de variaveis
globais. Eu declarei elas no modulo principal Main
e ainda continua com os mesmos WARNING. Acho que solução sera
estudar um pouco mais o c, por isso comprei o livro Programação C para Microcontroladores 8051, acho que o livro deve chegar la em casa até sabado, pois pedi via sedex. Então na proxima semana, eu com certeza
vou postar aqui mais algumas perguntas e conto com a colaboração dos
amigos do forum.
Até a proxima mensagem pessoal.

MensagemEnviado: 25 Abr 2007 18:15
por Maurício
Uma outra coisa, tb.
Apesar de estarem ligados através dos arquivos .H, os arquivos .C dos módulos também devem ser incluídos no projeto do Keil. Devem ser adicionados ao projeto. Todos eles. Se eles não estiverem incluídos, os erros podem ser os que vc citou aqui.

Grato pelo livro! Espero que ele lhe seja bastante útil.

[]'s

RETI.