⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 user_code.lst

📁 一个小的操作系统包括应用程序很有参考价值
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -