Hello,
I am porting the RTX Kernel to a Cortex-M3 device and ran into a difficulty.
I have set up 2 tasks to toggle 2 LEDs to see if my tasks are running as expected. As below.
/*---------------------------------------------------------------------------- * Task 4 'blink_P2': Blink LED P2 *---------------------------------------------------------------------------*/ __task void blink_P2 (void) { os_itv_set (40); for (;;) { os_itv_wait (); Toggle_P2(); } } /*---------------------------------------------------------------------------- * Task 5 'blink_P3': Blink LED P3 *---------------------------------------------------------------------------*/ __task void blink_P3 (void) { os_itv_set (40); for (;;) { os_itv_wait (); Toggle_P3(); } }
If the time delay is set the same for both tasks then there is no problem. Both tasks toggle each LED at 40mS. This works.
However if I change the time delay on one task,(for example the second task to 50mS) then both tasks now take several seconds to toggle the LEDs.
I have ported the RTX kernel previously to an ARM7 core without difficulty but cannot see the problem on the Cortex-M3 ?
Can someone advise please ?
thanks!
So your systick is 10ms Which means an ITV wait of 40 = 40 x 10ms = 400ms.
Also not that your tasks have different priorities.
Try setting the priorities of both tasks the same and see if you get the expected behaviour.
the systick is 1000. the 10000 is just a comment placed by keil.
so 40*1000uS = 1mS. I have tried setting 0 for both priorities and no difference.
Sorry I missed that. So you mean 40 * 1000uS = 40ms.
This would mean your LEDs are toggling very fast and it may not be noticeable to the eye. Could that be the issue?
A systick of 1ms is very fast (and I think uncommon) try a systick of 10ms. Also, don't use 0 as the priority set both priorities to 1 (or greater).
bad maths on the last post , 40 * 1000uS = 40mS.
I'm using a scope on the LEDs so I can see exactly the switch time. I can't attach an image unfortunately, but they toggle every 40ms as expected when both delays are the same. As soon as I change one of the delay times, both become in the order of seconds instead of milliseconds.
Changing the priority to 1 gives the same result.