2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
									
										
										
										
											2018-05-17 16:06:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  FreeRTOS  Kernel  V10 .0 .1 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  Copyright  ( C )  2017  Amazon . com ,  Inc .  or  its  affiliates .   All  Rights  Reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Permission  is  hereby  granted ,  free  of  charge ,  to  any  person  obtaining  a  copy  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  this  software  and  associated  documentation  files  ( the  " Software " ) ,  to  deal  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  the  Software  without  restriction ,  including  without  limitation  the  rights  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  use ,  copy ,  modify ,  merge ,  publish ,  distribute ,  sublicense ,  and / or  sell  copies  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  the  Software ,  and  to  permit  persons  to  whom  the  Software  is  furnished  to  do  so , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  subject  to  the  following  conditions : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  The  above  copyright  notice  and  this  permission  notice  shall  be  included  in  all 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-17 16:06:57 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 *  copies  or  substantial  portions  of  the  Software . 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  THE  SOFTWARE  IS  PROVIDED  " AS IS " ,  WITHOUT  WARRANTY  OF  ANY  KIND ,  EXPRESS  OR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  IMPLIED ,  INCLUDING  BUT  NOT  LIMITED  TO  THE  WARRANTIES  OF  MERCHANTABILITY ,  FITNESS 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  FOR  A  PARTICULAR  PURPOSE  AND  NONINFRINGEMENT .  IN  NO  EVENT  SHALL  THE  AUTHORS  OR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  COPYRIGHT  HOLDERS  BE  LIABLE  FOR  ANY  CLAIM ,  DAMAGES  OR  OTHER  LIABILITY ,  WHETHER 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  IN  AN  ACTION  OF  CONTRACT ,  TORT  OR  OTHERWISE ,  ARISING  FROM ,  OUT  OF  OR  IN 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  CONNECTION  WITH  THE  SOFTWARE  OR  THE  USE  OR  OTHER  DEALINGS  IN  THE  SOFTWARE . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  http : //www.FreeRTOS.org
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  http : //aws.amazon.com/freertos
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  1  tab  = =  4  spaces ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <stdlib.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "FreeRTOS.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "list.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  PUBLIC  LIST  API  documented  in  list . h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  vListInitialise (  List_t  *  const  pxList  )  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* The list structure contains a list item which is used to mark the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									end  of  the  list .   To  initialise  the  list  the  list  end  is  inserted 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									as  the  only  list  entry .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxList - > pxIndex  =  (  ListItem_t  *  )  & (  pxList - > xListEnd  ) ; 			/*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* The list end value is the highest possible value in the list to
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ensure  it  remains  at  the  end  of  the  list .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxList - > xListEnd . xItemValue  =  portMAX_DELAY ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* The list end next and previous pointers point to itself so we know
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									when  the  list  is  empty .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxList - > xListEnd . pxNext  =  (  ListItem_t  *  )  & (  pxList - > xListEnd  ) ; 	/*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxList - > xListEnd . pxPrevious  =  (  ListItem_t  *  )  & (  pxList - > xListEnd  ) ; /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxList - > uxNumberOfItems  =  (  UBaseType_t  )  0U ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Write known values into the list if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES  is  set  to  1.  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listSET_LIST_INTEGRITY_CHECK_1_VALUE (  pxList  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listSET_LIST_INTEGRITY_CHECK_2_VALUE (  pxList  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  vListInitialiseItem (  ListItem_t  *  const  pxItem  )  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Make sure the list item is not recorded as being on a list. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxItem - > pvContainer  =  NULL ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Write known values into the list item if
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES  is  set  to  1.  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE (  pxItem  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE (  pxItem  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  vListInsertEnd (  List_t  *  const  pxList ,  ListItem_t  *  const  pxNewListItem  )  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ListItem_t  *  const  pxIndex  =  pxList - > pxIndex ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Only effective when configASSERT() is also defined, these tests may catch
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									the  list  data  structures  being  overwritten  in  memory .   They  will  not  catch 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									data  errors  caused  by  incorrect  configuration  or  use  of  FreeRTOS .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listTEST_LIST_INTEGRITY (  pxList  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listTEST_LIST_ITEM_INTEGRITY (  pxNewListItem  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Insert a new list item into pxList, but rather than sort the list,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									makes  the  new  list  item  the  last  item  to  be  removed  by  a  call  to 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									listGET_OWNER_OF_NEXT_ENTRY ( ) .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-24 23:33:42 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxNewListItem - > pxNext  =  pxIndex ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxNewListItem - > pxPrevious  =  pxIndex - > pxPrevious ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Only used during decision coverage testing. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mtCOVERAGE_TEST_DELAY ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-04-24 23:33:42 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxIndex - > pxPrevious - > pxNext  =  pxNewListItem ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxIndex - > pxPrevious  =  pxNewListItem ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Remember which list the item is in. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxNewListItem - > pvContainer  =  (  void  *  )  pxList ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									(  pxList - > uxNumberOfItems  ) + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  vListInsert (  List_t  *  const  pxList ,  ListItem_t  *  const  pxNewListItem  )  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								ListItem_t  * pxIterator ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  TickType_t  xValueOfInsertion  =  pxNewListItem - > xItemValue ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Only effective when configASSERT() is also defined, these tests may catch
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									the  list  data  structures  being  overwritten  in  memory .   They  will  not  catch 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									data  errors  caused  by  incorrect  configuration  or  use  of  FreeRTOS .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listTEST_LIST_INTEGRITY (  pxList  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									listTEST_LIST_ITEM_INTEGRITY (  pxNewListItem  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Insert the new list item into the list, sorted in xItemValue order.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									If  the  list  already  contains  a  list  item  with  the  same  item  value  then  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									new  list  item  should  be  placed  after  it .   This  ensures  that  TCB ' s  which  are 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									stored  in  ready  lists  ( all  of  which  have  the  same  xItemValue  value )  get  a 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									share  of  the  CPU .   However ,  if  the  xItemValue  is  the  same  as  the  back  marker 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									the  iteration  loop  below  will  not  end .   Therefore  the  value  is  checked 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									first ,  and  the  algorithm  slightly  modified  if  necessary .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if (  xValueOfInsertion  = =  portMAX_DELAY  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										pxIterator  =  pxList - > xListEnd . pxPrevious ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										/* *** NOTE ***********************************************************
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										If  you  find  your  application  is  crashing  here  then  likely  causes  are 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										listed  below .   In  addition  see  http : //www.freertos.org/FAQHelp.html for
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										more  tips ,  and  ensure  configASSERT ( )  is  defined ! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										http : //www.freertos.org/a00110.html#configASSERT
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											1 )  Stack  overflow  - 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   see  http : //www.freertos.org/Stacks-and-stack-overflow-checking.html
 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											2 )  Incorrect  interrupt  priority  assignment ,  especially  on  Cortex - M 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											   parts  where  numerically  high  priority  values  denote  low  actual 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											   interrupt  priorities ,  which  can  seem  counter  intuitive .   See 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   http : //www.freertos.org/RTOS-Cortex-M3-M4.html and the definition
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   of  configMAX_SYSCALL_INTERRUPT_PRIORITY  on 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   http : //www.freertos.org/a00110.html
 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											3 )  Calling  an  API  function  from  within  a  critical  section  or  when 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-24 23:33:42 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											   the  scheduler  is  suspended ,  or  calling  an  API  function  that  does 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   not  end  in  " FromISR "  from  an  interrupt . 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											4 )  Using  a  queue  or  semaphore  before  it  has  been  initialised  or 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   before  the  scheduler  has  been  started  ( are  interrupts  firing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											   before  vTaskStartScheduler ( )  has  been  called ? ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										for (  pxIterator  =  (  ListItem_t  *  )  & (  pxList - > xListEnd  ) ;  pxIterator - > pxNext - > xItemValue  < =  xValueOfInsertion ;  pxIterator  =  pxIterator - > pxNext  )  /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											/* There is nothing to do here, just iterating to the wanted
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											insertion  position .  */ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxNewListItem - > pxNext  =  pxIterator - > pxNext ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-24 23:33:42 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxNewListItem - > pxNext - > pxPrevious  =  pxNewListItem ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									pxNewListItem - > pxPrevious  =  pxIterator ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-04-24 23:33:42 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									pxIterator - > pxNext  =  pxNewListItem ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Remember which list the item is in.  This allows fast removal of the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									item  later .  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxNewListItem - > pvContainer  =  (  void  *  )  pxList ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									(  pxList - > uxNumberOfItems  ) + + ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								UBaseType_t  uxListRemove (  ListItem_t  *  const  pxItemToRemove  )  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/* The list item knows which list it is in.  Obtain the list from the list
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								item .  */  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								List_t  *  const  pxList  =  (  List_t  *  )  pxItemToRemove - > pvContainer ;  
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxItemToRemove - > pxNext - > pxPrevious  =  pxItemToRemove - > pxPrevious ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxItemToRemove - > pxPrevious - > pxNext  =  pxItemToRemove - > pxNext ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									/* Only used during decision coverage testing. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									mtCOVERAGE_TEST_DELAY ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									/* Make sure the index is left pointing to a valid item. */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if (  pxList - > pxIndex  = =  pxItemToRemove  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										pxList - > pxIndex  =  pxItemToRemove - > pxPrevious ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-01 21:15:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mtCOVERAGE_TEST_MARKER ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-14 01:54:02 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									pxItemToRemove - > pvContainer  =  NULL ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									(  pxList - > uxNumberOfItems  ) - - ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  pxList - > uxNumberOfItems ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*-----------------------------------------------------------*/