Outils pour utilisateurs

Outils du site


start:esp32:alloc_interrup

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
start:esp32:alloc_interrup [2022/12/23 15:35] gerardadminstart:esp32:alloc_interrup [2023/01/27 16:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 68: Ligne 68:
  
 Bien que le framework prenne en charge cette fonctionnalité, vous devez l'utiliser avec beaucoup de prudence . Il existe généralement deux manières d'empêcher le déclenchement d'une interruption : désactiver la source ou masquer l'état de l'interruption périphérique . IDF ne gère que l'activation et la désactivation de la source elle-même, laissant les bits d'état et de masque à la charge des utilisateurs. Les bits d'état doivent soit être masqués avant que le gestionnaire qui en est responsable ne soit désactivé, soit être masqués puis correctement traités dans une autre interruption activée . Veuillez noter que le fait de laisser certains bits d'état non gérés sans les masquer, tout en désactivant les gestionnaires correspondants, entraînera le déclenchement indéfini de la ou des interruptions, entraînant ainsi un plantage du système. Bien que le framework prenne en charge cette fonctionnalité, vous devez l'utiliser avec beaucoup de prudence . Il existe généralement deux manières d'empêcher le déclenchement d'une interruption : désactiver la source ou masquer l'état de l'interruption périphérique . IDF ne gère que l'activation et la désactivation de la source elle-même, laissant les bits d'état et de masque à la charge des utilisateurs. Les bits d'état doivent soit être masqués avant que le gestionnaire qui en est responsable ne soit désactivé, soit être masqués puis correctement traités dans une autre interruption activée . Veuillez noter que le fait de laisser certains bits d'état non gérés sans les masquer, tout en désactivant les gestionnaires correspondants, entraînera le déclenchement indéfini de la ou des interruptions, entraînant ainsi un plantage du système.
-Référence API+ 
 + 
 +====Référence API==== 
 En tête de fichier En tête de fichier
  
Ligne 75: Ligne 78:
 Les fonctions Les fonctions
  
-esp_err_t esp_intr_mark_shared ( int intno , int cpu , bool is_in_iram ) +esp_err_t esp_intr_mark_shared ( int intno , int cpu , bool is_in_iram ) 
  
     *Marquez une interruption comme une interruption partagée.     *Marquez une interruption comme une interruption partagée.
Ligne 84: Ligne 87:
  
             --intno - Le numéro de l'interruption (0-31)             --intno - Le numéro de l'interruption (0-31)
- 
             --cpu - CPU sur lequel l'interruption doit être marquée comme partagée (0 ou 1)             --cpu - CPU sur lequel l'interruption doit être marquée comme partagée (0 ou 1)
- 
             --is_in_iram - L'interruption partagée est destinée aux gestionnaires qui résident dans l'IRAM et l'int peut être laissé activé pendant que le cache flash est désactivé.             --is_in_iram - L'interruption partagée est destinée aux gestionnaires qui résident dans l'IRAM et l'int peut être laissé activé pendant que le cache flash est désactivé.
  
-    *Retour +   
- +ESP_ERR_INVALID_ARG si cpu ou intno est invalide ESP_OK sinon
-        --ESP_ERR_INVALID_ARG si cpu ou intno est invalide ESP_OK sinon+
  
-esp_err_t esp_intr_reserve ( int intno , int cpu ) +esp_err_t esp_intr_reserve ( int intno , int cpu ) 
  
     *Réservez une interruption à utiliser en dehors de ce cadre.     *Réservez une interruption à utiliser en dehors de ce cadre.
Ligne 102: Ligne 102:
  
             *intno - Le numéro de l'interruption (0-31)             *intno - Le numéro de l'interruption (0-31)
- 
             *cpu - CPU sur lequel l'interruption doit être marquée comme partagée (0 ou 1)             *cpu - CPU sur lequel l'interruption doit être marquée comme partagée (0 ou 1)
  
Ligne 147: Ligne 146:
             *flags – Un masque ORred de ESP_INTR_FLAG_* définit. Celles-ci limitent le choix des interruptions parmi lesquelles cette routine peut choisir. Si cette valeur est 0, il allouera par défaut une interruption non partagée de niveau 1, 2 ou 3. S'il s'agit de ESP_INTR_FLAG_SHARED, il allouera une interruption partagée de niveau 1. Le réglage ESP_INTR_FLAG_INTRDISABLED reviendra de cette fonction avec l'interruption désactivée .             *flags – Un masque ORred de ESP_INTR_FLAG_* définit. Celles-ci limitent le choix des interruptions parmi lesquelles cette routine peut choisir. Si cette valeur est 0, il allouera par défaut une interruption non partagée de niveau 1, 2 ou 3. S'il s'agit de ESP_INTR_FLAG_SHARED, il allouera une interruption partagée de niveau 1. Le réglage ESP_INTR_FLAG_INTRDISABLED reviendra de cette fonction avec l'interruption désactivée .
  
-            intrstatusreg - L'adresse d'un registre d'état d'interruption+            *intrstatusreg - L'adresse d'un registre d'état d'interruption
  
-            intrstatusmask – Un masque. Si une lecture de l'adresse intrstatusreg a l'un des bits qui sont 1 dans le jeu de masques, l'ISR sera appelé. Sinon, il sera ignoré.+            *intrstatusmask – Un masque. Si une lecture de l'adresse intrstatusreg a l'un des bits qui sont 1 dans le jeu de masques, l'ISR sera appelé. Sinon, il sera ignoré.
  
-            handler – Le gestionnaire d'interruptions. Doit être NULL lorsqu'une interruption de niveau >3 est demandée, car ces types d'interruptions ne sont pas appelables en C.+            *handler – Le gestionnaire d'interruptions. Doit être NULL lorsqu'une interruption de niveau >3 est demandée, car ces types d'interruptions ne sont pas appelables en C.
  
-            arg - Argument facultatif pour passé au gestionnaire d'interruption+            *arg - Argument facultatif pour passé au gestionnaire d'interruption
  
-            ret_handle - Pointeur vers un intr_handle_t pour stocker un handle qui peut ensuite être utilisé pour demander des détails ou libérer l'interruption. Peut être NULL si aucun handle n'est requis.+            *ret_handle - Pointeur vers un intr_handle_t pour stocker un handle qui peut ensuite être utilisé pour demander des détails ou libérer l'interruption. Peut être NULL si aucun handle n'est requis.
  
-    Retour 
  
-        ESP_ERR_INVALID_ARG si la combinaison d'arguments est invalide. ESP_ERR_NOT_FOUND Aucune interruption libre trouvée avec les drapeaux spécifiés ESP_OK sinon+ 
 +        *ESP_ERR_INVALID_ARG si la combinaison d'arguments est invalide. ESP_ERR_NOT_FOUND Aucune interruption libre trouvée avec les drapeaux spécifiés ESP_OK sinon
  
 esp_err_t esp_intr_free ( intr_handle_t handle )  esp_err_t esp_intr_free ( intr_handle_t handle ) 
  
-    Désactiver et libérer une interruption.+====Désactiver et libérer une interruption.====
  
-    Utilisez un handle d'interruption pour désactiver l'interruption et libérer les ressources qui lui sont associées. Si le cœur actuel n'est pas le cœur qui a enregistré cette interruption, cette routine sera affectée au cœur qui a alloué cette interruption, bloquant et attendant jusqu'à ce que la ressource soit libérée avec succès. +    *Utilisez un handle d'interruption pour désactiver l'interruption et libérer les ressources qui lui sont associées. Si le cœur actuel n'est pas le cœur qui a enregistré cette interruption, cette routine sera affectée au cœur qui a alloué cette interruption, bloquant et attendant jusqu'à ce que la ressource soit libérée avec succès.
- +
-    Noter+
  
 +    
 +<note>
     Lorsque le gestionnaire partage sa source avec d'autres gestionnaires, les bits d'état d'interruption dont il est responsable doivent être gérés correctement avant de le libérer. voir esp_intr_disablepour plus de détails. Veuillez ne pas appeler cette fonction dans esp_ipc_call_blocking.     Lorsque le gestionnaire partage sa source avec d'autres gestionnaires, les bits d'état d'interruption dont il est responsable doivent être gérés correctement avant de le libérer. voir esp_intr_disablepour plus de détails. Veuillez ne pas appeler cette fonction dans esp_ipc_call_blocking.
 +</note>
  
-    Paramètres+Paramètres
  
-        handle – Le handle, tel qu'obtenu par esp_intr_alloc ou esp_intr_alloc_intrstatus +        *handle – Le handle, tel qu'obtenu par esp_intr_alloc ou esp_intr_alloc_intrstatus 
-    Retour+    
  
-        ESP_ERR_INVALID_ARG le handle est NULL ESP_FAIL n'a pas réussi à libérer ce handle ESP_OK sinon+        *ESP_ERR_INVALID_ARG le handle est NULL ESP_FAIL n'a pas réussi à libérer ce handle ESP_OK sinon
  
 int esp_intr_get_cpu ( intr_handle_t handle )  int esp_intr_get_cpu ( intr_handle_t handle ) 
  
-    Obtenir le numéro de CPU auquel une interruption est liée.+====Obtenir le numéro de CPU auquel une interruption est liée.====
  
-    Paramètres+Paramètres
  
-        handle – Le handle, tel qu'obtenu par esp_intr_alloc ou esp_intr_alloc_intrstatus +        *handle – Le handle, tel qu'obtenu par esp_intr_alloc ou esp_intr_alloc_intrstatus 
-    Retour+    
  
         Le numéro de cœur où l'interruption est allouée         Le numéro de cœur où l'interruption est allouée
/home/chanteri/www/fablab37110/data/attic/start/esp32/alloc_interrup.1671806109.txt.gz · Dernière modification : 2023/01/27 16:08 (modification externe)