Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/02/2010 #1


Problema programacion C
Hola.
Estoy utilizando un software llamado "mikroC" que me permite programar un pic en Lenguaje C, pero al compilar el codigo me da un error. He intentado programar de dos formas distintas pero en de ambas formas me da error, alguien podria ayudarme???

La estructura del codigo es la siguiente:
lo que pretendo es configurar distintos parametros en el "main" y tras esto que entre en un bucle infinito en donde primero se ejecuta la funcion "func_desactivar" y despues "func_activar", y cuando esta finaliza que vuelva a ejecutarse "func_desactivar"


/***********************************************/
void main()
{
//codigo
//codigo
func_desactivar();
}

void func_desactivar(){
//codigo
func_activar();
}

void func_activar(){
//codigo
func_desactivar();
}

/**************************************************/

LA OTRA FORMA EN QUE LO HE INTENTADO ES ESTA

/*************************************************/

void main()
{
//codigo

desactivar:
func_desactivar();

activar:
func_activar();
}

void func_desactivar(){
//codigo
goto activar;
}

void func_activar(){
//codigo
goto desactivar;
}

/*****************************************/

que alguien me ayude, necesito programar esta estructura y el compilador no hace mas que darme un error......
02/02/2010 #2

Avatar de tecnogirl

Respuesta: Problema programacion C
Transcribe el mensaje de error que te dá el compilador.... Salu2
02/02/2010 #3

Avatar de elbrujo

Respuesta: Problema programacion C
Que codigo estas escribiendo y que error te da, sino eso.. poco se puede aportar..
02/02/2010 #4

Avatar de cosmefulanito04

Respuesta: Problema programacion C
Proba esto:

Código:
void main()
{
  ...
  while(1)
     {
      func_desactivar();
      func_activar();
     }
}
02/02/2010 #5

Avatar de Dr. Zoidberg

Respuesta: Problema programacion C
xxxasdfxxx dijo: Ver Mensaje
/***********************************************/
void main()
{
//codigo
//codigo
func_desactivar();
}

void func_desactivar(){
//codigo
func_activar();
}

void func_activar(){
//codigo
func_desactivar();
}
Eso que has hecho es un DESASTRE. Es una invocación recursiva infinita de las funciones activar() y desactivar() y el error probablemente sea del tipo "Stack Overflow" o algo por el estilo.

xxxasdfxxx dijo: Ver Mensaje
/**************************************************/

LA OTRA FORMA EN QUE LO HE INTENTADO ES ESTA

/*************************************************/

void main()
{
//codigo

desactivar:
func_desactivar();

activar:
func_activar();
}

void func_desactivar(){
//codigo
goto activar;
}

void func_activar(){
//codigo
goto desactivar;
}

/*****************************************/

que alguien me ayude, necesito programar esta estructura y el compilador no hace mas que darme un error......
Y esta otra es poco menos que ESPANTOSA. Estás tratando de saltar (goto) entre espacios de código diferentes con diferentes stacks.

Te recomiendo que hagas lo que dice cosmefulanito y que tomes un libro de C y estudies, por que a juzgar por lo que has hecho, no tenés NI IDEA de un lenguaje de alto nivel.
02/02/2010 #6

Avatar de Eduardo

Respuesta: Problema programacion C
xxxasdfxxx dijo: Ver Mensaje
...que alguien me ayude, necesito programar esta estructura y el compilador no hace mas que darme un error......
Seguramente el mensaje de error dice algo asi:
ERR 731: Programmer error. Read a good C language book and try again


Tal como te dijo EZavalla estas asesinando el stack.

Si queres programar una estructura de ese tipo tenes que hacerlo dentro de la misma rutina usando goto (perdon Dijkstra )


/******************/
void main()
{
//codigo
//codigo
goto func_desactivar;


func_desactivar:
//codigo
goto func_activar;


func_activar:
//codigo
goto func_desactivar;

}
02/02/2010 #7

Avatar de iDan

Respuesta: Problema programacion C
Amigo xxxasdfxxx


Hablas que programas en MikroC verdad?? bueno vamos a ver tus estructuras:


Código:
/***********************************************/
void main()
{
//codigo
//codigo
func_desactivar();
}

void func_desactivar(){
//codigo
func_activar();
}

void func_activar(){
//codigo
func_desactivar();
}

/**************************************************/

LA OTRA FORMA EN QUE LO HE INTENTADO ES ESTA

/*************************************************/

void main()
{
//codigo

desactivar:
func_desactivar();

activar:
func_activar();
}

void func_desactivar(){
//codigo
goto activar;
}

void func_activar(){
//codigo
goto desactivar;
}

/*****************************************/

