Autor Tema: XC8 - Instrucción RESET en lenguaje C  (Leído 6194 veces)

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
XC8 - Instrucción RESET en lenguaje C
« 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


Desconectado EdoNork

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 616
    • ElektroQuark
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #1 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.
« Última modificación: 15 de Mayo de 2014, 11:59:13 por EdoNork »
Mi blog sobre electrónica y cosillas afines: www.elektroquark.com
EQVideo en Youtube
El foro de KiCad en castellano.
Mi librería para KiCad ¡AQUÍ!

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #2 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");
}

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #3 en: 15 de Mayo de 2014, 20:12:31 »
OK, usaré asm. Gracias  :)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #4 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
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #5 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

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #6 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.

Desconectado Tisco

  • PIC16
  • ***
  • Mensajes: 108
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #7 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!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: XC8 - Instrucción RESET en lenguaje C
« Respuesta #8 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.


 

anything