Le linux original sera très difficile à porter parce que ces microprocesseurs ne comportent pas de gestionnaire de mémoire paginée: ie tu as 64 kO de RAM point barre.
Sinon faut faire des bidouillages monstrueux mais pas irréalisables.
Moi je pensais utiliser comme RAM des barrettes SIMM 30 broches (j'en ai récupéré pas mal) mais le pb c'est que c'est de la RAM dynamique qu'il faut valider toutes le n millisecondes. Donc faut un chip qui gère cette mémoire.
Sinon pour commencer:
Je vous propose d'étudier une carte qui comporte juste le micro et sa circuiterie obligatoire (reset, alim, oscillateur) avec un connecteur d'extension qui comporte tous les signaux nécessaires pour y brancher ce qu'on veut. Ca pue l'UTIB vous trouvez pas? Evidemment!
Je veux juste vous dire un truc avant de continuer:
Si quelqu'un ne comprend pas ce que je dis, qu'il me demande de préciser.
Ca parait évident mais certains seraient tentés de dire d'aller chercher dans les docs externes. C'est pas du tout le but. Moi je voudrais que toutes les docs nécessaires à la compréhension et à l'élaboration du projet soient directement accessibles par lien hypertexte direct (comme j'i fait plus haut).
Autre chose: Pour faire un projet suivi, faut pas partir de la fin. Alors Linux, on le mettra dedans quand on arrivera à faire marcher un programme monotache correctement.
Par exemple, pour notre robot E=M6, certains de notre club voulaient que je fasse l'asservissement tout de suite alors que le système de retournement des palets ne marche pas encore (Pour ceux qui connaissent pas:
Le site de l'ANSTJ.
Mais retournons à nos moutons.
Pour commencer, sachez que le 8052 (et dérivés) a 3 espaces de mémoire séparés.
La RAM interne (256 octets)
La ROM (EPROM) externe 64 KB au maximum car il y a 16 lignes d'adresse.
La RAM externe: 64 KB max mais il faut laisser de la place en utiliser une partie en ports d'E/S.
Donc au début on utilisera juste:
Une EPROM de 32 kilo-octets. Si vous avez accès à des programmateurs c'est OK sinon quand vous voudrez passer à la pratique il vous faudra un émulateur, c'est plus pratique.
Koik-c'est? Un montage qui vous évite d'effacer votre EPROM à chaque modification de programme. On gagne bcp de temps, puisque la ROM est simulée par une RAM.
Moi j'ai fait celui d'
ELEKTOR de Janvier 2001 , il marche très bien.
Il ne demande aucun composant exotique sauf un microcontrôleur qui vaut dans les 20€, qu'il vous faut commander chez elektor. Ils peuvent aussi vous envoyer le circuit imprimé:
Circuit imprimé émulateur
Programme original
Nouveau prog bien mieux
Pour les achats allez voir sur leur site aussi.
Voici les références en provenance de leur site:
Simulateur d'EPROM
000153-1 circuit imprimé 28,05€
000153-11 disquette (programme + source) 7,50€ mais gratuit à télécharger lol! cher la disquette!
000153-41 AT89C2051 programmé 14,55€
Le CI est cher, peut-être que je peux en faire un ou deux sur la graveuse de l'école:
Vous m'envoyez une plaque de CI présensibilisée positive deux faces, je vous la renvoie gravée et éventuellement percée si vous avez pas de perceuse. Par contre les trous sont pas métallisés donc il faut jouer du fer à souder pour souder les composants des deux côtés. Ca se fait bien.
Pour le compilateur SDCC ce serait bien de rajouter une RAM de 32 kilo-octets aussi.
Pour le moment donc, ce que vous avez à faire si vous voulez m'aider, c'est comprendre comment marche le microprocesseur (imprimez la datasheet du 8052 qui est bien faite). Posez moi des questions pour ce qui coince, je crois que je pourrai vous expliquer.
Il pourrait être super bien d'écrire un simulateur sur PC qui interprète les programmes asm pour les tester: Je suis en train de le faire, mais j'ai un petit problème:
pour l'instruction ADD (cf datasheet, c'est celle que je suis en train de coder en ce moment) il me faut activer les flags du microcontroleur virtuel selon le résultat que j'obtiens. Mais comment faire pour détecter que j'ai un carry, ou un overflow? Je sais juste que:
ADD adds the byte variable indicated to the Accumlator, leaving the result in the Accumulator.
> ADD ajoute la variable octet indiquée à l'accumulateur, et laisse le résultat dans l'accumulateur
The carry and auxiliary-carry flags are set, respectively, if there is a carry-out from bit 7 or bit 3, and cleared otherwise.
>Les indicateurs "retenue" et "retenue auxiliaire" sont activés, respectivement, si il y a eu une retenue après l'addition des bits 7 ou des bits 3, sinon ils ne sont pas activés.
When adding unsigned integers, the carry flag indicates an overflow occured.
>Quand on ajoute des entiers non signés, l'indicateur de retenue indique qu'il s'est produit un dépassement.
OV is set if there is a carry-out of bit 6 but not out of bit 7, or a carry-out of bit 7 but not bit 6; otherwise OV is cleared.
>L'indicateur de dépassement (OVerflow) est activé si il y a une retenue après l'ajout des bits 6 mais pas après des bits 7, ou si il y a une retenue après les bits 7 mais pas après les bits 6.
When adding signed integers, OV indicates a negative number produced as the sum of two positive operands or a positive sum from two negative operands.
>Quand on ajoute des entiers signés, OV indique qu'un nombre négatif a été produit par la somme de deux entiers positifs, ou qu'un nombre positif a été produit alors qu'il était la somme de deux négatifs.
On fait comment pour détecter qu'il y a eu un indicateur mis? C'est pas si évident.
Les entiers signés s'entendent codés en complément à deux:
0x00 ----- 0x7F 0x80 ----- 0xFF
0 ---------- 127 -128 ----- -1
Autre note:
Je rapatrie chez moi toutes les docs de ce forum, sur un CD. Quand il sera plein (ce sera vite fait), je l'enverrai aux membres du projet.