PIC multitache
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

PIC multitache



  1. #1
    senchi.souma

    PIC multitache


    ------

    Bonsoir tout le monde,
    Afin de réaliser un programme en C à implémenter dans un PIC qui permet un multitâche à l'aide du noyau temps réel OSA, j'ai rencontré un problème au niveau de l'exécution des 2 tâches crées. En effet, la première tâche déclarée s’exécute correctement tandis que la deuxiéme ne fonctionne pas sachant que les deux tâches ont le même degré de priorité. Pour régler le probléme existe t-elle une directive qui doit être utilisée et qui permet de jongler entre les tâches ou quoi au juste?!
    (NB: Simulation effectuée sous ISIS)
    Merci d'avance pour votre aide

    -----

  2. #2
    RISC

    Re : PIC multitache

    Salut,

    Quel PIC.... parmi les 900 références ??
    Ton programme ?

    a+

  3. #3
    senchi.souma

    Re : PIC multitache

    Bonsoir,
    Les PIC16F et PIC18F
    et Voici le programme:



    #include <osa.h>

    //****************************** ****************************** ******************
    //
    // Constants
    //
    //****************************** ****************************** ******************

    //------------------------------------------------------------------------------
    #if defined(P18F252) || defined(P18F258) || defined(P18F242) || defined(P18F248)\
    || defined(P16F873) || defined(P16F876) || defined(P16F873A) || defined(P16F876A)
    //------------------------------------------------------------------------------

    #define PORTA_CONST 0x00
    #define TRISA_CONST 0x01

    #define PORTB_CONST 0x00
    #define TRISB_CONST 0x01

    #define PORTC_CONST 0x00
    #define TRISC_CONST 0x00

    #define pin_BUTTON PORTB.B0
    #define PORTLEDS PORTC
    #define PORTLED2 PORTD

    #define NUMBER_OF_LEDS 8
    #define TABLE_MASK 7

    //------------------------------------------------------------------------------
    #elif defined(P18F452) || defined(P18F458) || defined(P18F442) || defined(P18F448)\
    || defined(P16F877) || defined(P16F874) || defined(P16F877A) || defined(P16F874A)
    //------------------------------------------------------------------------------

    #define PORTA_CONST 0x00
    #define TRISA_CONST 0x01

    #define PORTB_CONST 0x00
    #define TRISB_CONST 0x01

    #define PORTC_CONST 0x00
    #define TRISC_CONST 0x00

    #define PORTD_CONST 0x00
    #define TRISD_CONST 0x00

    #define PORTE_CONST 0x00
    #define TRISE_CONST 0x00

    #define pin_BUTTON PORTB.B0
    #define PORTLEDS PORTC
    #define PORTLED2 PORTD

    #define NUMBER_OF_LEDS 8
    #define TABLE_MASK 7

    //------------------------------------------------------------------------------
    #endif
    //------------------------------------------------------------------------------


    //------------------------------------------------------------------------------
    // Timers
    //------------------------------------------------------------------------------

    // Timer0 used as a counter for software PWM

    #define T0CON_CONST 0x41 // prs = 4 (period = 256 * 4 * 0.2us = 200 us)
    // 8-bit mode
    // TImer2 used for system ticks

    #define T2CON_CONST 0x25 // post = 8, period = 250*4*5* 0.2 us = 1 ms
    #define PR2_CONST (250-1)
    #define ms / 1 //

    //****************************** ****************************** ******************
    //
    // LED's brightness table
    //
    //****************************** ****************************** ******************


    //------------------------------------------------------------------------------
    #if NUMBER_OF_LEDS == 4
    //------------------------------------------------------------------------------
    const char Brightness[] = {128, 64, 16, 1};
    //------------------------------------------------------------------------------
    #elif NUMBER_OF_LEDS == 8
    //------------------------------------------------------------------------------
    const char Brightness[] = {128,64,32,16,8,4,2,1};
    //------------------------------------------------------------------------------
    #else
    //------------------------------------------------------------------------------
    #error "Incorrect NUMBER_OF_LEDS constant value (should be 4 or 8)"
    //------------------------------------------------------------------------------
    #endif
    //------------------------------------------------------------------------------

    //****************************** ****************************** ******************
    //
    // Global variables
    //
    //****************************** ****************************** ******************


    volatile char m_cPosition1;

    volatile char m_cPosition2;


    //****************************** ****************************** ******************
    //
    // Function prototypes
    //
    //****************************** ****************************** ******************

    void Init (void);
    void Task_cheni1 (void);
    void Task_cheni2 (void);


    /****************************** ****************************** ********************
    * *
    * Function: main *
    * *
    *------------------------------------------------------------------------------*
    * *
    ****************************** ****************************** ********************/

    // Tell to linker that these functions will be called indirrectly

    #pragma funcall main Task_cheni1
    #pragma funcall main Task_cheni2


    void main (void)
    {
    Init(); // Init periphery

    OS_Init(); // Init OS

    OS_Task_Create(0, Task_cheni1); // Create tasks.
    OS_Task_Create(0, Task_cheni2);

    OS_EI(); // Enable interrupts

    OS_Run(); // Running scheduler

    }


    /****************************** ****************************** ********************
    * *
    * Function: Init *
    * *
    *------------------------------------------------------------------------------*
    *
    * description: Makes periphery initialization:
    * - I/O ports
    *
    ****************************** ****************************** ********************/

    void Init (void)
    {

    //------------------------------------------------------------------------------
    // I/O ports configuration
    //------------------------------------------------------------------------------

    PORTA = PORTA_CONST;
    PORTB = PORTB_CONST;

    TRISA = TRISA_CONST;
    TRISB = TRISB_CONST;

    NOT_RBPU_bit = 0;
    #if defined(PORTC_CONST)
    PORTC = PORTC_CONST;
    TRISC = TRISC_CONST;
    #endif

    #if defined(PORTD_CONST)
    PORTD = PORTD_CONST;
    TRISD = TRISD_CONST;
    #endif

    #if defined(PORTE_CONST)
    PORTE = PORTE_CONST;
    TRISE = TRISE_CONST;
    #endif
    }

    /****************************** ****************************** ********************
    *
    * TASK: Task_cheni1
    *
    *------------------------------------------------------------------------------*
    *
    * description: Chenillard de Gauche à Droite
    *
    ****************************** ****************************** ********************/

    void Task_cheni1 (void)
    {
    for (;;)
    { m_cPosition1=0 ;
    do
    {
    PORTLEDS=Brightness[m_cPosition1];
    m_cPosition1 ++;
    }while(m_cPosition1!=8) ;
    }}


    /****************************** ****************************** ********************
    *
    * TASK: Task_cheni2
    *
    *------------------------------------------------------------------------------*
    *
    * description: Chenillard
    *
    ****************************** ****************************** ********************/

    void Task_cheni2 (void)
    {
    for (;;)
    {
    m_cPosition2=0 ;
    do
    {

    PORTLED2=Brightness[m_cPosition2];
    m_cPosition2 ++;

    }while(m_cPosition1!=8) ;}
    }
    //****************************** ****************************** ******************
    // THE END
    //****************************** ****************************** ******************

Discussions similaires

  1. Système multitâche pour microcontrôleur
    Par doul11 dans le forum Électronique
    Réponses: 51
    Dernier message: 25/02/2012, 22h09
  2. réalisation de 'round robin ' multitache 16f84a
    Par invitefd11d45f dans le forum Électronique
    Réponses: 3
    Dernier message: 05/02/2010, 23h03
  3. [Physiologie] Cerveau multitache?...
    Par invite3f7cedd4 dans le forum Biologie
    Réponses: 19
    Dernier message: 12/09/2007, 19h10
  4. microcontroleur multitache
    Par noisyboxes dans le forum Électronique
    Réponses: 10
    Dernier message: 24/06/2007, 18h25
  5. systeme d'exploitation multitache!
    Par invite00b08343 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 21/08/2006, 22h15
Découvrez nos comparatifs produits sur l'informatique et les technologies.