Los Caballeros

"Sobre seguridad, programación, modding, frikismo, etc... "

Programas para el uso de un arduino con un micro atmega

Twitter icon Twitter icon
Estas son las utilerias para la compilacion de un programa:

En ensamblador para este tipo de micros, hay que recordar que son muy distintos a los famosos y ya conocidos pic's.

uno de los programas mas faciles de usar es la propia suite de atmel en su vercion 2.5 o 4.5 .

AVR STUDIO 4.5
http://www.atmel.com/dyn/resources/prod_documents/aStudio4b528.exe

una vez que tengamos el programa finalizado habra que pasarlo a .hex desde el mismo avr.
ya que esta en .hex hay que pasarlo al micro para ello utilizaremos un programa llamado pony prog 2000

PONY PROG 2000
http://www.lancos.com/e2p/V2_05/ponyprogV205a.zip

Mi primer programa en ensamblador

Twitter icon Twitter icon
Este programa funciona como las luces del auto increible de los 80's, es decir que el dato va a ir de izq a der constantemente.

El programa fue creado para un atmega 16 pero funciona para cualquier linea atmel solo tienes que cambiar la libreria .include y listo.


.include"C:\Archivos de programa\Atmel\AVR Studio\Appnotes\m16def.inc"
.org 0
rjmp configura
Configura:
ldi R17, low(ramend)
ldi R18, high(ramend)
out spl, R17
out sph, R18
rjmp miconfiguracion



miconfiguracion:
ser r19;
out ddrc,r19;
ldi r19,1
rjmp autoincreible


autoincreible:
out portc, r19;
rjmp ciclo1


ciclo1:
lsl r19
cpi r19,128;
out portc,r19
brne ciclo1
rjmp ciclo2

ciclo2:
lsr r19
cpi r19,1;
out portc,r19
brne ciclo2
rjmp ciclo1



fin:
nop
rjmp fin

Hardware Hacking

Twitter icon Twitter icon
nHola saludos a todos antes de empezar en la sección de Hacking Hardware, aquí un poco de historia sobre microprocesadores que es y que son, abajo viene nuestro primer programa en ensamblador para micros de marca Atmel.

Microprocesadores Wikipedia! xD

Microcontroladores

Atmel


Ocuparemos un micro Atmega 16, 32 o 163 (que en mi caso son las que tengo por ahora xD ) igual nos sirve cualquier otro (de la misma marca), aunque cada micro tiene su propio datasheet donde vienen especificadas las instrucciones para su uso por lo general los comandos básicos son casi los mismos.


El programa que usaremos sera AVRStudio 4.0 El cual lo pueden descargar de la pagina oficial de Atmel

AVRStudio

Nuestro primer programa en ensamblador sera lo bastante fácil y explicare cada parte del código. xD


Este programa cuenta de 0 a 100 cíclicamente.
Los comentarios se escriben con ; "punto y coma".


.include"m32def.inc"      ;Librería según el micro a utiliza.
.org 0x00                         ;Vector de inicio o registro origen-
                                          ;del programa en el microcontrolador.
rjmp inicio       ;Salta a la etiqueta inicio.

inicio:                                            ;Etiqueta inicio.

ser r20                               ; Llena el registro r20.
out DDRA, r20                ; Saca el registro por el puerto de configuración "A".

limpia:                                            ;Etiqueta limpia.

clr r20                               ; Limpia el registro r20.

incremento:                                   ;Etiqueta incremento.

out PORTA, r20               ; Saca por el puerto "A" Lo que hay en r20.
inc r20                               ; Incrementa r20 en 1 (Siempre incrementa de 1 en 1).
cpi r20, 100                      ; Compara si r20 es a 100.
breq limpia                        ; Si es igual a 100 salta a limpia.
rjmp incremento               ; Si no salta a incremento y continua el ciclo


Como pueden ver es un programa demasiado fácil y pues simplemente estamos comenzando ..XD no se exasperen..XD paso a pasito... : p . 
Luego veremos otras cosas más interesantes y circuitos también etc.. etc...

Los que saben de binarios y ...

Twitter icon Twitter icon

Esta version de la frase no me la sabia xD jajaja

Momento windowsero del dia

Twitter icon Twitter icon


No creo que haya necesidad de explicar la foto... todos hemos tenido un momento windowsero... pero esto es el colmo...

Hilos, Procesos y memoria compartida (C++/C)

Twitter icon Twitter icon
Cómo programadores todos hemos tenido que elegir alguna vez entre Hilos y Procesos.

