Autor Tema: Punteros con Hitech  (Leído 1502 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Punteros con Hitech
« en: 01 de Febrero de 2010, 10:34:06 »
Hola gente, soy nuevo en el foro mi nombre es Sebastian. Intenté usar el buscador y me dice que "hubo un error" y que no puedo usarlo...

Estoy tratando de hacer una muy pequeña cosita con un puntero y se me cuelga la compilación (la versión que estoy usando de HiTech es la 9.6)

----------
void main ()
{
   unsigned char *Puntero;
   Puntero = (unsigned char *)6;
}
-----------

Eso compila perfectamente, y revisando la variable puntero con el MPLAB veo que apunta a la direccion 06. Esa forma de asignar una dirección directamente al puntero la saqué de un libro de lenguaje C


---------esto es del libro--------------
No se puede asignar una dirección
absoluta directamente (habría que hacer un casting). Las siguientes sentencias son ilegales:
p = &34; // las constantes no tienen dirección
p = &(i+1); // las expresiones no tienen dirección
&i = p; // las direcciones no se pueden cambiar
p = 17654; // habría que escribir p = (int *)17654;
-----------------------------------------


El problema se presenta cuando quiero compilar lo siguiente

-----------------------------------------
void main ()
{
   unsigned char *Puntero;
   Puntero = (unsigned char *)6;

   *Puntero = 255;
}
-----------------------------------------

Supuestamente, la única diferencia es que con la última línea lo que hago es poner el valor 255 en la dirección apuntada por el puntero, valga la redundancia.


Viéndolo así que es cortito no tiene sentido dar tantas vueltas, lo sé. Pero la idea es hacer una función a la cual pasarle un número (que sería una dirección de puerto válida, o sea; 05, 06...) para la función maneje el puerto.... Es para una rutina de LCD 2x16 que ya la había hecho en CCS y funcionaba bien. Pero ahora estoy tratando de trabajar con la versión Lite de HiTech
« Última modificación: 01 de Febrero de 2010, 10:36:50 por AngelGris »
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Punteros con Hitech
« Respuesta #1 en: 01 de Febrero de 2010, 11:01:17 »
Aparentemente encontré la solución. Al menos ya no se cuelga la compilación e incluso usando el MPLAB puedo ver como varía el puerto.

Lo que hice fue declarar "volatile" al puntero

-------------------------------
void main ()
{

   TRISB = 0;
   PORTB = 10;
   unsigned char * volatile Puntero;
   Puntero = (unsigned char *)6;

   *Puntero = 22;

   *Puntero = 0xff;
}
---------------------------------
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Punteros con Hitech
« Respuesta #2 en: 01 de Febrero de 2010, 15:01:35 »
Aca dejo la rutina que estaba tratando de implementar por si les interesa.

La probé sobre el Proteus usando el puerto B de un 16F876A y funcionó joya.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything