utiliser variables de fonction dans interruption (microcontroleur)
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

utiliser variables de fonction dans interruption (microcontroleur)



  1. #1
    ioneron

    Lightbulb utiliser variables de fonction dans interruption (microcontroleur)


    ------

    Bonjour,
    je travaille actuellement sur un C8051F040 (Silicon labs) et j'ai un problème que je n'arrive pas à résoudre simplement :/
    Je programme en C.
    Le problème est comment utiliser une variable déclarée dans une fonction (donc qui n'est pas globale) dans une interruption ?

    Merci pour votre aide

    -----

  2. #2
    justinesportive

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    Bonjour, Il faut l'incrémenter votre fonction? Et quelle est la fonction exacte?
    A quoi elle sera associé (comme fonction) cette variable?

  3. #3
    lou_ibmix_xi

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    Le problème est comment utiliser une variable déclarée dans une fonction (donc qui n'est pas globale) dans une interruption ?
    Tu ne peux pas pour 2 raisons:
    - il faut que ta routine d'interruption ait la visibilité de la variable à utiliser
    - il faut que la variable "existe" au moment de la routine d'interruption, ce qui n'est certainement pas le cas avec une variable "automatique", qui n'existera plus une fois que tu es sorti de la fonction où elle est déclarée.

    Il te faut donc sortir la déclaration de ta variable. Si ta fonction et ta routine d'interruption sont dans le même fichier C, tu peux définir cette variable partagée dans ce même fichier C, elle ne sera globale qu'au sein de ce seul fichier C. Attention tout de même, il faudra qu'elle soit "volatile" (renseigne toi du pourquoi), et peut-être protégée contre les accès concurrents si les interruptions sont ré-entrantes.

  4. #4
    Jack
    Modérateur

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    Le problème est comment utiliser une variable déclarée dans une fonction (donc qui n'est pas globale) dans une interruption ?
    Pas très clair le rapport entre la fonction et l'interruption. La fonction dont tu parles est-elle celle qui est appelée par l'arrivée de l'interruption?

  5. A voir en vidéo sur Futura
  6. #5
    ioneron

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    Je veux envoyer un tableau de taille inconnu via une fonction (dont le tableau est l'entrée). La fonction stock donc le tableau de caractère à envoyer, puis l'envoie se fait par l'interruption de la liaison USART. Je suis arrivé à le faire marcher depuis la fonction :
    Code:
    void send_datas (char send[]){
      unsigned int k=0,i=0;
    	unsigned char string_length;
    	int SFRPAGE_SAVE = SFRPAGE; /* save current SFR Page */
    	SFRPAGE = UART0_PAGE;
    	
    	string_length = strlen(send);
    	for(i=0 ; i <= string_length-1 ; i++){
    		envoye = 0;
    		SBUF0 = send[i];
    		while(envoye != 1);
    	}
    
    avec en fonction interruption :
    
    void UART0 (void) interrupt 4{
    	int SFRPAGE_SAVE = SFRPAGE; /* save current SFR Page */
    	SFRPAGE = UART0_PAGE;
    	if(TI0 == 1){
    		envoye = 1;
    		TI0 = 0;
    	}
    Mais je voudrais que l'envoie soit traité depuis l'interruption pas depuis la fonction qui serait juste une interface pour récupérer les caractères
    Dernière modification par Jack ; 20/06/2016 à 13h26. Motif: Ajout balises code

  7. #6
    Jack
    Modérateur

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    ok, dans ce cas, suis les conseils avisés de lou_ibmix_xi.

    A+

  8. #7
    ioneron

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    D'accord, il n'y a pas moyent de déclarer la variable en globale dans la fonction une fois que l'on a sa taille ?

  9. #8
    Jack
    Modérateur

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    D'accord, il n'y a pas moyent de déclarer la variable en globale dans la fonction
    C'est antinomique: déclarer une variable comme globale doit se faire en dehors de toute fonction.

  10. #9
    ioneron

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    hum c'est fort dommage :/
    car lorsque l'on veut un tableau globale dont on ne connait pas la taille, on ne peut pas le créer a postériori ?

    En tout cas merci pour vos réponse

  11. #10
    Jack
    Modérateur

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    Tu dois bien connaitre la longueur maxi de ta trame, non?

    Sinon, il reste une solution: tu crées un pointeur global et tu fais une allocation dynamique dans ta fonction. Bien libérer la mémoire lorsque le dernier caractère est sorti.
    Cependant, le remède risque d'être pire que le mal car sur les petits µcontrôleurs, l'allocation dynamique est parfois impossible car elle nécessite pas mal de ressources mémoire.

  12. #11
    ioneron

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    je n'envoie pas des instructions de même longeur, c'est pour cela que la taille de mon tableau est variable et le recepteur derrière ne comprendra pas si je lui envoie des caractères en trop.
    Quand à l'allocation dynamique cela dépasse largement mes compétences ^^

  13. #12
    Jack
    Modérateur

    Re : utiliser variables de fonction dans interruption (microcontroleur)

    et le recepteur derrière ne comprendra pas si je lui envoie des caractères en trop
    Çà, ça se gère: tu peux mettre un marqueur de fin de données si tu envoies des codes ASCII par exemple. Si tu envoies des données brutes ( de 0 à 255), tu peux utiliser une 2ème variable globale qui contiendra le nombre de caractères effectifs du tableau.

Discussions similaires

  1. Pic C Appeler une fonction dans une interruption
    Par invite976e6cb2 dans le forum Électronique
    Réponses: 8
    Dernier message: 02/12/2012, 11h01
  2. Point critique dans une fonction à 2 variables
    Par 369 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 27/12/2010, 19h09
  3. probleme d'interruption microcontroleur ATMEGA32
    Par invitef7a62343 dans le forum Électronique
    Réponses: 1
    Dernier message: 25/06/2009, 09h17
  4. [PPE] Fonctionnement d'une interruption pour un microcontroleur
    Par invite257289a6 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/03/2008, 21h17
  5. [PPE] Fonctionnement d'une interruption pour un microcontroleur
    Par invite257289a6 dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 25/03/2008, 18h32