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,
I just managed to kill RTX with my test program! is there somewhere where I can post this program for others to review? I will of course send it right away to Keil!
Excellent! Good work.
As far as sharing it with the forum: You could upload a zip file of the project to a free service like http://www.getdropbox.com to share it. (If you use getdropbox, upload it to the public folder, and then select the option to create a link to it, copy and paste the link in here).
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