116 | | * '''seg_kernel''' est le segment contenant le code du système qui s'exécute en mode ''kernel''. Il s'agit principalement du Gestionnaire d'Interruptions, Exceptions, et Trappes (GIET) et du code des appels système. Ce segment est assigné à la RAM. L'adresse de base 0x80000000 est imposée par la spécification du processeur Mips32 qui impose que le point d'entrée est à l'adresse 0x80000180. On choisira une capacité de stockage de 4 Koctets. |
117 | | * '''seg_code''' est le segment contenant le code de l'application logicielle embarquée, qui s'exécute en mode ''user''. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00400000, et une capacité de stockage de 16 Koctets. |
| 114 | * '''seg_kcodel''' est le segment contenant le code du système qui s'exécute en mode ''kernel''. Il s'agit principalement du code du Gestionnaire d'Interruptions, Exceptions, et Trappes (GIET), du code des fonctions système, ainsi que du code des routines d'interruption (ISR, pour interrupt Service Routine). Ce segment est assigné à la RAM. L'adresse de base 0x80000000. On choisira une capacité de stockage de 64 Koctets. |
| 115 | * '''seg_kdata''' est le segment contenant les données privées du système d'exploitation. Il est assigné à la RAM. L'adresse de base est égale à 0x81000000. Sa capacité esr de 64Koctets. |
| 116 | * '''seg_kdata''' est le segment contenant les données non cachables du système d'exploitation. Il est assigné à la RAM. L'adresse de base est égale à 0x82000000. Sa capacité esr de 64Koctets. |
| 117 | * '''seg_code''' est le segment contenant le code de l'application logicielle embarquée, qui s'exécute en mode ''user''. Il est assigné à la RAM. On choisira pour adresse de base la valeur 0x00400000, et une capacité de stockage de 64 Koctets. |
120 | | |
121 | | Remarquez que les 2 segments correspondant aux périphériques (seg_tty et seg_gcd), ainsi que les deux segments correspondant au code système sont dans la zone protégée de l'espace adressable, qui n'est accessible qu'en mode ''kernel'' (adresses supérieures à 0x80000000). |
122 | | |
123 | | '''Remarque importante''' : Certaines informations sont utilisées à la fois par le matériel et par le logiciel embarqué. Elles doivent donc être définies à deux endroits : dans le fichier '''tp3_top.cpp''' (pour le matériel) et dans le fichier '''soft/ldscript''' (pour le logiciel) : |
| 120 | * '''seg_tty''' est le segment associé au contrôleur de terminaux TTY. On prendra pour adresse de base la valeur 0x90000000, et pour longueur 64 octets, ce qui permet d'adresser jusqu'à 4 terminaux indépendants. |
| 121 | * '''seg_gcd''' est le segment associé au coprocesseur GCD. On prendra pour adresse de base la valeur 0x95000000. La longueur de 16 octets correspond aux quatre registres adressables de ce composant. |
| 122 | |
| 123 | Remarquez que les 2 segments correspondant aux périphériques (seg_tty et seg_gcd), le segment contenant le code de boot, ainsi que les 3 segments correspondant au système sont dans la zone protégée de l'espace adressable, qui n'est accessible qu'en mode ''kernel'' (adresses supérieures à 0x80000000). |
| 124 | |
| 125 | Les adresses de base sont utilisées à la fois par le matériel et par le logiciel embarqué. Elles doivent donc être définies à deux endroits : dans le fichier '''tp3_top.cpp''' (pour le matériel) et dans le fichier '''soft/ldscript''' (pour le logiciel) : |