TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: spike en 18 de Abril de 2006, 12:04:02
-
mi objetivo es poder escribir programas en C y que funcionen el el pic16f876.
Hasta ahora con el programa RealPic-1.0 ensamblaba el codigo en ensamblador i lo escribia sin problemas en el pic.
Ahora con el programa SDCC creo el fichero .hex ( de un programa escrito en C ) y al intentar pasarlo al pic con el programa RealPic-1.0 me da los siguientes errores:
> error de Overflow Inferior de la memoria de usuario del pic
>
> Error en la carga del fichero .hex
alguien sabe como solucionar esto?
alguien puede aconsejarme algo para poder escribir en C y pasarlo al pic?
saludos i gracias
-
Yo tengo el mismo problema, usando el compilador HI-TEC con el entorno MPLAB.
Cuando voy a grabar el archivo con el realpic , me dice que hay un error de overflow...
Alguien sabe como solucionar esto para el entrenador piclaboratory?
Gracias anticipadas, un saludo
-
¿En el RealPic está bien seleccionado el pic?
Me huele a que hay elegido un pic de menos de 8K de memoria de programa, y que al quererle cargar el .HEX no le "entra" y por eso salta el overflow.
-
Hola Maunix :
Si que está bien seleccionado tanto en el grabador como en el compilador. Yo uso de compilador el HI-TEC en entorno mplab , y aquí también está seleccionado.
El tema está en que cuando programo en ensamblador, el vector de inicio del programa tiene que ser el 0x05 ,
debido a que el entrenador tiene grabado un bootloader y se tiene que saltar a la dirección 0x05.
En ensamblador hago lo siguiente:
List p=16F876A ;Tipo de procesador
include "P16F876A.INC" ;Definiciones de registros internos
radix hex
org 0x04
goto Interrupcion
org 0x05
goto Inicio ;Vector de reset QUE NO PUEDE SER EL 0
Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
**************************
******************ETC******
El problema es que en C no tengo claro como definir el vector de inicio, porque he probado en poner
#asm
org 0x05
#endasm
al principio, dentro de la función principal, pero tampoco me funciona.
Si alguien está usando la piclaboratory programando en C y puede dar idea de como solucionar esto
nos haría un favor.
Gracias por todo , saludos!
-
Je, peligroso el bootloader ese... si tu 'interrupción' ocurre estando en la página 1, y tu rutina de atención de interrupción está en la página 0... no funcionará .
En fín, no me quiero meter en esos detalles, pero no entiendo como pasamos del error al levantar el HEX a como declarar una sección de código en una sección determinada :shock:
Respecto a la pregunta de ubicar un código en un lugar en específico con Hi-Tech, fíjate este link Positioning code, constant or variable at a specifc address in ROM or RAM. (http://www.ime.usp.br/~jstern/introdcomp/faqpacificc.htm#faq89)
La parte de "asm" que has querido codificar no te funciona porque es una sentencia sin sentido.
Saludos