Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C] gestione processi multitasking non preemptive

    salve,
    ho la necessità di studiare come il C su windows gestisce i processi,cerco di spiegarmi meglio:

    Ciò mi sarà utile per la programmazione (attraverso il compilatore IAR Embedded for ATMEL AVR V4) di un dispositivo il cui sistema operativo è multitasking non preemptive.

    Riporto di seguito ciò che trovo sul pdf guida del dispositivo:
    "............I task che vengono utilizzati in un 'applicazione creata con questo sistema, devono sottostare ad un vincolo funzionale,determinato dal fatto che il sitema è multitasking non preemptive.Questo significa che il task in esecuzione ha il pieno controllo della CPU,quindi finchè questa non viene rilasciata,gli altri task non vengono eseguiti.Il controllo viene rilasciato al task schedulker al termine dell'esecuzione della funzione associata al task..................................."

    Ovviamente per la gestione dei task ho a disposizione le opportune librerie, ma non avendo le giuste basi per affrontare questo tipo di programmazione vorrei prima capire come con un normale compilatore C posso gestire il discorso dei task andando a richiamare le opportune API di Windows o altro.....

    Nelle precedenti discussioni ho visto dei link al MSDN in cui sono trattati gli oggetti Mutex e gli oggeti Semaforo che penso centrino qualcosa con quello che vorrei fare io...vi chiedo se potete darmi altri riferimenti a link che spieghino le cose ad un livello molto piu basso per poi passare a cose piu complicate e magari anche libri che trattono tali argomenti.

    Grazie mille

    Nicola

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Windows è dotato di uno scheduler che (tramite un complesso algoritmo a priorita') gestisce l'allocazione del tempo CPU ad ogni processo in modo preemptive.
    Quindi non penso che avvicinarti al core di Windows ti possa aiutare molto.

    Fondamentalmente in un sistema non preemptive bisogna che le applicazioni siano fatte bene, nel senso che lascino il tempo al sistema di gestire ordinatamente gli altri processi in attesa e non riservino per se' tutto il tempo CPU (un po' come faceva Win16).

    Fra l'altro, una cosa e' lavorare con un sistema abbastanza complesso (come e' oggi un PC) e un'altra cosa e' lavorare con un sistema dalle risorse molte limitate come puo' essere un dispositivo con la CPU da te citata.

    E forse e' anche meglio che tu precisi con "maggior precisione" cosa vuoi fare/sapere perche', in caso contrario, non e' facile darti indicazioni di nessun genere ...

  3. #3
    Ciao oregon,
    grazie per avermi risposto e scusami se io lo faccio solo ora.

    Cerco di essere piu preciso.

    Indipendentemente dal tipo di sistema (complesso come un PC o meno complesso come il microcontroller a cui sto cercando di lavorare io), ho la neccessità di studiare come il C riesca a gestire i processi ed i thread (in particolare su Windows) perchè, come credo tu mi possa confermare, sono la base (anche se nelle applicazioni più semplici in modo implicito) di tutte le applicazioni.

    Purtroppo nelle mie ricerche di esempiucci vari e di teoria da cui poter iniziare,trovo solo dei buoni riferimenti a Linux.

    Chiedevo appunti indicazioni, link...................su dove trovare un po di materiale per iniziare il mio studio.

    grazie Nicola

  4. #4
    In effetti non è il particolare compilatore C che effettua le politiche di schedulazione dei vari processi o l'accesso alle risorse da parte dei threads , ma un insieme di funzioni del SO che sono state progettate all'uopo . Per cui se lavori su un microcontroller avrai bisogno che il costruttore ti metta a disposizione delle librerie di funzioni con le quali gestire i task e i thread , mentre in Windows è lo stesso sistema che ti metta a disposizione queste librerie . Per un approfondimento sui task e i thread in Windows vai a questo link . Saluti

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    In effetti, confermando quanto diceva King, il compilatore non gestisce processi e thread.
    Anzi, per essere piu' precisi, il compilatore non ha idea di cosa siano i processi e i thread.

    Un processo (e un thread) sono insiemi di "programmi e dati" gestiti con algoritmi che potrebbero essere scritti in qualsiasi linguaggio.

  6. #6
    Ciao,

    In effetti il costruttore del dispositivo ha messo a disposizione le librerie di funzioni che permettono la sua gestione e tra queste ci sono quelle riferite ai task.

    Se mi è permesso vorrei un attimo stravolgere il tema di questa discussione e porvi un'altra domanda proprio su questi file di libreria.
    Giusto a titolo di informazione il dispositivo in questione si chiama OWAP, esso utilizza come microcontroller l' ATmega128 con il quale tra le principali periferiche è possibile gestire un modem GSM/GPRS, un modulo GPS,...etc.
    Il compilatore utilizzato per la sua programmazione è l' IAR Embedded Workbench versione 4.10 in ambiente Windows.

    Il Compilatore usa come file di libreria file con estensione .R90
    Nel CD in dotazione ho travoto una cartella contenente tutte le funzioni di libreria solo con estensione con .H; i sorgenti in C e i relativi file .H di alcune procedure che a loro volta chiamano delle funzioni di libreria ed un unico file con estensione .R90(di cui ovviamente nn posso vedere il codice).

    Questo file .R90 viene anche utilizzato in una applicazione di esempio.
    Aprendo l'esempio in dotazione attraverso il compilatore, il Workspace è costituito da tutte le procedure (di cui ho scritto sopra) e dal file di libreria .R90, ma scorrendo tra le righe di codice non trovo nessun main.
    La conclusione più logica è quindi che all'interno di quel file .R90 altre ai file oggetto delle funzioni di libreria si trova buona parte del file di esempio gia compilato (tra cui la parte relativa al main).

    La mia domanda è appunto:
    ma quel file .R90 posso utilizzarlo per miei progetti o si possono creare delle interferenze con tutto cio che c'è di compilato del file di esempio?

    Io ho gia fatto delle prove ed in fase di Rebuild-All il compilatore mi da un Warning nel quale mi dice :"un modulo main è dichiarato due volte uno come programma e uno come modulo; quello di modulo verrà ignorato" .

    Ovviamente le mie prove alla fine non funzionano, ma questo molto probabilmente dipende dal mio stato di profanaggine di programmattore.

    Vi starete chiedendo come mai queste cose non le chiedo direttamente al costruttore; sinceramente l'ho fatto ma non ricevuto risposte da loro.

    Spero di essere stato chiaro ma soprattutto di non avervi stressato con questo interminabile domanda.

    Grazie Nicola

  7. #7
    Da una rapida lettura del materiale presente in rete , il micro in questione , che fa parte della famiglia dei micro AVR prodotti dalla Amtel , usa come file di runtime i file con estensione .r90 appunto , e i file sorgente con estensione .s90 . Comunque sia , all'interno degli esempi visionati c'è sempre la funzione main() , ed è ovvio visto che stai usando un compilatore C , anche se per ambiente micro . Per cui credo che tu non possa usare il file in oggetto a meno di non conoscerne le funzionalità interne e il modo di richiamarle . Saluti

  8. #8
    grazie King,

    io cmq sono sempre in attesa che l'azienda fornitrice del prodotto mi faccia sapere qualcosa
    anche perchè leggendo alcuni pdf del prodotto mi sono soffermato su questa frase:

    ".........OWAP è una piattaforma aperta che può essere programmata a discrezione dell'utente mediante utilizo del pacchetto SDK (!!!immagino che per SDK si riferisca al compilatore IAR!!!!) e delle librerie API, fornibili su richiesta da audiotel Engineering....."

    Sembrerebbe quindi che il dispositivo si può programmare tranquillamente utilizzando le librerie standard del compilatore (quindi ad un livello basso) o con le API di cui sono sempre più convinto che non dispongo (quindi ad un livello piu alto) oppure non ci sia un modo particolare (mi riferisco alle numerose impostazioni/configurazioni del compilatore in questione da effettuare prima di ogni progetto) che permetta al compilatore di utlizzare l'unico file di libreria che dispongo ovvero quello di estensione .R90.


    Grazie Nicola

  9. #9
    Da un lettura più attenta sul sito del produttore si fa riferimento all' OWAP SDK come ad una piattaforma composta da Amtel JTAGICE , che presumo essere un emulatore real-time per i dispositivi AVR con interfaccia JTAG , e un CD con AMTEL Visual Studio 4.0 (l'ambiente di programmazione ), OWAP API , esempi applicativi e documentazione . A questo punto non mi pare di aver letto dell' IAR Embedded Workbench versione 4.10 :master: , sempre che non si faccia riferimento allo stesso ambiente ma con nomi diversi . Il mio consiglio quindi è di verificare se si hanno tutti gli strumenti necessari per operare , in caso contrario bisogna necessariamente contattare il produttore . Saluti

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463

    Moderazione

    Ho modificato il prefisso della discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.