Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-06-2009, 12:00   #1
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
[C] progetto porto

Ho bisogno di due dritte per iniziare il progetto e su come risolverso... non richiedo la soluzione ma se mi aiutate ad organizzare su come vanno gestite le cose...

Scopo del progetto è gestire il transito delle imbarcazioni in un porto seguendo le
specifiche qui riportate.
All'inizio dell'esecuzione il porto è vuoto. Vengono generate tramite un processo
un certo numero di imbarcazioni che cercano di entrare nel porto. NB: il numero
di moli è limitato quindi al più 10 imbarcazioni possono soggiornare
contemporaneamente nel porto. Dopo un po' di tempo trascorso a riva (variabile
da imbarcazione a imbarcazione), ogni imbarcazione prende il largo liberando il
molo che occupava.
L'accesso al porto avviene tramite un canale gestito come senso unico alternato.
Ad intervalli regolari vengono fatte entrare alcune imbarcazioni nel porto e poi
fatte uscire alcune imbarcazioni. La durata dei periodi di ingresso ed uscita è
identica. Quindi quando è il turno degli ingressi, le navi ferme al largo iniziano a
entrare, e continuano a farlo per un certo tempo prefissato (a patto che ci siano
moli liberi). Allo scadere del tempo, l'ingresso viene bloccato e si consente alle
navi pronte a partire di uscire, sempre per un tempo prefissato.
Ogni imbarcazione attraccata, avvisa la capitaneria di porto inviando un
messaggio su di una coda (unica per tutte le imbarcazioni e per la capitaneria),
indicante il nome della nave, il carico ed eventuali altre informazioni ritenute
utili. La capitaneria di porto registra tali messaggi in un'area di memoria
condivisa (il registro della capitaneira).
A campione, la capitaneria di porto effettua dei controlli su di alcune
imbarcazioni. A tal fine il processo si forka generando un controllore. Controllore
e nave si scambiano alcune informazioni secondo il protocollo descritto nel
seguito. Il controllore riporta nel registro tutti i passi.
Messaggio 1: da capitaneria a nave: CHECK_START
Messaggio 2: da nave a capitaneira: materiale trasportato + quantità
Messaggio 3: da capitaneira a nave: OK oppure MULTA
La terminazione di tutti i processi figli va intercettata dal corrispodente genitore,
che in tale occorrenza esegue la wait/waitpid.


datemi una mano grazie mille

Luca
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 14:19   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da lucadue Guarda i messaggi
datemi una mano grazie mille
Fai delle domande specifiche e/o posta una tua almeno parziale soluzione/pseudo-implementazione.

Questo perchè in questo Forum è vietato postare soluzioni intere di esercizi, e tantomeno chiedere soluzioni intere di esercizi.
Posta domande e dubbi specifici, spezzoni di codice, e vedrai che l'aiuto non mancherà.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 14:50   #3
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ma infatti io non ho chiesto la soluzione completa dato che conosco molto bene il regolamento e non mi sognerei mai di infrangerlo. La mia questione era semplicemente, se così si può definire, ottenere un elenco di "azioni" da svolgere in sequenza visto che il mio problema sta proprio nel cominciarlo. Credo che una volta ottenuto questo input avrò sicuramente le idee ben più chiare per implementare l'intero lavoro e se a quel punto avrò dubbi particolari riguardanti uno specifico problema li posterò direttamente. Grazie mille a tutti..
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 17:22   #4
tapper
Junior Member
 
Iscritto dal: Jun 2009
Messaggi: 17
Puoi cominciare con la creazione del processo server (il molo) e con l'algoritmo che gestisce l'arrivo delle navi......


-----------------------------------
Coding Art...

Tetti
tapper è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 19:05   #5
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ok grazie mille mi metto al lavoro e appena butto giu qualcosa ve lo posto
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2009, 22:35   #6
-hide-
Senior Member
 
L'Avatar di -hide-
 
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
Quote:
Scopo del progetto è gestire il transito delle imbarcazioni in un porto seguendo le
specifiche qui riportate.
All'inizio dell'esecuzione il porto è vuoto. Vengono generate tramite un processo
un certo numero di imbarcazioni che cercano di entrare nel porto. NB: il numero
di moli è limitato quindi al più 10 imbarcazioni possono soggiornare
contemporaneamente nel porto. Dopo un po' di tempo trascorso a riva (variabile
da imbarcazione a imbarcazione), ogni imbarcazione prende il largo liberando il
molo che occupava.
L'accesso al porto avviene tramite un canale gestito come senso unico alternato.
Ad intervalli regolari vengono fatte entrare alcune imbarcazioni nel porto e poi
fatte uscire alcune imbarcazioni. La durata dei periodi di ingresso ed uscita è
identica. Quindi quando è il turno degli ingressi, le navi ferme al largo iniziano a
entrare, e continuano a farlo per un certo tempo prefissato (a patto che ci siano
moli liberi). Allo scadere del tempo, l'ingresso viene bloccato e si consente alle
navi pronte a partire di uscire, sempre per un tempo prefissato.
Ogni imbarcazione attraccata, avvisa la capitaneria di porto inviando un
messaggio su di una coda (unica per tutte le imbarcazioni e per la capitaneria),
indicante il nome della nave, il carico ed eventuali altre informazioni ritenute
utili. La capitaneria di porto registra tali messaggi in un'area di memoria
condivisa (il registro della capitaneira).
A campione, la capitaneria di porto effettua dei controlli su di alcune
imbarcazioni. A tal fine il processo si forka generando un controllore. Controllore
e nave si scambiano alcune informazioni secondo il protocollo descritto nel
seguito. Il controllore riporta nel registro tutti i passi.
Messaggio 1: da capitaneria a nave: CHECK_START
Messaggio 2: da nave a capitaneira: materiale trasportato + quantità
Messaggio 3: da capitaneira a nave: OK oppure MULTA
La terminazione di tutti i processi figli va intercettata dal corrispodente genitore,
che in tale occorrenza esegue la wait/waitpid.
Questo programma è un vero bordello, già solo leggendo il testo
Se non mi studio realmente Fondamenti 2 posso sognarmelo. Dopo che avrò preso la materia in mano tornerò su questo programma, promesso!
__________________

PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote
Mobile: Samsung Galaxy Wonder i8150 cm9
LinkedIn
-hide- è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 15:29   #7
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ho pensato di organizzare il tutto in nave.c, capitaneria.c, porto.c e ho iniziato a scrivere nave.c che sara quello che genera le navi e gli assegna i vari attributi

ho creato libporto.h (che verra man mano completato)
Codice:
#ifndef molo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define molo

typedef struct {
	int quantita;
	char merce[10];
	int identificatore;
} boat;

#endif
nave.c
Codice:
#include "libporto.h"

char *get_merce ()    //metodo che assegna in modo casuale un tipo di merce
{
	char *prodotto;    //stringa a cui si assegna il tipo di prodotto
    int valore;    //valore a cui si assegnera il numero casuale				
	srand (getpid());    //senza di cio il random restituisce sempre lo stesso num ???
    valore = rand()%5 + 1;    //assegna un valore casuale da 1 a 5 a valore

	switch(valore)    //assegna il tipo di prodotto in base al numero generato
	{
		case 1: 
				prodotto = ("TABACCO");
				break;

		case 2: 
				prodotto = ("ACCIAIO");
				break;

		case 3: 
				prodotto = ("FERRO");
				break;

		case 4: 
				prodotto = ("AUTOMOBILI");
				break;

		case 5: 
				prodotto = ("BOMBE");
				break;

		deafult:
				printf("errore \n"); 
				break;
	}
return prodotto;    //restituisce il prodotto

}

int get_quantita()
{
    int t;    //tonnellate
    srand(getpid());    //senza di cio il random restituisce sempre lo stesso num ???
    t = rand()%120 + 1;    //assegna un valore casuale da 1 a 120 a valore
    return t;
}
ora devo passare a fare il main di nave.c per gestire la creazione delle navi.. cosa mi consigliate di fare?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 11-06-2009, 19:11   #8
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
ho implementato un primo main

Codice:
main()
{
	int pid;	//variabile sulla quale eseguo fork()
	int n;		//utilizzato per assegnare la wait
	boat nave;    //dichiarazione variabile nave

	pid = fork();	//fork() su pid per creare il figlio
	
	if (!pid)	//se pid == 0
	{
		printf("Sono il figlio %d\n", getpid());	//e' stato creato il figlio del quale stampo il pid
		nave.identificatore = getpid();    //assegna all'identificatore della nave l'identificatore del processo
		nave.merce = get_merce();    //assegna un tipo random di merce con la funzione get merce
		nave.quantita = get_quantita();    //assegna una quantita random di merce con la funzione get quantita
		printf("identificatore nave ---> %d \n", 1);    //stampa l'identificatore
		printf("merce contenuta sulla nave: %s \n", nave.merce);    //stampa la merce trasportata
		printf("quantità di merce contenuta sulla nave: %d \n", nave.quantita);    //stampa la quantita
	}
			
	else	 
		printf("padre %d\n", getppid());	//stampo il pid del padre
	
	n = wait(0);
	
	if(n > 0) 
		printf("Terminato figlio %d\n", n);
}
in questo modo fa quello che deve generandomi una nave con un identificatore, una merce e una quantita...
se voglio espandere questo a dieci navi e non solo una cosa devo modificare? mi date una mano?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2009, 13:38   #9
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 12-06-2009, 17:46   #10
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
edit: il lavoro ora è a questo punto.. come dite di proseguire?

Codice:
#include "libporto.h"

/* metodo che assegna in modo casuale un tipo di merce */
char *get_merce()
{
	char *prodotto;    //stringa a cui si assegna il tipo di prodotto
    int valore;    //valore a cui si assegnerà un numero casuale				
	
	srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    valore = rand() % 5 + 1;    //assegna un valore casuale da 1 a 5 alla variabile valore

	switch(valore)    //assegna il tipo di prodotto in base al numero generato
	{
		case 1: 
				prodotto = ("TABACCO");
				break;

		case 2: 
				prodotto = ("ACCIAIO");
				break;

		case 3: 
				prodotto = ("FERRO");
				break;

		case 4: 
				prodotto = ("AUTOMOBILI");
				break;

		case 5: 
				prodotto = ("PNEUMATICI");
				break;

		deafult:
				printf("*****ERRORE*****\n"); 
				break;
	}

return prodotto;    //restituisce il prodotto

}

/* metodo che assegna in modo casuale una quantità ad un carico di merce */
int get_quantita()
{
    int t;    //variabile contenente il peso della merce in tonnellate
    srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    t = rand() % 120 + 1;    //assegna un valore casuale da 1 a 120 alla variabile t
    
	return t;    //restituisce le tonnellate
}

/* metodo che crea in modo casuale un numero di navi da un minimo di 1 ad un massimo di 15 */
int get_numnavi()
{
    int n;    //variabile contenente il numero delle navi
    srand(getpid());    //senza questo il random restituisce sempre lo stesso num ???
    n = rand() % 15 + 1;    //assegna un valore casuale da 1 a 15 alla variabile n
    
	return n;    //restituisce il numero di navi
}

/* metodo che crea una nave */
boat crea_nave(int val)
{
	boat barca;    //struttura contenente la nave da creare
		
	barca.identificatore = getpid();    //assegna all'identificatore della nave l'identificatore del processo
	barca.merce = get_merce();    //assegna un tipo random di merce con la funzione get merce
	barca.quantita = get_quantita();    //assegna una quantita random di merce con la funzione get quantita
	printf("Identificatore nave ---> %d \n", val);    //stampa l'identificatore della nave
	printf("Merce contenuta sulla nave ---> %s \n", barca.merce);    //stampa la merce trasportata dalla nave
	printf("Quantità di merce contenuta sulla nave ---> %d tonnellate\n", barca.quantita);    //stampa la quantità della merce contenuta sulla nave
	fflush(stdout);
	
	return barca;    //ritorna la nave appena creata
}

/* metodo che crea la coda di messaggi necessaria per le comunicazioni tra nave e capitaneria */
int crea_codamsg()
{
	int q_uid;    //variabile alla quale assegnare il risultato della funzione msgget()
	
	q_uid = msgget(ID_CODA, IPC_CREAT | 0666);
	
	if(q_uid == -1)
		return 0;
	else
		return 1;	
}

