Violación de segmento de código en c++ (sin punteros)

Iniciado por juligarc10, 10 Noviembre 2018, 19:15 PM

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

juligarc10

Buenas tardes a todos. Me estoy iniciando en el mundo de la programación y me he propuesto encender un led con una Raspberry Pi. He diseñado el código ayudándome de algún libro y de internet, pero a pesar de que el código compila, una vez intento ejecutarlo me da un error que dice: Violación de segmento. Aquí os dejo el código, aunque yo no consigo ver el error.

#include <wiringPi.h>

#include <iostream>

int main(void){
wiringPiSetup();
pinMode(12, OUTPUT);
int i=0;
for(i=0;i<10;i++){
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay (500);
}
return (0);
}

PD: La librería wiringPi ya la he instalado, creo que el fallo no se debe a eso.

Un saludo, gracias.

EdePC

Saludos,

- De donde sale ese 12? existe? debes utilizar ese número o quizá algún otro? quizá uno menor ...

juligarc10

Cita de: EdePC en 11 Noviembre 2018, 01:21 AM
Saludos,

- De donde sale ese 12? existe? debes utilizar ese número o quizá algún otro? quizá uno menor ...

Hola,

Si no me equivoco es el pin positivo de la raspberry, al que conecto el led. No se si trabajaron alguna vez con la Raspberry, pero cada pin tiene asignado un número. Lo que no se es si lo he planteado bien, pero el 12 viene de que el pin nº 12 es el que ofrecerá una corriente positiva a mi led. Si buscan en google imagenes "Pines raspberry pi 3" podrán ver el esquema de la raspberry.

Gracias. Saludos.

CalgaryCorpus

Sugerencias:

- Escribe aqui el error completo que te aparece, no solo una parte. Tal vez el error completo da más indicios del problema y al recortarlo haces mas difícil adivinar que problema tienes.
- pon el comando que usas para ejecutar tu programa. Lo escondido de esta sugerencia es que leí que tiene que ejecutarse con sudo, y tal vez no lo has hecho así.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

EdePC

- Lo digo porque la Violación de Segmento se da normalmente porque se está haciendo referencia a un lugar que no existe, no se tiene permiso, está fuera del alcance.

- Con el código que has dado, me da a entender de que ese 12 está fuera del alcance. Pero no soy experto ni he tocado un Raspberry  :xD. Solo es lo que me da a entender.

juligarc10

Cita de: CalgaryCorpus en 11 Noviembre 2018, 15:49 PM
Sugerencias:

- Escribe aqui el error completo que te aparece, no solo una parte. Tal vez el error completo da más indicios del problema y al recortarlo haces mas difícil adivinar que problema tienes.
- pon el comando que usas para ejecutar tu programa. Lo escondido de esta sugerencia es que leí que tiene que ejecutarse con sudo, y tal vez no lo has hecho así.

Hola,

Estoy ejecutando el programa desde el cmd de raspbian (el sistema operativo que tiene instalado la RPi. Cuando creo el código, lo creo en un "bloc de notas" cuya extensión final es .cpp.
A continuación, cuando quiero compilar el código desde cmd escribo "g++ -Wall -o led led.cpp -lwiringPi" (led es el nombre del archivo bloc de notas". El archivo compila perfectamente, pero cuando lo ejecuto escribiendo en cmd "sudo ./led", la única respuesta que el cmd me da es "Violación de segmento", nada más. No se si así te puedo orientar algo más...

Un saludo y gracias.

juligarc10

Cita de: EdePC en 11 Noviembre 2018, 17:18 PM
- Lo digo porque la Violación de Segmento se da normalmente porque se está haciendo referencia a un lugar que no existe, no se tiene permiso, está fuera del alcance.

- Con el código que has dado, me da a entender de que ese 12 está fuera del alcance. Pero no soy experto ni he tocado un Raspberry  :xD. Solo es lo que me da a entender.

Hola,

Te entiendo, pero normalmente cuando tu especificas un lugar concreto en memoria, estás usando punteros. Yo aquí no los uso. El 12 ese en teoría no tiene nada que ver con la memoria, es simplemente el número que tiene asociado ese determinado pin de la Raspberry, y por el cual le indico a mi programa que ese pin será el que vaya a "emitir" corriente positiva y no cualquier otro, ya que el 12 será al que tendré conectado mi led.
No se si me he explicado o es que soy yo quien no te entiende a ti.  :laugh:

De todas formas muchas gracias.

MAFUS

¿Y si wiringPiSetup falla?
La función, según cuentan aquí (http://wiringpi.com/reference/setup/) devuelve un valor de retorno indicando si hay error. Deberías usar eso antes de continuar con tu programa.

juligarc10

Cita de: MAFUS en 11 Noviembre 2018, 19:30 PM
¿Y si wiringPiSetup falla?
La función, según cuentan aquí (http://wiringpi.com/reference/setup/) devuelve un valor de retorno indicando si hay error. Deberías usar eso antes de continuar con tu programa.

Hola,

Perdona, no entiendo a que te refieres con "usar eso antes de continuar con tu programa" :o.


MAFUS

En que mires si se ha producido un error durante el setup. Sí ocurre detener el programa o hacer algo. Igual que cuando pides memoria con malloc o new y te devuelven NULL.