Aller au contenu

Messages recommandés

Posté(e) (modifié)

hmm, argh... quand on va dans le menu "print from sd" ca semble bloquer, un conflit dma on dirait

oui, juste avec le code async... erk, faut un flag pour gérer ca

Modifié (le) par Epsylon3
Posté(e)

On retombe sur le semaphore, ou bien avant chaque acces DMA, on verifie qu'il est libre.

Posté(e)

Mais nooon. Mais vu qu'il faut tester a chaque fois, avant de lancer le DMA qu'il est libre, c'est pour cela que je suggerais de mettre le test au debut des deux procedures DMA.. comme ca, au pire, on attend la fin du transfert. On termine le transfert courant, et on redemarre un nouveau DMA. 

Au mieux, le DMA est libre, et on termine immediatement, et on en recommence un autre.

Posté(e)

Bhein on va tester ca.... 

Au pire, la premiere fois que l'on rentre dans la procedure DMA, on va fermer un DMA qui n'a jamais ete ouvert... Ca devrait pas gener de trop.

On peut mettre un flag d'init, pour que la premiere fois, on n'execute pas la procedure de fermeture du DMA.

Apres, je vois pas trop ce qui pourrait gener... 

Posté(e)

@Epsylon3

Il y a une hypothese importante dans le mecanisme du DMA : Que le canal en question ne soit pas utilisé ailleurs dans le code. Et a priori, il y a du DMA dans le SPI et dans la SDcard... 

J'espere qu'il y a un canal de libre! Sinon, en effet l'asynchrone va poser probleme. 

Posté(e)

bon et le capteur doit bien avoir FIL_RUNOUT_INVERTING true

c'etait un probleme ici... je pense que le contact etait à coté du fil... arf

Posté(e)
il y a 18 minutes, Acidounet a dit :

Là on arrive plus à suivre 😄

C'est pourtant vachement simple : le DNA du buffer double asynchrone rentre peut-être pas dans le SPI, si le FIL_RUNOUT_INVERTING est à true et que l'init est pas faite correctement !🤣

  • Haha 3
Posté(e) (modifié)

yep 😛 enfin la ca marche bien... c'est juste l'async qui "peut" faire des conflits avec la carte SD, pas le transfert dma en lui meme.

le capteur, rien à voir, mais fallait que je corrige, de ma faute, et du gars qui a codé ca en classes c++ dérivées...

Modifié (le) par Epsylon3
Posté(e)

Ah bhein avec un commentaire comme ca, @boleofr va enfin tout comprendre! LOL. 

Des que je suis à la maison, je mesure les gains en vitesse d'affichage, et je passe le test de l'analyseur logique pour verifier, ou pas, la presence de sauts de pas. 

Posté(e)

@Hobi plus je lis et plus je me dis que ça manque de variété ce code source marlin... On devrait y ajouter du lisp, de l'ada83 à défaut d'y mettre une peu de fortan ou de cobol...

Posté(e) (modifié)

@boleofr Ahhh je te retrouve enfin! mais j'y aurais bien rajoute un peu de python, et de basic... LOL

 

@Epsylon3 : La SDcard, c'est normal que ca pose probleme . Faut  prendre un autre canal. On va devoir lister tous les canaux DMA. il y en a 12. 

#define FSMC_DMA_DEV DMA2
#define FSMC_DMA_CHANNEL DMA_CH4
 
#define SDIO_DMA_DEV DMA2
#define SDIO_DMA_CHANNEL DMA_CH4
 
Modifié (le) par Hobi
  • Haha 1
Posté(e)
il y a 30 minutes, boleofr a dit :

C'est pourtant vachement simple : le DNA du buffer double asynchrone rentre peut-être pas dans le SPI, si le FIL_RUNOUT_INVERTING est à true et que l'init est pas faite correctement !🤣

Toi t as rien compris !!! on parle de DMA pas de DNA tsss !!! 

 

Citation

 

DMA est un sigle qui signifie  rayer la mention :

en français

DMA est un code qui signifie :

  • Dominique
    • selon la liste des codes pays du CIO,
    • selon la liste des codes pays utilisés par l'OTAN, alpha-3.

DMA est un mot qui peut désigner :

 

  • Bon j arrete le HS mais au moins j essaie de comprendre 😄
  • Haha 1
Posté(e) (modifié)

https://en.wikipedia.org/wiki/Direct_memory_access

yep bon... à tester... et deja voir la difference de mesure avec le bool on/off sans sd...

le probleme c'est qu'ils sont définis en dehors du repo... ces defines

