Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    7

    [C] Commutazione di una variabile da 0 a i

    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

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    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
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Non so se ho capito ma mi sembra troppo semplice ...

    codice:
    	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.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    7
    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;

    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da maurii Visualizza il messaggio
    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"?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    7
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.