¿Cuál es la diferencia entre ambos?

Hilos: Comparten la misma memoria, por lo cual requerimos utilizar mutex (exclusión mutua), para sincronizar los procesos y evitar que se utilice por 2 hilos (o más) al mismo tiempo, la misma memoria.

Procesos: Si no requerimos que se comuniquen los hijos ésta es la solución, los procesos no comparten memoria, así que no nos tenemos que preocupar por la sincronización.


Ejemplo de hilo:
#include <stdio.h> // Cargamos stdio (para printf)#include <pthread.h> // Cargamos pthread para poder utilizar hilos#include <unistd.h> // para sleepstruct estructura_parametros { // creamos la estructura "estructura_parametros" que utilizaremos para enviar    // datos al hilo int id; char *envio;};void *hilo(void *params) { // lo que lanzaremos en cada hilo struct estructura_parametros *parametros = (struct estructura_parametros *) params; // hacemos un cast a params// para poder leer los datos con "->" int a = 0; for(; a < 10; a++) {  printf("Hilo %i - Mi padre dijo: %s\n",(int)parametros->id,(char*)parametros->envio); // leemos los parametros y//los imprimimos  printf("Hilo %i - :)\n",(int)parametros->id); }}int main(int argc, char *argv[]){ int nth = 10; // el numero de hilos a lanzar pthread_t hilos[nth]; // decimos que vamos a lanzar varios hilos (los que nth indique) estructura_parametros parametros[nth]; // igual que los hilos, decimos que vamos a crear nth estructuras de// parametros for(int i = 0; i < nth; i++) {  parametros[i].id = i; // establecemos el id del hilo  parametros[i].envio = "Hola hilo!"; // le damos un mensaje  pthread_create(&hilos[i], NULL,hilo, (void *)&parametros[i]); /* y lo creamos...  la funcion pthread_create toma los parametros:  pthread_create(puntero a hilo, atributos de hilo, variables (pasados como void*))  */ } sleep(100); // esperamos 100 a que terminen los hilos}/*Salida aproximada:Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 7 - Mi padre dijo: Hola hilo!Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 3 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)*/


Cómo notaran en la salida, no es precisamente lo más ordenado del mundo...

Para ello integramos el uso de mutex, para que no trabajen al mismo tiempo, por lo tanto no se corrompa la salida (ésto se requiere cuando se trabaja con bases de datos o cosas que requieren exactitud, por ejemplo si hay 2 hilos trabajando al mismo tiempo en una misma variable (pongamos que es numérica y tiene de valor 1) alguno de ellos puede cambiar el dato mientras el otro lo está usando, pensando que la variable aun tiene de valor 1, cuando su valor ahora es 2, por lo cual al intentar aumentar el nuevo valor podría ser 3, saltando el 2, etc...)

Ejemplo de hilo usando mutex:
#include <stdio.h>#include <pthread.h>#include <unistd.h>struct estructura_parametros { int id; char *envio;};pthread_mutex_t mutexBuffer;void *hilo(void *params) { struct estructura_parametros *parametros = (struct estructura_parametros *) params; int a = 0; pthread_mutex_lock (&mutexBuffer); // hacemos que nos esperen :) for(; a < 10; a++) {  printf("Hilo %i - Mi padre dijo: %s\n",(int)parametros->id,(char*)parametros->envio);  printf("Hilo %i - :)\n",(int)parametros->id); } pthread_mutex_unlock (&mutexBuffer); // Adelante hermanos!}int main(int argc, char *argv[]){ int nth = 10; pthread_t hilos[nth]; estructura_parametros parametros[nth];pthread_mutex_init (&mutexBuffer, NULL); // iniciamos el mutex for(int i = 0; i < nth; i++) {  parametros[i].id = i;  parametros[i].envio = "Hola hilo!\n";  pthread_create(&hilos[i], NULL,hilo, (void *)&parametros[i]); } sleep(100);}/*Salida aproximada:Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 0 - Mi padre dijo: Hola hilo!Hilo 0 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 1 - Mi padre dijo: Hola hilo!Hilo 1 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 2 - Mi padre dijo: Hola hilo!Hilo 2 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 3 - Mi padre dijo: Hola hilo!Hilo 3 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 4 - Mi padre dijo: Hola hilo!Hilo 4 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 5 - Mi padre dijo: Hola hilo!Hilo 5 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 6 - Mi padre dijo: Hola hilo!Hilo 6 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 7 - Mi padre dijo: Hola hilo!Hilo 7 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 8 - Mi padre dijo: Hola hilo!Hilo 8 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)Hilo 9 - Mi padre dijo: Hola hilo!Hilo 9 - :)*/


