J'expérimente avec la programmation de systèmes embarqués sans métal dans Rust. L'une des opérations généralement effectuées dans le code de démarrage C consiste à initialiser le segment BSS à zéro pour toutes les variables globales ou non initialisées statiques.Comment écrire du code Rust qui place des globals/statiques dans un segment BSS peuplé?
Cependant, dans Rust, je n'arrive pas à comprendre comment créer des variables globales ou non initialisées statiques (même en utilisant le code unsafe
). En d'autres termes, je n'arrive pas à comprendre comment écrire du code Rust pour que le compilateur remplisse le segment BSS avec quelque chose.
J'ai essayé ...
static BSS_Data: i32 = unsafe { core::mem::uninitialized() };
.... mais le compilateur rejetèrent.
Existe-t-il un moyen d'écrire du code Rust (unsafe
ou autre) qui produira un segment BSS rempli? Le segment BSS est-il garanti être toujours vide dans tout programme écrit entièrement dans Rust?
** zéro ** initialisation du segment BSS pour toutes les variables ** ** initialisées globales ou statiques - qui ne voulez-vous? Si vous voulez qu'il soit initialisé à zéro, alors * l'initialiser à zéro *. Cela étant dit, * vous * devrez écrire n'importe quel code qui copie des valeurs hors de la mémoire flash et dans la RAM. C'est ce que signifie le bare-metal. – Shepmaster
Je ne sais rien de Rust, mais ne pouvez-vous pas simplement déclarer une variable statique et l'initialiser à zéro? Cela devrait le forcer à être alloué en .bss. – Lundin
@Lundin Si vous l'initialisez à zéro dans votre code, il ira dans le segment de données. – Verax