We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello,
I was wondering if any of you uses RTX with a tick rate faster than 10 milliseconds. Franc Urbanc, RTX's author, recommends this setting but I am not sure why - a context switch overhead of a LPC2478 running at 72[MHz] will be about 6 microseconds. However, when we try to set the tick rate to 1 millisecond or 100 microsecond, RTX seems to hang after about 10 minutes (when at 100 microseconds) in this code:
void os_put_prio (P_XCB p_CB, P_TCB p_task) { /* Put task identified with "p_task" into list ordered by priority. */ /* "p_CB" points to head of list; list has always an element at end with */ /* a priority less than "p_task->prio". */ . . . /* Search for an entry in the list */ while (p_CB2 != NULL && prio <= p_CB2->prio) { p_CB = (P_XCB)p_CB2; p_CB2 = p_CB2->p_lnk; }
sometimes, we see only one entry in the linked list whose left and right pointer point to the entry itself, resulting in a system deadlock. Yes, we probably can get away with a tick rate of 10 milliseconds, but I would appreciate your insight anyway.
Eric, all interested people,
See here:
www.getdropbox.com/.../RTX failure
I think I got the sharing issue right. I have made extra experiments with microlib, RTX sources integrated, compiler optimizations etc. - it all boils down to a problem in RTX, _I think_. PLEASE feel free to correct me if there is a mistake in this program, hence it is my fault. I apologize for the not so good looking code. I usually take care of that...:-)
BTW,
using this table instead of the existing one
Using this table in my simple demonstration program will kill RTX within 10 seconds: static task_info_t s_task_info[NUMBER_OF_TASKS] = { {127, task1, 0}, // task1 {127, task2, 0}, // task2 {127, task3, 0}, // task3 {127, task4, 0}, // task3 {127, task5, 0}, // task3 {127, task6, 0}, // task3 {127, task7, 0}, // task3 {240, task8, 0}, // task3 {240, task9, 0}, // task3 {127, task10, 0}, // task3 } ;
Note that I have increased the priority of 2 tasks. This will kill RTX within 10 seconds!
Here is the public link to the .zip file:
dl.getdropbox.com/.../LPC2468_RTX_Demo_min.zip
Zeusti,
Lately you seem to excel in finding my mistakes. Why don't you try that again using the public link to my test program (the first link might not work for non-dropbox members)? I'm curious if this is indeed my mistake or RTX's. General comment: the program's tick rate is 50 microseconds to make it fail fast. A tick rate of 1000 microsecond will cause a failure within 1 or 2 minutes.
Tapeer,
we follow yo're thread with interest. i have alredy took yo're code :)
we hope the solution is found soon. we all must have confidence in the rtx and the problem must be understood. this is very important.
anothar (not arm and dull) project is keeping us very very busy at the moment. but i hope to try yo're code soon.
Always yo're freind.
Zeusti.
Yes, I use isr_xxx functions