git grep dma_init, il semble n'y en avoir que 2 mais bon 😛
Marlin/src/HAL/HAL_STM32F1/HAL_sdio_STM32F1.cpp:41:  dma_init(SDIO_DMA_DEV);
Marlin/src/HAL/HAL_STM32F1/u8g_com_stm32duino_fsmc.cpp:87:      dma_init(FSMC_DMA_DEV);
Marlin/src/lcd/menu/touch/main.cpp:61:  dma_init(FSMC_DMA_DEV);

 

Citation

The flexible 12-channel general-purpose DMAs (7 channels for DMA1 and 5 channels for DMA2) are able to manage memory-to-memory, peripheral-to-memory and memory-toperipheral transfers. The two DMA controllers support circular buffer management, removing the need for user code intervention when the controller reaches the end of the buffer. Each channel is connected to dedicated hardware DMA requests, with support for software trigger on each channel. Configuration is made by software and transfer sizes between source and destination are independent. The DMA can be used with the main peripherals: SPI, I2C, USART, general-purpose, basic and advanced-control timers TIMx, DAC, I2S, SDIO and ADC.


bon je tente CH5 alors ? 😛 ca semble ok a premiere vue..

Edit: Oui pushé et async réactivé

Modifié (le) par Epsylon3
  • J'aime 1
  • +1 2
  • Merci ! 1
Posté(e) (modifié)

LOL, et je pense qu'on va mettre un switch de compilation dans Config.h, pour écran ou pas d’écran CAR :

Meme si nous avons gagne en temps d'affichage, j'ai sur le Gcode en PJ, une grosse rondelle, composée de cercles , certes difficile pour le planner, environ 60 sauts, avec ou sans optimisation de notre vitesse d'affichage. Ça tend à démontrer que l’équipe de Marlin a en effet introduit un bug en Septembre dernier.... Et que cela ne dépend pas vraiment de notre morceau d'affichage. Mon analyseur se déclenché bien, et je sens bien les petits sauts à chaque fois....

Je vais prendre le meme Gcode, et tester en enlevant tout l'affichage. Si pas de sauts, oui, on va faire une version sans affichage. De toute façon, cette partie n'a pas été modifiée. 

CFFFP_test_disc.gcode

Modifié (le) par Hobi
Posté(e)

oui la mise en veille de l'affichage aussi 😛 a faire plus tard, c'est pour ca que j'ai lié le pdf...

...et commencé à "brancher" le sleep on/off, meme si en commentaires pour le moment

Posté(e)

@Hobi.... 😅

image.thumb.png.be8c7d2b8fa5ad2401dea7d797ae9e20.png

Bon sinon il y a au moins un problème avéré avec les cartes V08 et le BL-Touch.

Posté(e)

Tiens tu es la à cette heure! 

Je suis en train de découper tout l'affichage pour faire un test de saut. La détection à l'air assez fiable, et mon Gcode force bien sur le planner car il ralentit la vitesse quand le niveau de la fifo devient trop bas. Je fais un joli stress test. D'ici 10 min , on va savoir si sans écran on a des sauts, ou pas...

Posté(e)
il y a 25 minutes, Hobi a dit :

Tiens tu es la à cette heure! 

Je suis en train de découper tout l'affichage pour faire un test de saut. La détection à l'air assez fiable, et mon Gcode force bien sur le planner car il ralentit la vitesse quand le niveau de la fifo devient trop bas. Je fais un joli stress test. D'ici 10 min , on va savoir si sans écran on a des sauts, ou pas...

Et oui. Figure toi que j'aidais des membres de ce forum cet aprem mais dans la vraie vie ! 😛 

Et la debug du BL sur V08.

Posté(e)

Bon, resultat des tests : La ou j'ai 60 sauts avec l'ecran, que cela soit avec ou sans DMA accélérateur, il en reste 5 sans écran. C'est bien mieux, mais pas idéal. Et ce sont toujours des sauts de 16.2ms. Toujours. 

... zut.

Ceci est valable a 100 ou a 170mm/s . Meme resultat, mais la vitesse d'impression de toute facon diminue car le planner a son buffer interne trop peu plein, et ralentit la machine afin d'eviter les fameux sauts. 

Je pousse tout ca chez Marlin...

Posté(e)

j'ai pas cherché a le faire mais il doit y avoir qqchoise pour mesure le temps "cpu" via un compteur d'instructions... d'une fonction

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
  • Sur cette page :   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
  • YouTube / Les Imprimantes 3D .fr

×
×
  • Créer...