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

Bibliothèques, systèmes et outils C Discussion :

Programmer un OS en c et contrôler un pixel


Sujet :

Bibliothèques, systèmes et outils C

  1. #21
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 437
    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 : 17 437
    Points : 43 078
    Points
    43 078
    Par défaut
    Pourquoi c'est différent sur un PC ? Je pense au mode protégé par exemple car si j'ai compris, c'est un bit à passer à 1 dans un registre et si l'adresse du registre est connu alors on peut le faire en C ? Non ?
    C'est un peu plus compliqué que ça.

    Pour activer le mode protégé, il faut activer le bit de poids faible du registre cr0 à 1 après avoir généré la GDT.

    en asm x86 notation Intel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mov eax,cr0
    or al,1
    mov cr0,eax
    Je ne sais pas si l'assembleur inline des compilateurs donnent l'accès aux registres de commande cr0 à cr3 (ou jusqu'à cr4 je sais plus)

    Par ailleurs, ce simple code ne suffira pas, il faudra créer la GDT, puis l'activer via l'opcode lgdt, qui n'est peut-être pas non plus géré par le code inline des compilateurs.

    Dans le cas de Linux, par exemple, tu as un code amorce en assembleur.

    Un, microcontrôleur, c'est plus simple à programmer qu'un PC par exemple. Un micro-contrôleur est plus simpliste, tu ne gères pas de segmentation ou pagination, ni x cartes graphiques de x constructeurs. L'utilisation d'un afficheur 7 segments par exemple est beaucoup plus simple que d'afficher du texte avec une police bine précise. Et encore une fois, le C ne fait pas tout, ce sont les biothèques annexes qui permettent d’arriver à quelque chose. Tu dois utiliser probablement ulibc qui est une micro libc adaptée aux micro-controleurs.
    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

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Vincent PETIT Voir le message
    Moi qui travaille sur microcontroleur, le C permet de faire vraiment tout. Il suffit simplement de connaître l'adresse des registres et avec un pointeur c'est réglé.

    Pourquoi c'est différent sur un PC ? Je pense au mode protégé par exemple car si j'ai compris, c'est un bit à passer à 1 dans un registre et si l'adresse du registre est connu alors on peut le faire en C ? Non ?
    Le problème, c'est que les registres du microprocesseur n'ont pas d'adresse mémoire, il n'y a aucun moyen d'y accéder explicitement en C standard.
    Et sur x86, les registres de contrôle des périphériques n'ont pas d'adresse mémoire non plus: Ils ont leur propre espace d'adressage, et il n'y a pas de moyen en C standard pour y accéder.
    Et les moyens non-standard doivent eux-mêmes être programmés en assembleur (ou du moins, dans un autre langage que le C).

    À mentionner également, la gestion d'interruptions, où l'on ne peut pas se contenter de mettre un pointeur de fonction normal parce que le retour d'interruption se fait par une instruction différente du retour de fonction, l'accès au contexte pour du multithreading, la gestion de la MMU quand elle fait partie du proc (car elle est alors contrôlée directement par des registres du proc, donc sans adresse) etc.

    En fait, le seul moyen de faire un OS entièrement en C est de disposer d'extensions au langage (une plate-forme non-standard, donc), extensions qui pourraient être matérielles (il est théoriquement possible de créer un processeur qui expose ses registres en tant qu'adresses mémoire, et qui exécute des instructions spéciales quand on écrit à certaines adresses).
    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. #23
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 189
    Points : 11 571
    Points
    11 571
    Par défaut
    Je comprends mieux et ce n'est pas si différent des micro-contrôleurs finalement
    Le langage C ne permet pas, non plus, d'accéder aux registres de travail du CPU, qui se trouve dans le micro-contrôleur.

    Merci pour cet éclairage.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  4. #24
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le problème, c'est que les registres du microprocesseur n'ont pas d'adresse mémoire, il n'y a aucun moyen d'y accéder explicitement en C standard.
    Il parlait des registres en mémoire c'est assez courant sur micro-contrôleur (mais pas qu'eux) d'avoir toutes les entrée/sortis sur une adresse mémoire.

    @Vincent PETIT
    Difficile de comparer aussi les micro-controleur moderne , les instructions sont sur 1 cycle et ils ont entre 16 et 32 registres ,ils sont donc fait spécialement pour être coder en C du coup toute l'architecture derrière est penser ainsi.
    Loin est l'époque ou certain instruction (pour gérer les différentes interruption IRQ par exemple) , ce faisait obligatoirement en assembleur
    De plus un compilo fera sûrement mieux (par contre pour du z80 ou du 6502 il n'y a pas de compilateur digne de ce nom).
    Sur X86 il y'a pas mal instruction spécifique je suppose que le compilateur n'utilisera pas.

Discussions similaires

  1. Contrôler la programmation d'un fichier ASP
    Par audrey1912 dans le forum ASP
    Réponses: 5
    Dernier message: 19/04/2011, 09h45
  2. Réponses: 11
    Dernier message: 28/03/2011, 20h28
  3. Réponses: 4
    Dernier message: 07/02/2011, 21h38
  4. Contrôler votre écran LCD par programmation
    Par khayyam90 dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 23h35
  5. Réponses: 1
    Dernier message: 04/06/2008, 20h13

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