mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-09-10 08:07:46 -04:00
Merge branch 'main' into main
This commit is contained in:
commit
3a9b028465
2 changed files with 22 additions and 37 deletions
4
list.c
4
list.c
|
@ -192,7 +192,9 @@ void vListInsert( List_t * const pxList,
|
|||
for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )
|
||||
{
|
||||
/* There is nothing to do here, just iterating to the wanted
|
||||
* insertion position. */
|
||||
* insertion position.
|
||||
* IF YOU FIND YOUR CODE STUCK HERE, SEE THE NOTE JUST ABOVE.
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -435,32 +435,13 @@ static void prvProcessSimulatedInterrupts( void )
|
|||
|
||||
if( ulSwitchRequired != pdFALSE )
|
||||
{
|
||||
void * pvOldCurrentTCB;
|
||||
|
||||
pvOldCurrentTCB = pxCurrentTCB;
|
||||
|
||||
/* Select the next task to run. */
|
||||
vTaskSwitchContext();
|
||||
|
||||
/* If the task selected to enter the running state is not the task
|
||||
* that is already in the running state. */
|
||||
if( pvOldCurrentTCB != pxCurrentTCB )
|
||||
{
|
||||
/* Suspend the old thread. In the cases where the (simulated)
|
||||
* interrupt is asynchronous (tick event swapping a task out rather
|
||||
* than a task blocking or yielding) it doesn't matter if the
|
||||
* 'suspend' operation doesn't take effect immediately - if it
|
||||
* doesn't it would just be like the interrupt occurring slightly
|
||||
* later. In cases where the yield was caused by a task blocking
|
||||
* or yielding then the task will block on a yield event after the
|
||||
* yield operation in case the 'suspend' operation doesn't take
|
||||
* effect immediately. */
|
||||
pxThreadState = ( ThreadState_t * ) *( ( size_t * ) pvOldCurrentTCB );
|
||||
/* Suspend the old thread. */
|
||||
pxThreadState = ( ThreadState_t * ) *( ( size_t * ) pxCurrentTCB );
|
||||
SuspendThread( pxThreadState->pvThread );
|
||||
|
||||
/* Ensure the thread is actually suspended by performing a
|
||||
* synchronous operation that can only complete when the thread is
|
||||
* actually suspended. The below code asks for dummy register
|
||||
* synchronous operation that can only complete when the thread
|
||||
* is actually suspended. The below code asks for dummy register
|
||||
* data. Experimentation shows that these two lines don't appear
|
||||
* to do anything now, but according to
|
||||
* https://devblogs.microsoft.com/oldnewthing/20150205-00/?p=44743
|
||||
|
@ -468,6 +449,9 @@ static void prvProcessSimulatedInterrupts( void )
|
|||
xContext.ContextFlags = CONTEXT_INTEGER;
|
||||
( void ) GetThreadContext( pxThreadState->pvThread, &xContext );
|
||||
|
||||
/* Select the next task to run. */
|
||||
vTaskSwitchContext();
|
||||
|
||||
/* Obtain the state of the task now selected to enter the
|
||||
* Running state. */
|
||||
pxThreadState = ( ThreadState_t * ) ( *( size_t * ) pxCurrentTCB );
|
||||
|
@ -477,7 +461,6 @@ static void prvProcessSimulatedInterrupts( void )
|
|||
configASSERT( pxThreadState->pvThread != NULL );
|
||||
ResumeThread( pxThreadState->pvThread );
|
||||
}
|
||||
}
|
||||
|
||||
/* If the thread that is about to be resumed stopped running
|
||||
* because it yielded then it will wait on an event when it resumed
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue