asm::delay() only blocks half the time intended on an STM32H7

Ouverte
#430 14 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Calme
Stack technique
rust

Piste de recherche

Commencez par src/asm.rs, en particulier l’implémentation de asm::delay(), et reproduisez le comportement à l’aide de l’exemple minimal lié dans src/main.rs sur un STM32H7. Comparez le nombre de cycles demandé avec le délai observé et déterminez si l’implémentation tient compte du comportement d’exécution du H7. La tâche est terminée lorsqu’un délai de 4,000,000,000 cycles produit le délai prévu de 10 secondes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug

The asm::delay() function delays a program only by half the time/CPU cycles intended on an STM32H7.
I have prepared a somewhat minimal example here. My CPU clock is at 400 MHz and I specify a delay of 4_000_000_000 cycles which should lead to a 10 second delay. The actual delay is 5 seconds for me.

I have also confirmed the same behavior in other programs on an STM32H7 with much shorter timescales and looking at IOs on a scope. The delay is always exactly half the time expected.

One guess is that this is due to the dual issue pipeline of the H7 eating up two instructions per cycle.

Langage dominant
Rust
Étoiles
1k
Forks
202
Merge moyen
1 j 4 h
PR mergées (30 j)
2

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de rust-embedded/cortex-m

Toutes les issues de rust-embedded/cortex-m

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.