c - 并行运行 while 循环

标签 c multithreading

我正在研究电机控制应用,基本上当我按下一个按钮时,电机就会运行,我也在运行时测量电机电流,这样我就可以在出现任何过载时停止电机。

问题是如果有任何过载我可以停止电机但响应时间更长,程序对突然的冲击没有反应。

是否可以并行运行两个回路,所以当我打开按钮时,一个回路将测量任何过载的电流,另一个回路将控制电机,这两个回路应该同时工作,这样我就可以得到预期响应时间..

最佳答案

正如 g-makulik 在评论中发表的那样,您可以使用线程。或者您可以退回到在单个循环中维护状态的旧解决方案。 不确定您拥有的 TI 是否支持 fork() 或线程,但如果不支持,类似这样的东西将成为强有力的竞争者。

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();
    }
}

(注意,还没有编译这个)

关于c - 并行运行 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12437505/

相关文章:

c - 纯 C、内核 C、经典 C

java - Phaser 类别和分层

python - Python的queue.Queue get/put方法在阻塞时是否持有该队列的锁?

c# - 如果我使用线程来获取大量数据,是否应该使用多个连接?

c# - ConcurrentDictionary 和原子操作——有时需要 Lock 吗?

C 和 libappindicator - 创建多个指标

无法理解此代码的输出

iphone - 使用 webrequest 和 uialertview 在 MonoTouch 中线程化

c - IplImage* 表 (IplImage**) 内的 cvCopy 出现段错误

从 fortran 调用 c 函数(枚举类型)