int main()
{    //APERTURA MAIN
	int pid;	//variabile alla quale assegnare il risultato della funzione fork()
	int n;		//variabile alla quale assegnare il risultato della funzione wait()
	boat nave;    //struttura contenente i dati della nave
	int i;    //variabile contenente l'indice necessario per il ciclo for
	int num_navi;    //variabile contenente il numero di navi create    
	int coda_msg;    //variabile contenente il valore buon fine o meno del risultato della creazione della coda
	
	coda_msg = crea_codamsg();
	
	if(coda_msg)    //if(coda_msg == 1)
	{    //APERTURA IF(1)
	
		num_navi = get_numnavi();
	
		for (i = 1; i <= num_navi; )    //ciclo for necessario per creare 10 processi figlio
		{    //APERTURA FOR

			pid = fork();	//fork() su pid per creare il figlio
	
			if (!pid)	//if(pid == 0) entro nel codice del processo figlio
			{
				printf("\n\nSono il figlio %d \n", getpid());	//e' stato creato il figlio del quale stampo il pid
				nave = crea_nave(i);	
				i = num_navi + 1;    //serve per farmi uscire dal ciclo, ovvero il figlio non effettua ulteriori fork()
			}
			
			else    //if(pid == 1) entro nel codice del processo padre
			{
				i++;    //incremento l'indice del ciclo for per evitare il loop
				printf("Sono il padre %d\n", getppid());	//stampo il pid del padre
				fflush(stdout);
			
				n = wait(0);	//il processo padre aspetta la terminazione del processo figlio
				fflush(stdout);
			
				if(n > 0)	//se la variabile contiene un numero maggiore di zero (pid del figlio)
					printf("Terminato il figlio %d\n", n);    //allora significa che il processo figlio è terminato
			}
		}    //CHIUSURA FOR
	}    //CHIUSURA IF(1)
	
	else    //if(coda_msg == 0)
		printf("*****ERRORE CREAZIONE CODA*****\n");

	return 0;
}    //CHIUSURA MAIN
e questa la libporto.h

Codice:
#ifndef molo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define molo
#define ID_CODA 1234

typedef struct {
	long type;
	int npid;
	char str[30];
} msg;

typedef struct {
	int quantita;
	char *merce;
	int identificatore;
} boat;

boat crea_nave(int);
char *get_merce();
int get_quantita();
int get_numnavi();
int crea_codamsg();

#endif

Ultima modifica di lucadue : 15-06-2009 alle 16:19.
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 15-06-2009, 16:21   #11
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
help me per favore
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2009, 14:30   #12
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
iniziato a gestire il porto... datemi una mano ad implementare i semafori

Codice:
#include "libporto.h"

int crea_semafori()
{
	int s_uid;
	s_uid = semget(ID_SEM, 2, IPC_CREAT | 0666);
	
	if(s_uid == -1)
		return -1;
	else
		return s_uid;
}

int main()
{
	int id_semafori;
	
	id_semafori = crea_semafori();
	
	if (crea_semafori >= 0)
	{
		
	}

	else printf ("*****ERRORE CREAZIONE POOL DI SEMAFORI*****\n");
	
	printf ("l'id del pool dei semafori è %d\n", id_semafori);

	return 0;

}
ora che faccio?
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 19-06-2009, 11:13   #13
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
lucadue è offline   Rispondi citando il messaggio o parte di esso
Old 20-06-2009, 18:04   #14
=KaTaKliSm4=
Senior Member
 
L'Avatar di =KaTaKliSm4=
 
Iscritto dal: Jul 2006
Città: Altamura
Messaggi: 919
che bello sarebbe stato usare gli oggetti in questa situazione eh
__________________
Trattative : http://swdev.altervista.org/VenditeAcquisti.txt Blog Tecnico : http://blogs.dotnethell.it/SwDev/
Desktop : i7 920,GTX580 PALIT, Obsidian 800D, 6GB Corsair, OCZ Vertex 3 240gb.
Desktop 2 : iMac 27'' MID 2011 i5, 4GB
=KaTaKliSm4= è offline   Rispondi citando il messaggio o parte di esso
Old 21-06-2009, 11:21   #15
lucadue
Senior Member
 
L'Avatar di lucadue
 
Iscritto dal: Mar 2006
Città: Saluzzo (Cuneo) - Trattative ok: 51
Messaggi: 3656
se mi date due dritte su come si fa posso modificarlo...
lucadue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
Xiaomi 17: ecco il prezzo europeo del to...
Google fa tremare l'industria dei videog...
Gli sviluppatori 'abbandonano' Xbox: il ...
Galaxy S27 Ultra, è già te...
PlayStation Portal con display OLED: Son...
POCO X8 Pro e Pro Max sono quasi pronti:...
OpenAI ha bisogno di nuovi fondi: NVIDIA...
Mese nuovo, rinnovo delle offerte Amazon...
Accessori auto imperdibili su Amazon: pu...
Gli utenti iPhone possono ridurre la pr...
Come fare affari con l'usato garantito d...
Il miglior tablet di tutta Amazon, DOOGE...
Gli smartphone in super offerta su Amazo...
Produttori di memoria più severi ...
WhatsApp Business, Meta introduce costi ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:34.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v