📄 port.lst
字号:
1 .code 16
2 .file "port.c"
10 .Ltext0:
11 .align 2
12 .global pxPortInitialiseStack
13 .code 16
14 .thumb_func
16 pxPortInitialiseStack:
17 .LFB2:
18 .file 1 "FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c"
1:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*
2:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** FreeRTOS V4.0.0 - Copyright (C) 2003-2006 Richard Barry.
3:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
4:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** This file is part of the FreeRTOS distribution.
5:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
6:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** FreeRTOS is free software; you can redistribute it and/or modify
7:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** it under the terms of the GNU General Public License as published by
8:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** the Free Software Foundation; either version 2 of the License, or
9:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** (at your option) any later version.
10:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
11:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** FreeRTOS is distributed in the hope that it will be useful,
12:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** but WITHOUT ANY WARRANTY; without even the implied warranty of
13:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** GNU General Public License for more details.
15:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
16:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** You should have received a copy of the GNU General Public License
17:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** along with FreeRTOS; if not, write to the Free Software
18:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
20:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** A special exception to the GPL can be applied should you wish to distribute
21:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** a combined work that includes FreeRTOS, without being obliged to provide
22:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** the source code for any proprietary components. See the licensing section
23:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** of http://www.FreeRTOS.org for full details of how and when the exception
24:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** can be applied.
25:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
26:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** ***************************************************************************
27:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** See http://www.FreeRTOS.org for documentation, latest information, license
28:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** and contact details. Please ensure to read the configuration and relevant
29:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** port sections of the online documentation.
30:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** ***************************************************************************
31:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** */
32:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
33:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
34:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------
35:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * Implementation of functions defined in portable.h for the ARM7 port.
36:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *
37:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * Components that can be compiled to either ARM or THUMB mode are
38:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * contained in this file. The ISR routines, which can only be compiled
39:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * to ARM mode are contained in portISR.c.
40:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *----------------------------------------------------------*/
41:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
42:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*
43:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** Changes from V2.5.2
44:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
45:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** + ulCriticalNesting is now saved as part of the task context, as is
46:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** therefore added to the initial task stack during pxPortInitialiseStack.
47:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
48:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** Changes from V3.2.2
49:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
50:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** + Bug fix - The prescale value for the timer setup is now written to T0_PR
51:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** instead of T0_PC. This bug would have had no effect unless a prescale
52:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** value was actually used.
53:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** */
54:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
55:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
56:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Standard includes. */
57:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #include <stdlib.h>
58:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
59:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Scheduler includes. */
60:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #include "FreeRTOS.h"
61:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #include "task.h"
62:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
63:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Constants required to setup the task context. */
64:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portINITIAL_SPSR ( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enable
65:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portTHUMB_MODE_BIT ( ( portSTACK_TYPE ) 0x20 )
66:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portINSTRUCTION_SIZE ( ( portSTACK_TYPE ) 4 )
67:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portNO_CRITICAL_SECTION_NESTING ( ( portSTACK_TYPE ) 0 )
68:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
69:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Constants required to setup the tick ISR. */
70:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portENABLE_TIMER ( ( unsigned portCHAR ) 0x01 )
71:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portPRESCALE_VALUE 0x00
72:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portINTERRUPT_ON_MATCH ( ( unsigned portLONG ) 0x01 )
73:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portRESET_COUNT_ON_MATCH ( ( unsigned portLONG ) 0x02 )
74:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
75:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Constants required to setup the VIC for the tick ISR. */
76:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portTIMER_VIC_CHANNEL ( ( unsigned portLONG ) 0x0004 )
77:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portTIMER_VIC_CHANNEL_BIT ( ( unsigned portLONG ) 0x0010 )
78:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** #define portTIMER_VIC_ENABLE ( ( unsigned portLONG ) 0x0020 )
79:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
80:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------*/
81:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
82:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Setup the timer to generate the tick interrupts. */
83:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** static void prvSetupTimerInterrupt( void );
84:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
85:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*
86:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * The scheduler can only be started from ARM mode, so
87:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * vPortISRStartFirstSTask() is defined in portISR.c.
88:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** */
89:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** extern void vPortISRStartFirstTask( void );
90:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
91:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*-----------------------------------------------------------*/
92:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
93:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /*
94:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * Initialise the stack of a task to look exactly as if a call to
95:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * portSAVE_CONTEXT had been called.
96:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *
97:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** * See header file for description.
98:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** */
99:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvPa
100:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** {
19 0:
20 .loc 1 111 0
101:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** portSTACK_TYPE *pxOriginalTOS;
102:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
103:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** pxOriginalTOS = pxTopOfStack;
104:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
105:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* Setup the initial stack of the task. The stack is set exactly as
106:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** expected by the portRESTORE_CONTEXT() macro. */
107:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
108:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** /* First on the stack is the return address - which in this case is the
109:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** start of the task. The offset is added to make the return address appear
110:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** as it would within an IRQ ISR. */
111:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE;
21 dd r1, r1, #4
22 0000 0431 .LVL1:
23 .loc 1 114 0
112:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
113:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c ****
114:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa; /* R14 */
24 r r3, .L3
25 0002 1B4B .loc 1 111 0
26 str r1, [r0]
27 0004 0160 .loc 1 112 0
28 sub r1, r0, #4
29 0006 011F .LVL2:
30 .loc 1 114 0
31 str r3, [r1]
32 0008 0B60 .loc 1 115 0
115:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
33 r0
34 000a 031C .LVL3:
35 sub r3, r3, #8
36 000c 083B .loc 1 116 0
116:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */
37 r0, [r3]
38 000e 1860 .loc 1 118 0
117:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
118:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) 0x12121212; /* R12 */
39 dr r3, .L3+4
40 0010 184B .LVL4:
41 .LVL5:
42 .loc 1 117 0
43 sub r1, r1, #8
44 0012 0839 .loc 1 118 0
45 str r3, [r1]
46 0014 0B60 .loc 1 120 0
119:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** pxTopOfStack--;
120:FreeRTOS/Source/portable/GCC/ARM7_LPC2000/port.c **** *pxTopOfStack = ( portSTACK_TYPE ) 0x11111111; /* R11 */
47 .L3+8
48 0016 184B .LVL6:
49 .loc 1 119 0
50 sub r1, r1, #4
51 0018 0439 .loc 1 120 0
52 str r3, [r1]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -