Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Schedule task on precise periods in Linux or Windows

I have this weird question. I would like to know if it is possible to make a program in C/C++ that will run on Linux or Windows and will hook interrupt handler on a system timer set to specific period (2000 times per second, for example) and I want this interrupt to be with highest priority, meaning that it has to be executed every half millisecond and while executing it must not be interrupted.

This we have done with MS-DOS with Borland Turbo C 3.1. We have an interface card (our own) that runs on ISA slot. Every half millisecond, our program reads the state of electronics that is controlling an industrial process thru the interface. This has worked for us in the past 15 years, but we are running out of motherboards that have ISA slot, so we are looking for new solutions.

We also have solution based on PIC microcontrollers, but our horizons will be widened with general purpose processor.

My guess is that there are some customized Linux kernels for embedded applications, so I am looking for some sources with which we can start experimenting.

like image 923
Gorgi Rankovski Avatar asked Feb 24 '23 12:02

Gorgi Rankovski


2 Answers

Yes, you can do that in MS-DOS because it is not a multi-user or multi-tasking operating system. However, the same thing will not work in Windows because it is a mult-user and multi-tasking operating system. It's also not real-time, which means there's no guarantee that your task will be executed exactly when you ask for it to be executed. Everything is pre-emptively scheduled, meaning that any number of other processes and tasks (either user-mode or system-level) could effectively "bump" your process down the priority list and force it to wait to be executed until those other tasks completed or were themselves interrupted to give your process a chance to run for a while.

I don't know about Linux, but I imagine most of the major distributions are written similarly to Windows.

You will need to find a real-time, single-user operating system to do this. A Unix-derivative is probably the best place to start looking, but I won't be the person able to suggest one.

Alternatively, you could continue using MS-DOS (or alternatives such as FreeDOS), but switch to a different interface technology that is available on newer boards. There's no reason to update something that works for you, especially if the updates are counter-productive to your goal.

like image 198
Cody Gray Avatar answered Feb 26 '23 20:02

Cody Gray


A typical OS such as a standard Linux or Windows is not designed to, and will not be able to perform to that degree of real-time accuracy and availability.

It sounds to me like you need to be investigating Real-Time Linux, or similar.

RTLinux is a modified version of the Linux Kernel which is designed to perform in real-time, precicely for applications such as this.

Hope that helps.

like image 41
Spudley Avatar answered Feb 26 '23 19:02

Spudley