📄 list.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.30A/W32 KICKSTART 14/Dec/2005 14:41:45 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Source\list.c #
# Command line = D:\board\FreeRTOSV3.2.3\FreeRTOS\Source\list.c -D #
# _NDEBUG -D STR71X_IAR -lC #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\List\ --diag_suppress pe191,pa082 -o #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\Obj\ -s9 --no_clustering --cpu_mode thumb #
# --endian little --cpu ARM7TDMI --stack_align 4 #
# --interwork -e --require_prototypes --fpu None #
# --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl4tptinl8n.h" -I #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\ -I D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR #
# 71x_IAR\library\include\ -I #
# D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\..\common\include\ -I D:\board\FreeRTOSV3.2.3\Free #
# RTOS\Demo\ARM7_STR71x_IAR\..\..\source\include\ -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.0 Kickstart\arm\INC\" #
# List file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\List\list.lst #
# Object file = D:\board\FreeRTOSV3.2.3\FreeRTOS\Demo\ARM7_STR71x_IA #
# R\binary\Obj\list.r79 #
# #
# #
##############################################################################
D:\board\FreeRTOSV3.2.3\FreeRTOS\Source\list.c
1 /*
2 FreeRTOS V3.2.3 - Copyright (C) 2003-2005 Richard Barry.
3
4 This file is part of the FreeRTOS distribution.
5
6 FreeRTOS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 FreeRTOS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with FreeRTOS; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 A special exception to the GPL can be applied should you wish to distribute
21 a combined work that includes FreeRTOS, without being obliged to provide
22 the source code for any proprietary components. See the licensing section
23 of http://www.FreeRTOS.org for full details of how and when the exception
24 can be applied.
25
26 ***************************************************************************
27 See http://www.FreeRTOS.org for documentation, latest information, license
28 and contact details. Please ensure to read the configuration and relevant
29 port sections of the online documentation.
30 ***************************************************************************
31 */
32
33 /*
34 Changes from V1.2.0
35
36 + Removed the volatile modifier from the function parameters. This was
37 only ever included to prevent compiler warnings. Now warnings are
38 removed by casting parameters where the calls are made.
39
40 + prvListGetOwnerOfNextEntry() and prvListGetOwnerOfHeadEntry() have been
41 removed from the c file and added as macros to the h file.
42
43 + uxNumberOfItems has been added to the list structure. This removes the
44 need for a pointer comparison when checking if a list is empty, and so
45 is slightly faster.
46
47 + Removed the NULL check in vListRemove(). This makes the call faster but
48 necessitates any application code utilising the list implementation to
49 ensure NULL pointers are not passed.
50
51 Changes from V2.0.0
52
53 + Double linked the lists to allow faster removal item removal.
54
55 Changes from V2.6.1
56
57 + Make use of the new portBASE_TYPE definition where ever appropriate.
58
59 Changes from V3.0.0
60
61 + API changes as described on the FreeRTOS.org WEB site.
62 */
63
64 #include <stdlib.h>
65 #include "FreeRTOS.h"
66 #include "list.h"
67
68 /*-----------------------------------------------------------
69 * PUBLIC LIST API documented in list.h
70 *----------------------------------------------------------*/
71
\ In segment CODE, align 4, keep-with-next
72 void vListInitialise( xList *pxList )
73 {
74 /* The list structure contains a list item which is used to mark the
75 end of the list. To initialise the list the list end is inserted
76 as the only list entry. */
77 pxList->pxHead = &( pxList->xListEnd );
\ vListInitialise:
\ 00000000 011C MOV R1,R0
\ 00000002 0C31 ADD R1,#+0xC
\ 00000004 4160 STR R1,[R0, #+0x4]
78 pxList->pxIndex = pxList->pxHead;
\ 00000006 8160 STR R1,[R0, #+0x8]
79
80 /* The list end value is the highest possible value in the list to
81 ensure it remains at the end of the list. */
82 pxList->xListEnd.xItemValue = portMAX_DELAY;
\ 00000008 0021 MOV R1,#+0
\ 0000000A C943 MVN R1,R1 ;; #-1
\ 0000000C C160 STR R1,[R0, #+0xC]
83
84 /* The list end next and previous pointers point to itself so we know
85 when the list is empty. */
86 pxList->xListEnd.pxNext = &( pxList->xListEnd );
\ 0000000E 011C MOV R1,R0
\ 00000010 0C31 ADD R1,#+0xC
\ 00000012 0161 STR R1,[R0, #+0x10]
87 pxList->xListEnd.pxPrevious = &( pxList->xListEnd );
\ 00000014 011C MOV R1,R0
\ 00000016 0C31 ADD R1,#+0xC
\ 00000018 4161 STR R1,[R0, #+0x14]
88
89 /* The list head will never get used and has no owner. */
90 pxList->xListEnd.pvOwner = NULL;
\ 0000001A 0021 MOV R1,#+0
\ 0000001C 8161 STR R1,[R0, #+0x18]
91
92 /* Make sure the marker items are not mistaken for being on a list. */
93 vListInitialiseItem( ( xListItem * ) &( pxList->xListEnd ) );
\ 0000001E C161 STR R1,[R0, #+0x1C]
94
95 pxList->uxNumberOfItems = 0;
\ 00000020 0160 STR R1,[R0, #+0]
96 }
\ 00000022 7047 BX LR ;; return
97 /*-----------------------------------------------------------*/
98
\ In segment CODE, align 4, keep-with-next
99 void vListInitialiseItem( xListItem *pxItem )
100 {
101 /* Make sure the list item is not recorded as being on a list. */
102 pxItem->pvContainer = NULL;
\ vListInitialiseItem:
\ 00000000 0021 MOV R1,#+0
\ 00000002 0161 STR R1,[R0, #+0x10]
103 }
\ 00000004 7047 BX LR ;; return
104 /*-----------------------------------------------------------*/
105
\ In segment CODE, align 4, keep-with-next
106 void vListInsertEnd( xList *pxList, xListItem *pxNewListItem )
107 {
108 volatile xListItem * pxIndex;
109
110 /* Insert a new list item into pxList, but rather than sort the list,
111 makes the new list item the last item to be removed by a call to
112 pvListGetOwnerOfNextEntry. This means it has to be the item pointed to by
113 the pxIndex member. */
114 pxIndex = pxList->pxIndex;
\ vListInsertEnd:
\ 00000000 8268 LDR R2,[R0, #+0x8]
115
116 pxNewListItem->pxNext = pxIndex->pxNext;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -