Bare Metal !

On peut difficilement être plus proche du cœur du CPU qu'avec l'assembleur...

Modérateur : Francois

Répondre
Artemus24
Raspinaute
Messages : 749
Enregistré le : ven. 15 sept. 2017 19:15

Bare Metal !

Message par Artemus24 » lun. 1 févr. 2021 19:11

Salut à tous.

Je sais faire clignoter une led à partir d'un exécutable de nom kernel.bin dans la Raspberry pi zéro.

Pour l'instant, j'essaye de normaliser mon programme à partir du fichier linker.ld. Le voici :

Code : Tout sélectionner

ENTRY(_start)

MEMORY
{
        ram   (rwx) : ORIGIN = 0x0000, LENGTH = 0x0100
        stack (rwx) : ORIGIN = 0x0100, LENGTH = 0x0100
        rom   (rx)  : ORIGIN = 0x0200, LENGTH = 0x0100
}

SECTIONS
{
        .data  : { *(.data) } > ram
        .bss   : { *(.bss)  } > ram
        .text  : { *(.text) } > rom
}
J'aimerai gérer la pile (sp = stack pointer) dans le source assembleur. Deux points que j'aimerai résoudre :

a) ma pile, dans le fichier "linker.ld", se nomme "stack". Elle peut se trouver n'importe où dans l'exécutable.
Comment faire pour dire que l'adresse dont j'ai besoin se trouve à la fin de la pile ? En principe, c'est l'adresse 0x0200.

b) à partir de la déclarative __stack__ qui va contenir l'adresse de la pile, comment puis-je faire dans le programme pour la gérer ?
Dans un premier temps, j'indiquer son adresse ;

Code : Tout sélectionner

ldr	r0,__stack__
ldr	sp,[r0]
Mais comment être certain que je ne vais rien écraser par ailleurs, voire que ma pile ne soit pas écrasé par une donnée ?

@+
--> RPI4B/8GB + Argon FanHAt
--> RPi0v1.3, RPi0W, Rpi3A+, Rpi3B+
--> Rpi0WH + Tuner TV HAT
--> RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
--> RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB

Répondre

Retourner vers « Assembleur »