Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 并行运行while循环_C_Multithreading - Fatal编程技术网

C 并行运行while循环

C 并行运行while循环,c,multithreading,C,Multithreading,我正在开发电机控制应用程序,基本上,当我按下一个按钮时,电机将运行,并且我还在运行时测量电机电流,以便在出现过载时停止电机 问题是,如果出现过载,我可以停止电机,但响应时间更长,程序不会对突然的冲击作出反应 有没有可能并联运行两个回路?因此,当我打开按钮时,一个回路将测量任何过载电流,另一个回路将控制电机。这两个回路应同时工作,以便我获得预期的响应时间。正如g-makulik在评论中所述,您可以使用线程。或者,您可以退回到旧的解决方案,即在单个循环中维护状态。 不确定您的TI是否支持fork()

我正在开发电机控制应用程序,基本上,当我按下一个按钮时,电机将运行,并且我还在运行时测量电机电流,以便在出现过载时停止电机

问题是,如果出现过载,我可以停止电机,但响应时间更长,程序不会对突然的冲击作出反应


有没有可能并联运行两个回路?因此,当我打开按钮时,一个回路将测量任何过载电流,另一个回路将控制电机。这两个回路应同时工作,以便我获得预期的响应时间。

正如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(); } } int需要监控电机=1; int公共_开关;//如果是公共处理,则为true 同时(需要监控电机) { 公共_开关=1;//允许公共处理 //如果出现以下情况,您可能需要采取措施避免占用处理器 //其他进程正在运行,即使是最小的纳米睡眠。 //附表(收益) //usleep() 休眠或处理器释放(); 开关(电机状态) { 外壳电机关闭: 需要监视电机=关闭电机(); 打破 外壳电机打开: 需要监视电机=在设备上运行电机(); 打破 违约 需要监控电机=故障修理它(&普通开关); 打破 } if(公共_开关) { do_common_processing(); } }
(注意,我还没有编译过这篇文章)

正如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(); } } int需要监控电机=1; int公共_开关;//如果是公共处理,则为true 同时(需要监控电机) { 公共_开关=1;//允许公共处理 //如果出现以下情况,您可能需要采取措施避免占用处理器 //其他进程正在运行,即使是最小的纳米睡眠。 //附表(收益) //usleep() 休眠或处理器释放(); 开关(电机状态) { 外壳电机关闭: 需要监视电机=关闭电机(); 打破 外壳电机打开: 需要监视电机=在设备上运行电机(); 打破 违约 需要监控电机=故障修理它(&普通开关); 打破 } if(公共_开关) { do_common_processing(); } }
(注意,您还没有编译过这个)

所以,您正在为TI处理器编写嵌入式C程序。现在的问题是:您是否启用了OS/多线程功能?大多数便宜的TI板都不支持这种功能,它们的嵌入式程序以无休止的循环结束。所有实际工作都在中断处理程序中完成。在您的情况下,可能可以使用一个或两个计时器。在main函数的开头初始化它们,并在计时器中断处理程序中执行所有必要的操作


因此,请为您的板找到带有计时器的TI代码示例,并向其中添加您自己的逻辑。

因此,您正在为TI处理器编写嵌入式C程序。现在的问题是:您是否启用了OS/多线程功能?大多数便宜的TI板都不支持这种功能,它们的嵌入式程序以无休止的循环结束。所有实际工作都在中断处理程序中完成。在您的情况下,可能可以使用一个或两个计时器。在main函数的开头初始化它们,并在计时器中断处理程序中执行所有必要的操作


因此,请为您的电路板找到带有计时器的TI代码示例,并为其添加您自己的逻辑。

这是什么语言?C、C++、C或是驱动程序?你可以在单独的线程中运行必要的循环。C语言……TI处理器。所以,只要C C标签,如果它只是C.@ SIVA,在这里,为什么你把它标记为C++,甚至更糟,C?C、C++、C或是驱动程序?你可以在单独的线程中运行必要的循环。C语言……TI处理器。所以,只要C++标记,在这个例子中,C.@ SIVA,为什么你把它标记为C++,甚至更坏,C?