分配1个CPU来执行1个线程


0

我正在实现一个代码,通过数字IO为步进驱动器创建脉冲输出。但是我注意到当运行“杂散”程序(即反病毒)时,输出(占空比)将变得不一致。无论如何将该线程分配给多核CPU中的1个单独的CPU,以便其他程序甚至托管的Windows都无法为该CPU分配线程?我正在使用C#作为编程。


1
你在运行哪个操作系统?
harogaston

我正在使用win10 64位x64处理器
ishtarsg

老实说,如果你转向Linux,你会更成功。
harogaston

@harogaston Linux同样不适合这种任务。如果您需要任何类型的保证,您需要一个正确的RTOS或只需要没有任何操作系统的原始程序。
鲍勃

@Bob我非常不同意。Linux比Windows更适合这种事情。告诉Windows如何为中断或用户域进程分配CPU优先级。祝你好运!这并不意味着实时操作系统更好,当然它就是RT Linux。但是没有讨论如果你打算修改内核那么你会在Linux上感受到更多的回家。
harogaston

Answers:


3

执行此操作的唯一方法是枚举系统中的每个其他进程并设置其关联掩码以排除您尝试为线程保存的CPU。您也必须继续这样做,因为可以随时创建其他进程。

更好的方法是简单地在“实时”优先级类中运行您的进程,然后将您的线程优先级设置为“时间关键”。(我希望它不必实际执行总时间的过高百分比。)

但是,中断处理程序和DPC例程仍然可以干扰您的线程。

这里真正的问题是,Windows并不适用于具有“硬”实时要求的任务,而您的听起来就是这样。

我建议使用专用于生成步进电机所需的可变占空比脉冲的微控制器。

步进电机需要的频率和占空比范围是多少?可能有另一种方法可以解决您的问题。


1
你能让声卡或串口以某种方式产生占空比吗?
LawrenceC

是的,我在考虑声卡。使用您需要的占空比生成方波的波形数据(一个简单的计算)并调用WaveOut。
Jamie Hanrahan

驱动器的最小值是400Pulse / Rev,我需要恒速和位置精度。另外我使用的是单板计算机,所以声卡对我来说很有用。
ishtarsg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.