📄 user_code.lst
字号:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 1
1 .file "user_code.c"
2 .arch atmega8
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
10 .stabs "H:\\USER\\MXRTSAVR\\V110/",100,0,0,.Ltext0
11 .stabs "user_code.c",100,0,0,.Ltext0
12 .text
13 .Ltext0:
14 .stabs "gcc2_compiled.",60,0,0,0
15 .stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
16 .stabs "char:t(0,2)=@s8;r(0,2);0;255;",128,0,0,0
17 .stabs "long int:t(0,3)=@s32;r(0,3);0020000000000;0017777777777;",128,0,0,0
18 .stabs "unsigned int:t(0,4)=r(0,4);0000000000000;0000000177777;",128,0,0,0
19 .stabs "long unsigned int:t(0,5)=@s32;r(0,5);0000000000000;0037777777777;",128,0,0,0
20 .stabs "long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;",128,0,0,
21 .stabs "long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;",128,0,0,
22 .stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
23 .stabs "short unsigned int:t(0,9)=r(0,9);0000000000000;0000000177777;",128,0,0,0
24 .stabs "signed char:t(0,10)=@s8;r(0,10);-128;127;",128,0,0,0
25 .stabs "unsigned char:t(0,11)=@s8;r(0,11);0;255;",128,0,0,0
26 .stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0
27 .stabs "double:t(0,13)=r(0,1);4;0;",128,0,0,0
28 .stabs "long double:t(0,14)=r(0,1);4;0;",128,0,0,0
29 .stabs "complex int:t(0,15)=s4real:(0,1),0,16;imag:(0,1),16,16;;",128,0,0,0
30 .stabs "complex float:t(0,16)=R3;8;0;",128,0,0,0
31 .stabs "complex double:t(0,17)=R3;8;0;",128,0,0,0
32 .stabs "complex long double:t(0,18)=R3;8;0;",128,0,0,0
33 .stabs "__builtin_va_list:t(0,19)=*(0,20)=(0,20)",128,0,0,0
34 .stabs "_Bool:t(0,21)=@s8;-16;",128,0,0,0
35 .stabs "user_code.c",130,0,0,0
36 .stabs "C:/WinAVR/avr/include/avr/io.h",130,0,0,0
37 .stabs "C:/WinAVR/avr/include/avr/sfr_defs.h",130,0,0,0
38 .stabn 162,0,0,0
39 .stabs "C:/WinAVR/avr/include/avr/iom8.h",130,0,0,0
40 .stabn 162,0,0,0
41 .stabn 162,0,0,0
42 .stabs "mxavr.c",130,0,0,0
43 .stabs "OS_TASK_TCB:T(5,1)=s8task_address:(0,4),0,16;task_pri:(0,11),16,8;task_ready:(0,11),24,8;t
44 .lcomm OS_TASK_INT_USED,1
45 .stabs "OS_CREATE_TASK:F(0,20)",36,0,120,OS_CREATE_TASK
46 .stabs "task:p(5,2)=*(0,20)",160,0,115,1
47 .stabs "task_ready:p(0,11)",160,0,116,3
48 .stabs "task_pri:p(0,11)",160,0,117,4
49 .stabs "task_sp:p(0,4)",160,0,119,5
50 .global OS_CREATE_TASK
51 .type OS_CREATE_TASK, @function
52 OS_CREATE_TASK:
53 .stabs "mxavr.c",132,0,0,.Ltext1
54 .Ltext1:
1:mxavr.c ****
2:mxavr.c **** //************************************************
3:mxavr.c **** //
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 2
4:mxavr.c **** // MX RTOS AVR 嵌入式操作系统 V1.10 C 内核文件
5:mxavr.c **** // 作者:罗国祥 DEF edisonluo@sina.com
6:mxavr.c **** // 本人收回本内核所有权
7:mxavr.c **** // 2004年3月1日
8:mxavr.c **** //************************************************
9:mxavr.c ****
10:mxavr.c ****
11:mxavr.c ****
12:mxavr.c ****
13:mxavr.c **** //#include <avr/io.h>
14:mxavr.c ****
15:mxavr.c **** //************************************************
16:mxavr.c **** //
17:mxavr.c **** // 内核设置声明
18:mxavr.c **** //
19:mxavr.c **** //************************************************
20:mxavr.c ****
21:mxavr.c **** #define SP_POINTER SP //声明堆栈指针寄存器
22:mxavr.c ****
23:mxavr.c **** #define TASK_NUMBER 4 //声明要建立的线程数量 (用户修改部分 用来确定用户所建立的线程数目)
24:mxavr.c ****
25:mxavr.c **** //************************************************
26:mxavr.c **** //
27:mxavr.c **** // 内核外部接口函数声明
28:mxavr.c **** //
29:mxavr.c **** //************************************************
30:mxavr.c **** extern void OS_GET_TO_TASK_INT(void); //汇编函数跳入下一条线程(中断模式)
31:mxavr.c **** extern void OS_GET_TO_TASK_DISP(void); //汇编函数跳入下一条线程(普通模式)
32:mxavr.c **** extern void START_TICK_POINT(void); //汇编函数第一次启动时跳入调度入口点
33:mxavr.c **** extern void OS_DISP_TIME_P(void); //汇编函数处理线程延时保存切换接口
34:mxavr.c ****
35:mxavr.c **** //************************************************
36:mxavr.c **** //
37:mxavr.c **** // 内核接口函数声明
38:mxavr.c **** //
39:mxavr.c **** //************************************************
40:mxavr.c ****
41:mxavr.c **** //建立线程函数
42:mxavr.c **** void OS_CREATE_TASK(void *task, //线程入口地址
43:mxavr.c **** unsigned char task_ready, //线程状态
44:mxavr.c **** unsigned char task_pri, //线程优先级
45:mxavr.c **** unsigned int task_sp //线程分配堆栈
46:mxavr.c **** );
47:mxavr.c ****
48:mxavr.c **** //建立调度系统环境
49:mxavr.c **** void OS_CREATE_ATTEMPER(void *task, //线程入口地址
50:mxavr.c **** unsigned int task_sp //线程分配堆栈
51:mxavr.c **** );
52:mxavr.c ****
53:mxavr.c **** //下一条线程处理函数(中断模式)
54:mxavr.c **** void OS_GETTO_NEXT_TASK_INT(void);
55:mxavr.c **** //下一条线程处理函数(普通模式)
56:mxavr.c **** void OS_GETTO_NEXT_TASK_DISP(void);
57:mxavr.c ****
58:mxavr.c **** //系统调度器
59:mxavr.c **** void OS_ATTEMPER(void);
60:mxavr.c ****
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 3
61:mxavr.c **** //启动RTOS
62:mxavr.c **** inline void OS_START_TICK(void);
63:mxavr.c **** //重新初始化系统时钟
64:mxavr.c **** void OS_RELOAD_TICK(void);
65:mxavr.c ****
66:mxavr.c **** //保存当前线程SP指针
67:mxavr.c **** void OS_SAVE_TASK_SP(unsigned int task_sp);
68:mxavr.c ****
69:mxavr.c **** //线程延时函数
70:mxavr.c **** void OS_TASK_DLY(unsigned char disp_time); //参数disp_time为等待时钟节拍数
71:mxavr.c ****
72:mxavr.c **** //时钟节拍处理过程
73:mxavr.c **** void OS_DLY_TIME_DEC(void);//用来处理线程的等待时间
74:mxavr.c ****
75:mxavr.c **** //获取线程ID
76:mxavr.c **** unsigned char OS_GET_TASK_ID(void *task);
77:mxavr.c ****
78:mxavr.c **** //************************************************
79:mxavr.c **** //
80:mxavr.c **** // 内核变量声明
81:mxavr.c **** //
82:mxavr.c **** //************************************************
83:mxavr.c ****
84:mxavr.c **** //线程TCB //储存每条线程的固有特性
85:mxavr.c **** volatile typedef struct OS_TASK_TCB
86:mxavr.c **** {
87:mxavr.c **** unsigned int task_address; //线程入口地址
88:mxavr.c **** unsigned char task_pri; //优先级
89:mxavr.c **** unsigned char task_ready; //线程状态
90:mxavr.c **** unsigned int task_sp; //线程堆栈指针
91:mxavr.c **** unsigned char task_wait_clock; //线程等待时钟
92:mxavr.c **** unsigned char task_on_activation; //线程活动状态
93:mxavr.c **** };
94:mxavr.c ****
95:mxavr.c **** //建立线程TCB数组
96:mxavr.c **** volatile static struct OS_TASK_TCB OS_TASK_ARRY[TASK_NUMBER];//TASK_NUMBER为定义数值,为最大线程数
97:mxavr.c ****
98:mxavr.c **** //记录线程已建立数
99:mxavr.c **** volatile static unsigned char OS_TASK_INT_USED=0;
100:mxavr.c ****
101:mxavr.c **** //记录现在线程ID
102:mxavr.c **** volatile static unsigned char os_now_task;
103:mxavr.c **** //记录下一条线程ID
104:mxavr.c **** volatile static unsigned char os_next_task;
105:mxavr.c ****
106:mxavr.c ****
107:mxavr.c ****
108:mxavr.c **** //************************************************
109:mxavr.c **** //
110:mxavr.c **** // 内核函数实现
111:mxavr.c **** //
112:mxavr.c **** //************************************************
113:mxavr.c ****
114:mxavr.c **** //建立线程函数
115:mxavr.c **** void OS_CREATE_TASK(void *task, //线程入口地址
116:mxavr.c **** unsigned char task_ready, //线程状态
117:mxavr.c **** unsigned char task_pri, //线程优先级
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 4
118:mxavr.c **** unsigned int task_sp //线程分配堆栈
119:mxavr.c **** )
120:mxavr.c **** {
55 .stabn 68,0,120,.LM1-OS_CREATE_TASK
56 .LM1:
57 /* prologue: frame size=10 */
58 0000 CF93 push r28
59 0002 DF93 push r29
60 0004 CDB7 in r28,__SP_L__
61 0006 DEB7 in r29,__SP_H__
62 0008 2A97 sbiw r28,10
63 000a 0FB6 in __tmp_reg__,__SREG__
64 000c F894 cli
65 000e DEBF out __SP_H__,r29
66 0010 0FBE out __SREG__,__tmp_reg__
67 0012 CDBF out __SP_L__,r28
68 /* prologue end (size=10) */
69 0014 8983 std Y+1,r24
70 0016 9A83 std Y+2,r25
71 0018 6B83 std Y+3,r22
72 001a 4C83 std Y+4,r20
73 001c 2D83 std Y+5,r18
74 001e 3E83 std Y+6,r19
121:mxavr.c **** unsigned int temp_address;//处理线程入口地址临时变量
122:mxavr.c **** unsigned char *sp_temp; //初始化线程堆栈临时指针
123:mxavr.c ****
124:mxavr.c **** OS_TASK_ARRY[OS_TASK_INT_USED].task_address=(unsigned int)task; //赋予线程地址
75 .stabn 68,0,124,.LM2-OS_CREATE_TASK
76 .LM2:
77 .LBB2:
78 0020 8091 0000 lds r24,OS_TASK_INT_USED
79 0024 9927 clr r25
80 0026 880F lsl r24
81 0028 991F rol r25
82 002a 880F lsl r24
83 002c 991F rol r25
84 002e 880F lsl r24
85 0030 991F rol r25
86 0032 FC01 movw r30,r24
87 0034 E050 subi r30,lo8(-(OS_TASK_ARRY))
88 0036 F040 sbci r31,hi8(-(OS_TASK_ARRY))
89 0038 8981 ldd r24,Y+1
90 003a 9A81 ldd r25,Y+2
91 003c 8083 st Z,r24
92 003e 9183 std Z+1,r25
125:mxavr.c **** OS_TASK_ARRY[OS_TASK_INT_USED].task_ready=task_ready; //赋予线程状态
93 .stabn 68,0,125,.LM3-OS_CREATE_TASK
94 .LM3:
95 0040 8091 0000 lds r24,OS_TASK_INT_USED
96 0044 9927 clr r25
97 0046 880F lsl r24
98 0048 991F rol r25
99 004a 880F lsl r24
100 004c 991F rol r25
101 004e 880F lsl r24
102 0050 991F rol r25
103 0052 FC01 movw r30,r24
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 5
104 0054 E050 subi r30,lo8(-(OS_TASK_ARRY+3))
105 0056 F040 sbci r31,hi8(-(OS_TASK_ARRY+3))
106 0058 8B81 ldd r24,Y+3
107 005a 8083 st Z,r24
126:mxavr.c **** OS_TASK_ARRY[OS_TASK_INT_USED].task_pri=task_pri; //赋予线程优先级
108 .stabn 68,0,126,.LM4-OS_CREATE_TASK
109 .LM4:
110 005c 8091 0000 lds r24,OS_TASK_INT_USED
111 0060 9927 clr r25
112 0062 880F lsl r24
113 0064 991F rol r25
114 0066 880F lsl r24
115 0068 991F rol r25
116 006a 880F lsl r24
117 006c 991F rol r25
118 006e FC01 movw r30,r24
119 0070 E050 subi r30,lo8(-(OS_TASK_ARRY+2))
120 0072 F040 sbci r31,hi8(-(OS_TASK_ARRY+2))
121 0074 8C81 ldd r24,Y+4
122 0076 8083 st Z,r24
127:mxavr.c ****
128:mxavr.c **** //初始化线程堆栈
129:mxavr.c **** temp_address=(unsigned int)task;
123 .stabn 68,0,129,.LM5-OS_CREATE_TASK
124 .LM5:
125 0078 8981 ldd r24,Y+1
126 007a 9A81 ldd r25,Y+2
127 007c 8F83 std Y+7,r24
128 007e 9887 std Y+8,r25
130:mxavr.c ****
131:mxavr.c **** sp_temp=(unsigned int*)task_sp; //给指针赋值
129 .stabn 68,0,131,.LM6-OS_CREATE_TASK
130 .LM6:
131 0080 8D81 ldd r24,Y+5
132 0082 9E81 ldd r25,Y+6
133 0084 8987 std Y+9,r24
134 0086 9A87 std Y+10,r25
132:mxavr.c ****
133:mxavr.c **** *sp_temp=(unsigned char)temp_address; //赋值入口地址低8位
135 .stabn 68,0,133,.LM7-OS_CREATE_TASK
136 .LM7:
137 0088 E985 ldd r30,Y+9
138 008a FA85 ldd r31,Y+10
139 008c 8F81 ldd r24,Y+7
140 008e 8083 st Z,r24
134:mxavr.c **** --sp_temp;
141 .stabn 68,0,134,.LM8-OS_CREATE_TASK
142 .LM8:
143 0090 8985 ldd r24,Y+9
144 0092 9A85 ldd r25,Y+10
145 0094 0197 sbiw r24,1
146 0096 8987 std Y+9,r24
147 0098 9A87 std Y+10,r25
135:mxavr.c **** *sp_temp=(unsigned char)(temp_address>>8); //赋值入口地址高8位
148 .stabn 68,0,135,.LM9-OS_CREATE_TASK
149 .LM9:
150 009a E985 ldd r30,Y+9
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccykaaaa.s page 6
151 009c FA85 ldd r31,Y+10
152 009e 8F81 ldd r24,Y+7
153 00a0 9885 ldd r25,Y+8
154 00a2 892F mov r24,r25
155 00a4 9927 clr r25
156 00a6 8083 st Z,r24
136:mxavr.c **** --sp_temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -