2012-09-15 4 views
1

Je travaille sur l'application de commande de moteur, essentiellement quand j'appuie sur un bouton, le moteur tourne et je mesure également le courant du moteur pendant le fonctionnement, de sorte que je puisse arrêter le moteur en cas de surcharge. Le problème est que je peux arrêter le moteur s'il y a une surcharge mais que le temps de réponse est plus long, le programme ne réagit pas à un choc soudain.parallèle en boucle

Est-il possible d'exécuter deux boucles parallèles alors quand j'allume le bouton une boucle mesurera le courant pour toute surcharge et l'autre boucle fonctionnera sur le contrôle du moteur ces deux boucles devraient fonctionner simultanément, de sorte que je vais obtenir le temps de réponse attendu ..

+4

Alors, quelle langue est-ce? C, C++, C# ou motordriver? –

+0

Vous pouvez exécuter les boucles nécessaires dans des threads séparés. –

+0

en langage C .. pour processeur TI. – siva

Répondre

1

Comme g-makulik posté dans un commentaire, vous pouvez utiliser des discussions. Ou vous pourriez revenir à une solution plus ancienne de maintenir un état dans une seule boucle. Vous ne savez pas si le TI supporte les fork() ou les threads, mais sinon, quelque chose comme ça devient un concurrent sérieux.

int need_to_monitor_motor = 1; 
int common_switch;   // true if common processing 

while (need_to_monitor_motor) 
{ 
    common_switch = 1;  // allow common processing 

    // you may well need to do something to avoid hogging the processor if 
    // other processes are running. Even a minimal nano-sleep. 
    // sched_yield() 
    // usleep() 
    sleep_or_processor_release(); 

    switch (motor_state) 
    { 
     case MOTOR_OFF: 
     need_to_monitor_motor = do_motor_off_stuff(); 
     break; 

     case MOTOR_ON: 
     need_to_monitor_motor = do_motor_on_stuff(); 
     break; 

     default 
     need_to_monitor_motor = trouble__fix_it(&common_switch); 
     break; 
    } 

    if (common_switch) 
    { 
     do_common_processing(); 
    } 
}

(attention, n'ont pas compilé ce)

0

Donc, vous écrivez programme intégré C pour le processeur TI. Maintenant, la question est: avez-vous des fonctionnalités OS/multithreading activé? La plupart des cartes TI bon marché n'ont pas ce support, et leur programme embarqué se termine par une boucle sans fin tout en (1). Tout le travail actuel est effectué dans les gestionnaires d'interruption. Dans votre cas, éventuellement, vous pouvez utiliser un ou deux minuteurs. Initialisez-les au début de la fonction principale, et faites tout ce qui est nécessaire dans les gestionnaires d'interruption de minuterie. Alors, trouvez un exemple de code TI avec des minuteurs pour votre tableau, et ajoutez votre propre logique à celui-ci.

+0

Merci ... Cela peut aider.En tout je vais vérifier ... – siva