asm::delay() only blocks half the time intended on an STM32H7
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
- Domaine
- embedded-iot, performance
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
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
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de rust-embedded/cortex-m
-
Deprecation of `bare-metal`Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
rust-embedded/cortex-m#651 · 5 commentaires ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
rust-embedded/cortex-m#637 ·
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
rust-embedded/cortex-m#511 · 2 commentaires ·
-
Rename default branch to `main`Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 55/100
rust-embedded/cortex-m#700 · 1 commentaire ·
-
Add CFI directives to asm blocksOuverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
rust-embedded/cortex-m#695 ·
Toutes les issues de rust-embedded/cortex-m
Issues similaires
-
security
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Waschndolos/open-clubmanager#185 ·
Les mainteneurs répondent en général sous 1 jour
-
r-bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
servo/rust-smallvec#844 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
farion1231/cc-switch#9122 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
lbjlaq/Antigravity-Manager#3801 ·
Les mainteneurs répondent en général sous 1 jour
-
LIMIT inputs are named MIN/MAX instead of the standard MN/MX, so LIMIT(MN := ...) does not resolveOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour