PDA

Visualizza la versione completa : [C] Commutazione di una variabile da 0 a i


maurii
30-04-2014, 18:41
Ciao a tutti. Una parte di un algoritmo più complesso, prevede la commutazione ogni 10 di una variabile y, da 0 a i, con i che va da 1 a 10. Ho 10 task ( processi come li volete chiamare ) a cui è associata questa commutazione ( devono produrre un'onda quadra quindi deve avvenire una commutazione da 0 a 1, da 0 a 2 e così via). Vi fornisco l'output del problema

l'output deve essere così:

Task 0 | y=1
Task 1 | y=2
Task 2 | y=3
Task 3 | y=4
Task 4 | y=5
Task 5 | y=6
Task 6 | y=7
Task 7 | y=8
Task 8 | y=9
Task 9 | y=0
Task 0 | y=1
Task 1 | y=2
ecc all'infinito essendo dentro un while(1);


io avevo provato a fare così la commutazione della y:

if(count<10){


y++;
ptr_sh->y[t]=y; //lo memorizza all'interno del vettore y[t] della struct campione, dove deve essere memorizzato
count++;



}else
{
y=0;
count=0;




}
l'output che ricevo è come quello sopra MA i valori assegnati alle y sono totalmente casuali ( da 1 a 10 ) e non in corrispondeza del task i-esimo

Scara95
30-04-2014, 20:34
Chiarisci che devi fare più precisamente, in che piattaforma lavori, se utilizzi più thread o un singolo thread, se il tuo obbiettivo è SOLO ottenere quell'output o se devi fare qualcosa di più complesso.

P.s. magari evita di postare la stessa domanda 3 volte nel frattempo

oregon
30-04-2014, 22:32
Non so se ho capito ma mi sembra troppo semplice ...



int task, y;


task=0;
while(1)
{
y=task+1;
if(y>9) y=0;


printf("Task %d | y=%d\n", task, y);

task++;
if(task>9) task=0;
}


... sicuramente non ho capito qualcosa.

maurii
01-05-2014, 02:20
E' un codice per applicazione Real Time.

i task sono indipendenti dalla y, nel senso ho un ciclo for a parte che conta l'indice del task, chiamato da un programma principale.

for(i=0;i<10;i++)
printf("Task %d | y= %d\n",i,ptr_sh->y[i]);

in un altro file, all'interno di una funzione, ho l'algoritmo di commutazione della y da 0 a i, che dovrà aggiornare una struct contentenente il vettore y[10];
questa funzione che chiameremo fun, ha come parametro un long t.
static void fun(long t){


while(1){

//codice di commutazione

......


ptr_sh->y[t]=y;

}

oregon
01-05-2014, 10:13
E' un codice per applicazione Real Time.

Non ci dici molto ...

Cosa è esattamente ptr_sh ? Penso un puntatore ad un'area condivisa ...


in un altro file, all'interno di una funzione

Un altro file non vuol dire molto ... è una funzione eseguita in un altro thread?


parametro un long t

A che serve quel parametro? Come parte la funzione e con quale parametro?

Che intendi esattamente con "codice di commutazione"?

maurii
01-05-2014, 18:24
Si deve simulare un oscillatore real time costituito da 10 task che producono un segnale ad onda quadra . Ogni task ha un determinato periodo cioe si ripete con regolarita nel tempo. Ogni 10 campioni , se immagini un piano cartesiano, la y passa da 0 a i in base al task considerato cioé da 0 a 1 se il task è il primo e cosi via ( come l output mostrato sopra ) e dopo altri 10 campioni ritorna a zero e cosi via. Il programma lo sto scrivendo su linux dunque compilo da terminale. Lo gestisco su tre file. Uno dove ci sara un processo non realtime che mediante un ciclo for stampa a video le informazioni quindi i task da 0 a 9 e la corrispobdente commutazione il cui valore è preso da un vettore y[10] memorizzato in un' areacondivisa. Un altro file è il gestore del sistema real time che contiene oltre a delle funzioni di sistema necessarie una funzione static void fun(long t) chr implementa la comnutazione richiesta ed eventuali altre specifiche. Il parametro long t in ingresso tiene traccia in questo caso dei task che vogliamo gestire. In Un terzo file ci sara la memoria condivisa con il vettore. Quello che chiedevo è solo quests semplice commutazione . Ho fatto un esempio nel primo.messaggio di come l ho fatta e l output ottenuto.

Loading