In my project we are using semaphore, in which we will handle 2 cases.
Case1 : Semaphore available within 30Sec
Case2 : Timeout.
We are facing problem in Case2 implementation
We will wait for a semaphore to be available within 30 Sec, if not we will call a function. For saving power we are trying to use to tickless implementation. During waiting for semaphore, when we checked the xExpectedIdleTime in the function vPortSuppressTicksAndSleep, we found the value we are getting about 2,3,3 etc( Single digit values)
The value what we expected is 30000, we are not getting the value
We are running the Oscillator with the frequency of 28MHz and Tick freq of 1000Hz. SysTick and Osc Freq are same
What are the other tasks in your system doing? Which task runs in 2 (or 3) ticks time?
Add the following lines to prvGetExpectedIdleTime():
tskTCB * pxTCB;
pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList );
Then, when prvGetExpectedIdleTime() returns the unexpected value, pxTCB will point to the task control block of the task that will run next. pxTCB->pcTaskName will be the name you assigned the task when it was created.