TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: migsantiago en 14 de Mayo de 2014, 23:55:32

Título: XC8 - Instrucción RESET en lenguaje C
Publicado por: migsantiago en 14 de Mayo de 2014, 23:55:32
Hola

Estoy buscando en el manual de XC8 cómo se pone la instrucción de RESET en lenguaje C. Me refiero al código de operación RESET en ensamblador pero lo quiero hacer en lenguaje C sin llamar un asm() o algo por el estilo. ¿Existe algo así?

Gracias

Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: EdoNork en 15 de Mayo de 2014, 06:26:30
No se si existe, pero siempre puedes utilizar una función que haga saltar el watchdog.
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: MerLiNz en 15 de Mayo de 2014, 06:45:40
#define reset() asm("reset");

ahora pones reset(); y ya tienes una funcion de C aunque sea simplemente un macro, desconozco si la sintaxis de reset es asi y si se utiliza el asm asi, pero es algo parecido.

Tambien puedes crear tu propia funcion

void reset() {
asm("reset");
}
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: migsantiago en 15 de Mayo de 2014, 20:12:31
OK, usaré asm. Gracias  :)
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: Suky en 15 de Mayo de 2014, 22:19:33
Y pero si existiera la función reset en C, terminaría siendo un macro como el que muestra MerLiNz!  :roll: Que pasa Mig?  :D
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: migsantiago en 15 de Mayo de 2014, 22:34:59
jajaj sí lo sé, pero pues no quería darle la vuelta. Cuando usaba CCS había equivalentes en C, quería saber si los había en XC8.

Disculpe usted amigo Suky jejej
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: MerLiNz en 16 de Mayo de 2014, 06:58:19
el C al fin y al cabo se convierte en ASM asi que si existiese alguna funcion/macro, seria justamente como la que yo he escrito, o quizas una libreria .s en asm simple.
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: Tisco en 17 de Mayo de 2014, 08:40:34
Hola Mig,

XC8 ya trae sus macros para ejecutar "reset" así como otras funcionalidades. Si haces un include del fichero xc.h tendrás acceso a ellas.

Algunas de estas macros son:

Código: C
  1. #define FLASH_WRITE(src, size, dest)    flash_write(src,size,dest)
  2. #define flash_erase(addr)               EraseFlash(addr,(addr)+1)
  3. #define FLASH_ERASE(addr)               EraseFlash(addr,(addr)+1)
  4. #define CLRWDT()        asm(" clrwdt")
  5. #define ClrWdt()        asm(" clrwdt")
  6. #define NOP()           __nop()
  7. #define Nop()           __nop()
  8. #define RESET()         asm(" reset")
  9. #define Reset()         asm(" reset")
  10. #define SLEEP()         asm(" sleep")
  11. #define Sleep()         asm(" sleep")

Un saludo!
Título: Re: XC8 - Instrucción RESET en lenguaje C
Publicado por: migsantiago en 17 de Mayo de 2014, 14:29:49
Hola Mig,

XC8 ya trae sus macros para ejecutar "reset" así como otras funcionalidades. Si haces un include del fichero xc.h tendrás acceso a ellas.

Algunas de estas macros son:

Código: C
  1. #define FLASH_WRITE(src, size, dest)    flash_write(src,size,dest)
  2. #define flash_erase(addr)               EraseFlash(addr,(addr)+1)
  3. #define FLASH_ERASE(addr)               EraseFlash(addr,(addr)+1)
  4. #define CLRWDT()        asm(" clrwdt")
  5. #define ClrWdt()        asm(" clrwdt")
  6. #define NOP()           __nop()
  7. #define Nop()           __nop()
  8. #define RESET()         asm(" reset")
  9. #define Reset()         asm(" reset")
  10. #define SLEEP()         asm(" sleep")
  11. #define Sleep()         asm(" sleep")

Un saludo!

Justamente eso buscaba, usar lo que XC8 proporcionaba. No hay mucha diferencia de todas formas jeje.

Gracias Tisco.