[C-ASM] Pila

Iniciado por GGZ, 21 Noviembre 2016, 01:58 AM

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

GGZ

¿Podrían explicarme un poco mejor como es que funciona stack y hacer_stack?
#include <stdlib.h>
#include <setjmp.h>

#define TPILA 4096
#define NPILAS 10

static void hace_stack(jmp_buf buf, void (*pf)(), unsigned prof, char *dummy) {

       printf ("prof: %d\n",prof);
       printf ("dummy: %d\n",dummy-(char*) &prof );


       if( dummy - (char *) &prof >= prof) {
               if (setjmp(buf)!=0) {
                       pf(); abort();
               }
       } else hace_stack(buf, pf, prof, dummy);
}

void stack(jmp_buf buf, void (*pf)()) {
       static int ctas = NPILAS;
       char dummy;
       hace_stack(buf, pf, TPILA*ctas, &dummy);
       ctas--;
}



#include <stdio.h>
#include "guindows.h"

task t1, t2, taskmain;

void ft1(){
double d;
for(d=-1;;d+=0.001) {
printf("d=%f\n", d);
TRANSFER(t1,t2);
}
}

void ft2(){
int i;
for(i=0;i<10000;i++) {
printf("i=%d\n", i);
TRANSFER(t2,t1);
}
TRANSFER(t2, taskmain);
}

main(){
stack(t1,ft1);
stack(t2,ft2);
TRANSFER(taskmain,t1);
return 0;
}



¿Para qué carajos sirve esto?

       if( dummy - (char *) &prof >= prof) {
               if (setjmp(buf)!=0) {
                       pf(); abort();
               }
       } else hace_stack(buf, pf, prof, dummy);


Me parece una forma muy rara de codear (char *)&prof sé lo que significa pero no entiendo para que sirve.

Todo lo de guindows.h lo entiendo.
LET'S DO STUFF!!