IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Utiliser les threads POSIX sans OS


Sujet :

POSIX C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Utiliser les threads POSIX sans OS
    Hello,

    Je souhaite développer une application en C qui utilise des threads POSIX pour une carte STM32F4-discovery. Je n'ai pas prévu de mettre un OS temps réel sur la carte, j'utilise simplement les librairies de ST et je cross compile mon appli avec gcc-arm-none-eabi.

    Savez-vous s'il est possible d'utiliser POSIX sans OS ? ou faut-il obligatoirement un OS temps réel qui implémente cette surcouche POSIX ?

    Dans les libs fournies avec gcc-arm-none-eabi, j'ai bien un fichier posix.h, mais les prototypes des fonctions sont entourées par un #if defined (RTEM), ce qui me pousse à penser qu'on ne peut utiliser POSIX que dans ce cas ? Sur les forums POSIX, j'ai l'impression que tout le monde utilise soit un OS, soit cygwin.

    Merci pour votre aide,
    Marc

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    27 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 27 326
    Points : 41 367
    Points
    41 367
    Par défaut
    J'ai du mal à comprendre la question. Qu'appelles-tu POSIX ici?

    Parce que le standard POSIX de base n'a pas grand-chose à voir avec le fait qu'un OS soit temps réel ou non, c'est un ensemble de fonctions que le runtime C (et dans le cas des appels système, l'OS) doit mettre à disposition des programmes...

    Si c'est pour les fonctions de multithreading de POSIX, elles sont de nos jours construites sur l'OS, et même quand ce n'est pas le cas elles nécessitent un minimum de support de sa part (au minimum une temporisation capable d'interrompre le flux normal d'un programme, comme alarm()/SIGALRM).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci Médinoc pour ta réponse.
    Oui, je m'exprime mal, en effet (ma question n'a rien avoir avec le temps réel et quand je parle de posix, je parle des fonctions pthreads posix)

    Sur Linux (ou Cygwin), j'ajoute un #include <pthread.h> qui me permet d'utiliser les fonctions POSIX relatives aux threads (pthreade_create...).
    De ce que je comprends de ta réponse, c'est l'OS qui permet ça ?

    Si je reformule ma question, ça donne :
    Est-ce qu'il est possible de faire la même chose mais en compilant (avec gcc-arm-none-eabi) pour une carte qui n'héberge pas d'OS ?

    J'espère avoir été un peu plus clair
    Marc

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    août 2011
    Messages
    16 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 16 298
    Points : 40 161
    Points
    40 161
    Par défaut
    Ca me parait pas gagné, les fonctions POSIX sont dans les appels systèmes, donc sans OS ... Je pense qu'il te faut au moins une libc peut-être genre µ-libc
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 4 459
    Points : 13 560
    Points
    13 560
    Billets dans le blog
    1
    Par défaut
    Tu souhaites faire des threads, mais tu ne souhaites pas avoir d'OS ? Quelque chose m'échappe... Les threads, c'est un peu la base des OS modernes.

    POSIX définit un ensemble d'API pour des fonctionnalités communes, comme créer des threads, ouvrir une socket, etc. POSIX ne veut pas dire OS, surtout dans l'embarqué où la notion d'OS n'a pas vraiment la même notion que sur PC. En effet, un OS pour PC fournit des threads et aussi tous les mécanismes de drivers, de systèmes de fichiers, d'affichage, etc, et les API sont compatibles POSIX. Ce n'est pas le cas dans l'embarqué où un OS est généralement limité aux threads, aux sémaphores / mutex, files de messages, etc, souvent non compatibles POSIX. Mais tu peux donc trouver des systèmes de fichiers POSIX sans avoir d'OS, ça me semble envisageable.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Hello,

    Merci pour vos réponses.
    Ce n'est pas franchement que je ne veux pas utiliser d'OS, c'est plutôt pour savoir si c'était nécessaire/recommandé pour utiliser les threads posix ou si on pouvait faire sans.
    De ce que je comprends, les OS (et notamment les OS temps réels) sont justement fait pour ça. Autant donc les utiliser
    Plus qu'à trouver lequel, je vais me renseigner, merci.

    Marc

  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    mai 2004
    Messages
    10 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : mai 2004
    Messages : 10 129
    Points : 28 008
    Points
    28 008
    Par défaut
    Citation Envoyé par Marc9101 Voir le message
    Je souhaite développer une application en C qui utilise des threads POSIX pour une carte STM32F4-discovery. Je n'ai pas prévu de mettre un OS temps réel sur la carte, j'utilise simplement les librairies de ST et je cross compile mon appli avec gcc-arm-none-eabi.

    Savez-vous s'il est possible d'utiliser POSIX sans OS ? ou faut-il obligatoirement un OS temps réel qui implémente cette surcouche POSIX ?
    Très simple : est-ce que les librairies fournies par ST pour cette carte supportent les threads POSIX ou non ? Si oui, tu n'as besoin de rien, et si non, tu dois avoir quelque chose qui les implémente ; ce quelque chose peut-être du code "maison", un OS, des lib tierces, ...
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 4 459
    Points : 13 560
    Points
    13 560
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Marc9101 Voir le message
    Plus qu'à trouver lequel, je vais me renseigner, merci.
    Je te conseille FreeRTOS. Simple, gratuit, efficace.

    http://freertos.org/

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    juin 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2015
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Oui je suis parti sur FreeRTOS après quelques recherches, tu confirmes mon choix, merci
    Marc

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    juin 2009
    Messages
    4 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : juin 2009
    Messages : 4 459
    Points : 13 560
    Points
    13 560
    Billets dans le blog
    1
    Par défaut
    Bon ben on est d'accord !

    J'aime cet OS, je l'utilise dans le cadre du boulot. L'usage est presque limité aux threads et sémaphores et je trouve qu'il a l'avantage d'être très simple à mettre en oeuvre. J'ai dû mettre moins de 2 heures à faire des threads qui font clignoter des LED sur un carte de démo IAR en prenant les projets exemples IAR et en rajoutant moi-même l'OS. La documentation est bien. Je ne suis pas fan de la notation hongroise mais l'API est assez agréable. C'est gratuit. Il y a des exemples pour des tas de cartes.

    Je pense que ça devrait répondre à ton besoin. Tu nous diras si ce n'est pas le cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser les threads dans application Struts
    Par rach375 dans le forum Struts 1
    Réponses: 7
    Dernier message: 18/09/2006, 12h32
  2. Pourquoi utiliser les fonctions POSIX ?
    Par sportBlond dans le forum Langage
    Réponses: 5
    Dernier message: 04/09/2006, 18h11
  3. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 15h04
  4. BeginInvoke (utiliser les threads)
    Par the big ben 5 dans le forum Delphi
    Réponses: 6
    Dernier message: 16/05/2006, 19h30
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo