Page 1 sur 1

Bare Metal !

Posté : lun. 1 févr. 2021 19:11
par Artemus24
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 ?

@+