📄 mac_scheduler.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 16/Jan/2007 15:30:42 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = banked #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\lib\mac\CC2430\mac_scheduler.c #
# Command line = -I "C:\Program Files\IAR Systems\Embedded #
# Workbench 4.05 Evaluation version\8051\INC\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\SRC\LIB\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\INC\CLIB\" -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\ -I #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\..\..\..\include\mac\cc2430\ #
# -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_E #
# ngine\Test\mac\mac_loc\..\..\..\include\hal\cc243 #
# 0\ -I E:\公司产品资料\Zigbee\cc2431\cc2431定位\LO #
# C_Engine\Test\mac\mac_loc\..\..\..\apps\ -D #
# CC2430EB -D USE_LED -lCN #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -lA #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\ -o #
# E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\ -e -s9 --debug #
# --core=plain --dptr=16,1 --data_model=large #
# --code_model=banked --calling_convention=xdata_re #
# entrant --place_constants=data --nr_virtual_regs #
# 8 E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_En #
# gine\lib\mac\CC2430\mac_scheduler.c #
# List file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\List\mac_scheduler.l #
# st #
# Object file = E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engi #
# ne\Test\mac\mac_loc\CC2430EB\Obj\mac_scheduler.r5 #
# 1 #
# #
# #
##############################################################################
E:\公司产品资料\Zigbee\cc2431\cc2431定位\LOC_Engine\lib\mac\CC2430\mac_scheduler.c
1 /*******************************************************************************************************
2 * *
3 * ********** *
4 * ************ *
5 * *** *** *
6 * *** +++ *** *
7 * *** + + *** *
8 * *** + CHIPCON CC2430 INTEGRATED 802.15.4 MAC AND PHY *
9 * *** + + *** Task Scheduler *
10 * *** +++ *** *
11 * *** *** *
12 * ************ *
13 * ********** *
14 * *
15 *******************************************************************************************************
16 * CONFIDENTIAL *
17 * The use of this file is restricted by the signed MAC software license agreement. *
18 * *
19 * Copyright Chipcon AS, 2005 *
20 *******************************************************************************************************
21 * This module contains the task scheduler used by the MAC layer. A task can begin at every backoff *
22 * slot boundary, assuming that no tasks of same or higher priorities running: *
23 * *
24 * Task queues: Task pool: *
25 * | H+<T | TT | *
26 * Execution priority: | H <TTT <----- |TT TTT T| *
27 * | M <TT |T TT TTT| *
28 * V L <TTTTT |--------| *
29 * ^ *
30 * | *
31 * One-way linked list, FIFO *
32 *******************************************************************************************************/
33 #include <mac_headers.h>
34
35
36 //-------------------------------------------------------------------------------------------------------
37 // Scheduler data
\ In segment PM0_XDATA, align 1
38 __no_init MAC_TASK_INFO pMacTasks[MAC_TASK_COUNT] @ "PM0_XDATA";
\ pMacTasks:
\ 000000 DS 200
\ In segment PM0_XDATA, align 1
39 __no_init MAC_TASK_QUEUE pMacTaskQueues[MAC_TASK_PRIORITY_COUNT] @ "PM0_XDATA";
\ pMacTaskQueues:
\ 000000 DS 12
40 //-------------------------------------------------------------------------------------------------------
41
42
43
44
45 //-------------------------------------------------------------------------------------------------------
46 // void mschInit(void)
47 //
48 // DESCRIPTION:
49 // Initializes the task pool and the task queues.
50 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
51 ROOT void mschInit(void) {
\ mschInit:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
52 UINT8 n;
53
54 // Initialize the task queues
55 for (n = 0; n < MAC_TASK_PRIORITY_COUNT; n++) {
\ 000004 78.. MOV R0,#(pMacTaskQueues & 0xff)
\ 000006 79.. MOV R1,#((pMacTaskQueues >> 8) & 0xff)
\ 000008 7A04 MOV R2,#0x4
56 pMacTaskQueues[n].firstTask = NO_TASK;
\ ??mschInit_0:
\ 00000A 74FF MOV A,#-0x1
\ 00000C 8882 MOV DPL,R0
\ 00000E 8983 MOV DPH,R1
\ 000010 F0 MOVX @DPTR,A
57 pMacTaskQueues[n].lastTask = NO_TASK;
\ 000011 A3 INC DPTR
\ 000012 F0 MOVX @DPTR,A
58 pMacTaskQueues[n].taskInProgress = FALSE;
\ 000013 E4 CLR A
\ 000014 8882 MOV DPL,R0
\ 000016 8983 MOV DPH,R1
\ 000018 A3 INC DPTR
\ 000019 A3 INC DPTR
\ 00001A F0 MOVX @DPTR,A
59 }
\ 00001B E8 MOV A,R0
\ 00001C 2403 ADD A,#0x3
\ 00001E 08 INC R0
\ 00001F 08 INC R0
\ 000020 08 INC R0
\ 000021 E9 MOV A,R1
\ 000022 3400 ADDC A,#0x0
\ 000024 F9 MOV R1,A
\ 000025 1A DEC R2
\ 000026 EA MOV A,R2
\ 000027 70E1 JNZ ??mschInit_0
60
61 // Initialize the task pool
62 for (n = 0; n < MAC_TASK_COUNT; n++) {
\ 000029 7A00 MOV R2,#0x0
\ 00002B 78.. MOV R0,#((pMacTasks + 6) & 0xff)
\ 00002D 79.. MOV R1,#(((pMacTasks + 6) >> 8) & 0xff)
63 pMacTasks[n].occupied = FALSE;
\ ??mschInit_1:
\ 00002F E4 CLR A
\ 000030 8882 MOV DPL,R0
\ 000032 8983 MOV DPH,R1
\ 000034 F0 MOVX @DPTR,A
64 pMacTasks[n].taskNumber = n;
\ 000035 EA MOV A,R2
\ 000036 A3 INC DPTR
\ 000037 A3 INC DPTR
\ 000038 A3 INC DPTR
\ 000039 F0 MOVX @DPTR,A
65 }
\ 00003A 0A INC R2
\ 00003B E8 MOV A,R0
\ 00003C 240A ADD A,#0xa
\ 00003E F8 MOV R0,A
\ 00003F E9 MOV A,R1
\ 000040 3400 ADDC A,#0x0
\ 000042 F9 MOV R1,A
\ 000043 EA MOV A,R2
\ 000044 C3 CLR C
\ 000045 9414 SUBB A,#0x14
\ 000047 40E6 JC ??mschInit_1
66
67 } // mschInit
\ 000049 REQUIRE ?Subroutine0
\ 000049 ; // Fall through to label ?Subroutine0
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 22 RET
68
69
70
71
72 //-------------------------------------------------------------------------------------------------------
73 // UINT8 mschReserveTask(void)
74 //
75 // DESCRIPTION:
76 // Reserves a task from the task pool (a task must be reserved before it can be used.
77 //
78 // RETURN VALUE:
79 // UINT8
80 // The index of the reserved task (to be used with mschAddTask(...))
81 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
82 ROOT UINT8 mschReserveTask(void) {
\ mschReserveTask:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
83 UINT8 n;
84
85 // Find an unused task table entry and reserve it
86 for (n = 0; n < MAC_TASK_COUNT; n++) {
\ 000004 7900 MOV R1,#0x0
87 DISABLE_GLOBAL_INT();
\ ??mschReserveTask_0:
\ 000006 C2AF CLR 0xa8.7
88 if (!pMacTasks[n].occupied) {
\ 000008 E9 MOV A,R1
\ 000009 75F00A MOV B,#0xa
\ 00000C A4 MUL AB
\ 00000D 24.. ADD A,#((pMacTasks + 6) & 0xff)
\ 00000F F582 MOV DPL,A
\ 000011 E5F0 MOV A,B
\ 000013 34.. ADDC A,#(((pMacTasks + 6) >> 8) & 0xff)
\ 000015 F583 MOV DPH,A
\ 000017 E0 MOVX A,@DPTR
\ 000018 7007 JNZ ??mschReserveTask_1
89 pMacTasks[n].occupied = TRUE;
\ 00001A 7401 MOV A,#0x1
\ 00001C F0 MOVX @DPTR,A
90 ENABLE_GLOBAL_INT();
\ 00001D D2AF SETB 0xa8.7
91 return n;
\ 00001F 800B SJMP ??mschReserveTask_2
92 }
93 ENABLE_GLOBAL_INT();
\ ??mschReserveTask_1:
\ 000021 D2AF SETB 0xa8.7
94 }
\ 000023 09 INC R1
\ 000024 E9 MOV A,R1
\ 000025 C3 CLR C
\ 000026 9414 SUBB A,#0x14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -