Here is my situation. I have a hardware timer board that creates periodic
interrupts at 1KHz. My ISR only sends a pulse to my timer task. The timer
task runs at highest priority and waits for pulses. Once it got a pulse, it
increases a counter and checks if there are more pulses in the queue. If
yes, it aborts because that means it couldn’t keep up with the 1KHz timing.
This works perfect on QNX4, I never had the timer falling behind. It worked
pretty stable on QNX6, but there was a problem, and now I found which it
is…
If I allocate a large shared memory block (>70Meg) from a normal (priority
10) task, the timer task immediately falls behind. It looks like that the
kernel is busy with creating the shmem and doesn’t let the timer task
execute (???). How can this be…
I create the shared memory with shmem_create(…, O_RDWR | O_CREAT | O_EXCL,
S_IRWXU | S_IRWXG | NS_IRWXO), do a ftruncate, then a mmap(…, …, PROT_READ
| PROT_WRITE, MAP_SHARED, …)
On QNX4, I don’t have this problem.
Any input welcome, this is a vital problem to my application…
Markus