que alguien me ayude, necesito programar esta estructura y el compilador no hace mas que darme un error......
1er Error: Hacer las subrrutinas despues del programa principal:

Código:
void main
{
//
cualquiera();
}
void cualquiera();
{
//
}
MikroC no deja hacer esto al realizar tu programa, recomendacion... realizar primero las subrrutinas y luego llamarlas:

Código:
void cualquiera();
{
//
}
void main
{
//
cualquiera();
}
2do Error: Tratar de llamar una subrrutina dentro de una subrrutina, te puedes ahorrar un while(1){} al momento de realizarlo asi pero... no lo permite el compilador y si fuera posible no seria muy eficiente en programas grandes, recomendacion... aprender mas funciones, ciclos, etc. de Lenguaje C; ejemplo:


Código:
void prender()
{
//
}
void apagar()
{
//
}
void main()
{
//
while(1)
{
prender();
apagar();
}
}
aqui te dejo tu escritura solo que en una adecuada estructura:

Código:
/*Programa on & off de un LED mediante subrrutinas*/

void func_desactivar()
{
PORTC=0;
delay_ms(1000);
}
void func_activar()
{
PORTC=1;
delay_ms(1000);
}
void main()
{
ANSEL=0;
CMCON0=7;
TRISC=0;
while(1)
{
activar();
desactivar();
}
}
acortando el programa con la misma funcion:

Código:
/*Programa on & off de un LED*/

void main()
{
ANSEL=0;
CMCON0=7;
TRISC=0;
while(1)
{
PORTC=1;
delay_ms(1000);
PORTC=0;
delay_ms(1000);
}
}

Espero que haya quedado clara la idea...


Saludos
02/02/2010 #8

Avatar de elbrujo

Respuesta: Problema programacion C
A claro esta en un loop eterno...
02/02/2010 #9

Avatar de cosmefulanito04

Respuesta: Problema programacion C
MikroC no deja hacer esto al realizar tu programa, recomendacion... realizar primero las subrrutinas y luego llamarlas:
No se como con ese IDE, pero en C para realizar eso tenes que hacer esto:

Código:
...
void mi_funcion();

void main()
{
...
}

void mi_funcion()
{
...
}
Sino se pone la subrutina antes del main como dijiste.

Y sobre el uso de Goto en C, no es una buena idea, C es un lenguaje estructurado y pensado para evitar justamente el uso de Goto.
02/02/2010 #10

Avatar de iDan

Respuesta: Problema programacion C
En MikroC para realizar escritura o una funcion de Assembler hay que realizar una "asm Declaration" (ver en Ayuda de MikroC) la cual su estructura seria la siguiente:


asm {
block of assembly instructions
}


Ejemplo:

unsigned myvar;
void main() {
asm {
MOVLW 10 // just a test
MOVLW test_main_global_myvar_1
}
}
02/02/2010 #11

Avatar de Dr. Zoidberg

Respuesta: Problema programacion C
iDan dijo: Ver Mensaje
En MikroC para realizar escritura o una funcion de Assembler hay que realizar una "asm Declaration" (ver en Ayuda de MikroC) la cual su estructura seria la siguiente:
asm {
block of assembly instructions
}

Ejemplo:
unsigned myvar;
void main() {
asm {
MOVLW 10 // just a test
MOVLW test_main_global_myvar_1
}
}
Y que tiene que ver tu respuesta con la consulta original?
02/02/2010 #12

Avatar de iDan

Respuesta: Problema programacion C
Aclarando el uso de Assembler dentro del compilador MikroC, en mi primer respuesta escribí lo relacionado escencialmente en este tema...
02/02/2010 #13


Respuesta: Problema programacion C
muchisimas gracias a todos, ya consegui solucionar el problema.
muchas muchas gracias.

son los mejores!!!!
06/06/2012 #14


problemas con el mikroc
yo tengo un problema ................... me sale que la ram ya esta llena como hago o que instruccion uso para usar toda la memoria ram del pic 16f877a

---------- Actualizado después de 2 minutos ----------

tengo un problema estoy haciendo una chapa electrica con el pic 16f877a y me sale en el compiladfor que la memoria ram esta llena ................. yo se que en total son 8k de ram divididos en 2k por pag ..................ahora que instruccion uso para usar el total de la memoria ........ ayuda porfis
06/06/2012 #15
Moderador

Avatar de Chico3001

No puedes.... eso lo determina el compilador a la hora de compilar el programa

Lo unico que puedes hacer es eliminar o reusar variables, o declararlas como locales en vez de globales... o reducir el tipo.. si usas int, declaralas como char... obvio eso reducira el rango de almacenamiento de la variable.. asi que hazlo con cuidado..
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.