Mucho más ordenado :)...

Ahora pasemos a procesos:

#include <stdlib.h>#include <stdio.h>#include <unistd.h> int a = 0;    int main(int argc, char **argv)    { int nproc = 10; int idProceso[nproc]; int il = 0; while(il < nproc) {  idProceso[il] = fork(); // Intentamos inicializar un proceso  if (idProceso[il] == -1) // si el pid es -1, entonces hubo error  {   perror ("No se puede crear proceso");   exit (-1);  }  if (idProceso[il] == 0) // si el pid es 0, entonces ya somos un proceso individual  {    a++;    printf("Proceso %i - Variable a: %i\n",il,a);    exit(0); // este exit, solo afectara a este proceso  }  il++; } il = 0; sleep(10); // esperamos 10 seg. a que los procesos terminen return 1;}/*Salida aproximada:Proceso 0 - Variable a: 1Proceso 3 - Variable a: 1Proceso 4 - Variable a: 1Proceso 2 - Variable a: 1Proceso 5 - Variable a: 1Proceso 1 - Variable a: 1Proceso 6 - Variable a: 1Proceso 8 - Variable a: 1Proceso 7 - Variable a: 1Proceso 9 - Variable a: 1*/

Como ya habíamos dicho, no comparten memoria, por lo cual cada uno tendrá una variable a, distinta.

Si queremos compartir específicamente una variable, requerimos memoria compartida (que pueda utilizarse por cualquier proceso hijo).

#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/shm.h> int *idsmemoria; int a = 0;int *compartir(char *file,int size, int tamano,int sem) { key_t Clave; int Id_Memoria; int *Memoria = NULL; Clave = ftok(file, sem); // se genera una semilla en base a un archivo existente en la PC y a un numero dado if (Clave == -1) {  printf("No consigo clave para memoria compartida\n");  exit(0); } Id_Memoria = shmget(Clave, size*tamano, 0755 | IPC_CREAT); /* se da la semilla, el tamaño de memoria a reservar y los permisos (en este caso 0755, al estilo chmod) y este nos reservara un id de memoria */ if (Id_Memoria == -1) {  printf("No consigo Id para memoria compartida\n");  exit (0); } Memoria = (int *)shmat (Id_Memoria, (int *)0, 0); /* Listo, obtenemos la memoria compartida*/ if (Memoria == NULL) {  printf("No consigo memoria compartida");  exit (0); } Memoria[0] = Id_Memoria; /* en el indice 0, colocamos el ID de memoria, este se utilizara luego para liberar la memoria */ return Memoria;}    int main(int argc, char **argv)    { int *memoria = compartir("/etc/passwd",sizeof(int),2,10); // obtenemos la memoria compartida :)... int nproc = 10; int idProceso[nproc]; int il = 0; memoria[1] = 0; while(il < nproc) {  idProceso[il] = fork();  if (idProceso[il] == -1)  {   perror ("No se puede crear proceso");   exit (-1);  }  if (idProceso[il] == 0)  {    memoria[1]++;    printf("Proceso %i - Variable a: %i\n",il,memoria[1]);    exit(0);  }  il++; } il = 0; sleep(5); shmctl(memoria[0], IPC_RMID, (struct shmid_ds *)NULL); /* Liberamos la memoria */ return 1;}/*Salida aproximada:Proceso 0 - Variable a: 1Proceso 1 - Variable a: 2Proceso 2 - Variable a: 3Proceso 3 - Variable a: 4Proceso 4 - Variable a: 5Proceso 5 - Variable a: 6Proceso 6 - Variable a: 7Proceso 7 - Variable a: 8Proceso 8 - Variable a: 9Proceso 9 - Variable a: 10*/


Finalmente ya tenemos nuestras primeras aplicaciones multi-hilo/multi-proceso en C++/C

Hacking TeleVision

Twitter icon Twitter icon





Bienvenidos a Hacking Television, no es solo un blog mas de seguridad informática, también es un videoblog (xD), en el cual expondremos nuestras ideas y técnicas de seguridad y contra-seguridad, sin limitarse únicamente al ciberespacio. Sin mas, presentamos al equipo:


Equipo de electrónica:
4rc4n4
Vyr0n

Equipo de comunicaciones inalámbricas:
Angelus Inflectum

Equipo de Desarrollo:
Xianur0