📄 osal_pwrmgr.lst
字号:
82 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
83 pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; // Default to no power conservation.
\ 000004 E4 CLR A
\ 000005 90.... MOV DPTR,#(pwrmgr_attribute + 6)
\ 000008 F0 MOVX @DPTR,A
84 pwrmgr_attribute.pwrmgr_task_state = 0; // Cleared. All set to conserve
\ 000009 90.... MOV DPTR,#pwrmgr_attribute
\ 00000C F0 MOVX @DPTR,A
\ 00000D A3 INC DPTR
\ 00000E REQUIRE ?Subroutine0
\ 00000E ; // Fall through to label ?Subroutine0
85 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 F0 MOVX @DPTR,A
\ 000001 D083 POP DPH
\ 000003 D082 POP DPL
\ 000005 02.... LJMP ?BRET
86
87 /*********************************************************************
88 * @fn osal_pwrmgr_device
89 *
90 * @brief Sets the device power characteristic.
91 *
92 * @param pwrmgr_device - type of power devices. With PWRMGR_ALWAYS_ON
93 * selection, there is no power savings and the device is most
94 * likely on mains power. The PWRMGR_BATTERY selection allows the
95 * HAL sleep manager to enter sleep.
96 *
97 * @return none
98 */
\ In segment BANKED_CODE, align 1, keep-with-next
99 void osal_pwrmgr_device( uint8 pwrmgr_device )
\ osal_pwrmgr_device:
100 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
101 pwrmgr_attribute.pwrmgr_device = pwrmgr_device;
\ 000004 E9 MOV A,R1
\ 000005 90.... MOV DPTR,#(pwrmgr_attribute + 6)
\ 000008 80.. SJMP ?Subroutine0
102 }
103
104 /*********************************************************************
105 * @fn osal_pwrmgr_task_state
106 *
107 * @brief This function is called by each task to state whether or
108 * not this task wants to conserve power.
109 *
110 * @param task_id - calling task ID.
111 * state - whether the calling task wants to
112 * conserve power or not.
113 *
114 * @return ZSUCCESS if task complete
115 */
\ In segment BANKED_CODE, align 1, keep-with-next
116 uint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state )
\ osal_pwrmgr_task_state:
117 {
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
\ 000007 EA MOV A,R2
\ 000008 FF MOV R7,A
118 if ( osalFindTask( task_id ) == NULL )
\ 000009 ; Setup parameters for call to function osalFindTask
\ 000009 90.... MOV DPTR,#(osalFindTask & 0xffff)
\ 00000C 74.. MOV A,#((osalFindTask >> 16) & 0xff)
\ 00000E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000011 EA MOV A,R2
\ 000012 7001 JNZ ??osal_pwrmgr_task_state_0
\ 000014 EB MOV A,R3
\ ??osal_pwrmgr_task_state_0:
\ 000015 7004 JNZ ??osal_pwrmgr_task_state_1
119 return ( INVALID_TASK );
\ 000017 7901 MOV R1,#0x1
\ 000019 8036 SJMP ??osal_pwrmgr_task_state_2
120
121 if ( state == PWRMGR_CONSERVE )
\ ??osal_pwrmgr_task_state_1:
\ 00001B EF MOV A,R7
\ 00001C 75..01 MOV ?V0 + 0,#0x1
\ 00001F 75..00 MOV ?V0 + 1,#0x0
\ 000022 7019 JNZ ??osal_pwrmgr_task_state_3
122 {
123 // Clear the task state flag
124 pwrmgr_attribute.pwrmgr_task_state &= ~(1 << task_id );
\ 000024 EE MOV A,R6
\ 000025 78.. MOV R0,#?V0 + 0
\ 000027 12.... LCALL ?S_SHL
\ 00002A E5.. MOV A,?V0 + 0
\ 00002C F4 CPL A
\ 00002D F8 MOV R0,A
\ 00002E E5.. MOV A,?V0 + 1
\ 000030 F4 CPL A
\ 000031 F9 MOV R1,A
\ 000032 90.... MOV DPTR,#pwrmgr_attribute
\ 000035 E0 MOVX A,@DPTR
\ 000036 58 ANL A,R0
\ 000037 F0 MOVX @DPTR,A
\ 000038 A3 INC DPTR
\ 000039 E0 MOVX A,@DPTR
\ 00003A 59 ANL A,R1
\ 00003B 8011 SJMP ??osal_pwrmgr_task_state_4
125 }
126 else
127 {
128 // Set the task state flag
129 pwrmgr_attribute.pwrmgr_task_state |= (1 << task_id);
\ ??osal_pwrmgr_task_state_3:
\ 00003D EE MOV A,R6
\ 00003E 78.. MOV R0,#?V0 + 0
\ 000040 12.... LCALL ?S_SHL
\ 000043 90.... MOV DPTR,#pwrmgr_attribute
\ 000046 E0 MOVX A,@DPTR
\ 000047 45.. ORL A,?V0 + 0
\ 000049 F0 MOVX @DPTR,A
\ 00004A A3 INC DPTR
\ 00004B E0 MOVX A,@DPTR
\ 00004C 45.. ORL A,?V0 + 1
\ ??osal_pwrmgr_task_state_4:
\ 00004E F0 MOVX @DPTR,A
130 }
131
132 return ( ZSUCCESS );
\ 00004F 7900 MOV R1,#0x0
\ ??osal_pwrmgr_task_state_2:
\ 000051 7F02 MOV R7,#0x2
\ 000053 02.... LJMP ?BANKED_LEAVE_XDATA
133 }
134
135 #if defined( POWER_SAVING )
136 /*********************************************************************
137 * @fn osal_pwrmgr_powerconserve
138 *
139 * @brief This function is called from the main OSAL loop when there are
140 * no events scheduled and shouldn't be called from anywhere else.
141 *
142 * @param none.
143 *
144 * @return none.
145 */
146 void osal_pwrmgr_powerconserve( void )
147 {
148 uint16 next;
149 halIntState_t intState;
150
151 // Should we even look into power conservation
152 if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
153 {
154 // Are all tasks in agreement to conserve
155 if ( pwrmgr_attribute.pwrmgr_task_state == 0 )
156 {
157 // Hold off interrupts.
158 HAL_ENTER_CRITICAL_SECTION( intState );
159
160 // Get next time-out
161 next = osal_next_timeout();
162
163 // Re-enable interrupts.
164 HAL_EXIT_CRITICAL_SECTION( intState );
165
166 // Put the processor into sleep mode
167 OSAL_SET_CPU_INTO_SLEEP( next );
168 }
169 }
170 }
171 #endif /* POWER_SAVING */
172
173 /*********************************************************************
174 *********************************************************************/
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
osal_pwrmgr_device 2 0 0
osal_pwrmgr_init 2 0 0
osal_pwrmgr_task_state 0 0 10
-> osalFindTask 0 0 20
Segment part sizes:
Function/Label Bytes
-------------- -----
pwrmgr_attribute 7
osal_pwrmgr_init 14
?Subroutine0 8
osal_pwrmgr_device 10
osal_pwrmgr_task_state 86
118 bytes in segment BANKED_CODE
7 bytes in segment XDATA_Z
118 bytes of CODE memory
7 bytes of XDATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -