📄 model.lst
字号:
__start:
__text_start:
77 EFCF LDI R28,0xFF
78 E0D4 LDI R29,4
79 BFCD OUT 0x3D,R28
7A BFDE OUT 0x3E,R29
7B 50C0 SUBI R28,0
7C 40D1 SBCI R29,1
7D EA0A LDI R16,0xAA
7E 8308 STD Y+0,R16
7F 2400 CLR R0
80 E6E9 LDI R30,0x69
81 E0F1 LDI R31,1
82 E011 LDI R17,1
83 3DE5 CPI R30,0xD5
84 07F1 CPC R31,R17
85 F011 BEQ 0x0088
86 9201 ST R0,Z+
87 CFFB RJMP 0x0083
88 8300 STD Z+0,R16
89 E8E4 LDI R30,0x84
8A E0F0 LDI R31,0
8B E0A0 LDI R26,0
8C E0B1 LDI R27,1
8D E010 LDI R17,0
8E E000 LDI R16,0
8F BF0B OUT 0x3B,R16
90 3EED CPI R30,0xED
91 07F1 CPC R31,R17
92 F021 BEQ 0x0097
93 95C8 LPM
94 9631 ADIW R30,1
95 920D ST R0,X+
96 CFF9 RJMP 0x0090
97 D749 RCALL _main
_exit:
98 CFFF RJMP _exit
FILE: E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
(0001) /***********************************************************
(0002) * 函数库说明:合作调度器基本函数库 *
(0003) * 版本: v1.01 *
(0004) * 作者: 王卓然 *
(0005) * 创建日期: 2006年8月28日 *
(0006) * -------------------------------------------------------- *
(0007) * [支 持 库] *
(0008) * 支持库名称:RD_UseCooperatingMiniOs.h *
(0009) * 需要版本: ----- *
(0010) * 支持库说明:合作调度器基本声明库 *
(0011) * *
(0012) * 支持库名称:RD_MacroAndConst.h *
(0013) * 需要版本: v0.04 &abv *
(0014) * 支持库说明:系统常用宏定义库 *
(0015) * -------------------------------------------------------- *
(0016) * [版本更新] *
(0017) * -------------------------------------------------------- *
(0018) * [版本历史] *
(0019) * -------------------------------------------------------- *
(0020) * [使用说明] *
(0021) * 1、在系统初始化的时候调用函数CmOSInit()来初始 *
(0022) * 化消息对系统;同时通过定义宏 *
(0023) * COS_REGISTER_PROC_FUNCTION来说明静态进程函 *
(0024) * 数的消息处理函数和动作函数(使用函数指针)。 *
(0025) * 每增加一个静态进程,要更新一次进程计数器 *
(0026) * COS_Proc_Counter,保证每一个进程都能被有效 *
(0027) * 的寻址。 *
(0028) * 7、用户可以通过宏COS_PROCESS_COUNT来定义最大的 *
(0029) * 进程PCB数量。这个数值直接影响系统允许的静态 *
(0030) * 进程的数量,并要占用一定的空间。这个数目的 *
(0031) * 最小值是1,因为默认有一个系统默认消息处理 *
(0032) * 进程。 *
(0033) * 8、用户需要COS_REGISTER_MSG_FUNCTION宏来说明 *
(0034) * 系统进程的初始化函数,通过这个初始化函数告 *
(0035) * 诉消息系统,一共有多少静态进程,并且说明这 *
(0036) * 些静态进程的相关函数指针是什么。 *
(0037) ***********************************************************/
(0038)
(0039) /********************
(0040) * 头 文 件 配 置 区 *
(0041) ********************/
(0042) # include "RD_MacroAndConst.h"
(0043) # include "RD_UseCooperatingMiniOs.h"
(0044)
(0045) /********************
(0046) * 系 统 宏 定 义 *
(0047) ********************/
(0048)
(0049) /*------------------*
(0050) * 常 数 宏 定 义 *
(0051) *------------------*/
(0052) #ifndef COS_PROCESS_COUNT
(0053) //# define COS_PROCESS_COUNT 8
(0054) #error Need for COS_PROCESS_COUNT!
(0055) #endif
(0056)
(0057) /*------------------*
(0058) * 动 作 宏 定 义 *
(0059) *------------------*/
(0060) #ifndef COS_REGISTER_PROC_FUNCTION
(0061) # define COS_REGISTER_PROC_FUNCTION
(0062) #endif
(0063)
(0064) /********************
(0065) * 结构体宏定义 *
(0066) ********************/
(0067)
(0068) /********************
(0069) * 函 数 声 明 区 *
(0070) ********************/
(0071) BOOL NULL_PROC(void);
(0072) void CMOS_INIT(void);
(0073) void Process_Task(void);
(0074)
(0075) /********************
(0076) * 全局变量声明区 *
(0077) ********************/
(0078) volatile PROCESS ProcPCB[COS_PROCESS_COUNT+1];
(0079) uint8 g_cCOSPROCCounter = 0;
(0080) uint8 g_cScheduleTest = 0;
(0081)
(0082) /***********************************************************
(0083) * 函数说明:空函数 *
(0084) * 输入: 无 *
(0085) * 输出: 无 *
(0086) * 调用函数:无 *
(0087) ***********************************************************/
(0088) BOOL NULL_PROC(void)
(0089) {
(0090) return FALSE;
_NULL_PROC:
99 2700 CLR R16
9A 9508 RET
_CMOS_INIT:
Reg1 --> R10
n1 --> R20
9B D813 RCALL push_xgset300C
(0091) }
(0092)
(0093) /***********************************************************
(0094) * 函数说明:消息队列系统初始化函数 *
(0095) * 输入: 无 *
(0096) * 输出: 无 *
(0097) * 调用函数:COS_REGISTER_PROC_FUNCTION *
(0098) * -------------------------------------------------------- *
(0099) * [注意事项] *
(0100) * 1、ProcPCB[]是一个函数指针数组,里面登记着 *
(0101) * 所有系统合法的消息处理函数的地址。 *
(0102) * 2、ProcPCB[]下标中,0为系统保留,其余为用户 *
(0103) * 自定义。 *
(0104) * 3、用户需要自己通过编写函数并通过连接宏 *
(0105) * MSG_REGISTER_PROC_FUNCTION来注册合法消息处理 *
(0106) * 函数。 *
(0107) * 4、编程的时候,每增加一个静态的进程,就要增加一 *
(0108) * 次进程计数器MSG_Proc_Counter。 *
(0109) ***********************************************************/
(0110) void CMOS_INIT(void)
(0111) {
(0112) uint8 n = 0;
(0113)
(0114) for (n = 0;n<COS_PROCESS_COUNT+1;n++)
9C 2744 CLR R20
9D C014 RJMP 0x00B2
(0115) {
(0116) #ifdef _USE_MESSAGE_PROC
(0117) ProcPCB[n].ProcIO = SYS_DEFAULT;
(0118) #endif
(0119) ProcPCB[n].Proc = NULL_PROC;
9E E083 LDI R24,3
9F 9F84 MUL R24,R20
A0 0150 MOVW R10,R0
A1 E689 LDI R24,0x69
A2 E091 LDI R25,1
A3 01F5 MOVW R30,R10
A4 0FE8 ADD R30,R24
A5 1FF9 ADC R31,R25
A6 E384 LDI R24,0x34
A7 E090 LDI R25,0
A8 8391 STD Z+1,R25
A9 8380 STD Z+0,R24
(0120) ProcPCB[n].IfProcAlive = FALSE;
AA E68B LDI R24,0x6B
AB E091 LDI R25,1
AC 01F5 MOVW R30,R10
AD 0FE8 ADD R30,R24
AE 1FF9 ADC R31,R25
AF 2422 CLR R2
B0 8220 STD Z+0,R2
B1 9543 INC R20
B2 3044 CPI R20,4
B3 F350 BCS 0x009E
(0121) }
(0122)
(0123) COS_REGISTER_PROC_FUNCTION
B4 D6EF RCALL _PROC_Register
B5 C7FE RJMP pop_xgset300C
_Process_Task:
B6 934A ST R20,-Y
B7 935A ST R21,-Y
(0124) }
(0125)
(0126) /***********************************************************
(0127) * 函数说明:任务处理函数 *
(0128) * 输入: 无 *
(0129) * 输出: 无 *
(0130) * 调用函数:无 *
(0131) ***********************************************************/
(0132) void Process_Task(void)
(0133) {
(0134) static uint8 n = 0;
(0135)
(0136) if (ProcPCB[n].IfProcAlive) //处理进程
B8 9020 0102 LDS R2,RD_UseCooperatingMiniOs.c:n
BA E083 LDI R24,3
BB 9D82 MUL R24,R2
BC 01F0 MOVW R30,R0
BD E68B LDI R24,0x6B
BE E091 LDI R25,1
BF 0FE8 ADD R30,R24
C0 1FF9 ADC R31,R25
C1 8020 LDD R2,Z+0
C2 2022 TST R2
C3 F0C1 BEQ 0x00DC
(0137) {
(0138) ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
C4 9020 0102 LDS R2,RD_UseCooperatingMiniOs.c:n
C6 E083 LDI R24,3
C7 9D82 MUL R24,R2
C8 0110 MOVW R2,R0
C9 E689 LDI R24,0x69
CA E091 LDI R25,1
CB 01F1 MOVW R30,R2
CC 0FE8 ADD R30,R24
CD 1FF9 ADC R31,R25
CE 81A0 LDD R26,Z+0
CF 81B1 LDD R27,Z+1
D0 920F PUSH R0
D1 921F PUSH R1
D2 01FD MOVW R30,R26
D3 D7F3 RCALL xicall
D4 903F POP R3
D5 902F POP R2
D6 E68B LDI R24,0x6B
D7 E091 LDI R25,1
D8 01F1 MOVW R30,R2
D9 0FE8 ADD R30,R24
DA 1FF9 ADC R31,R25
DB 8300 STD Z+0,R16
(0139) }
(0140)
(0141) n ++;
DC 9180 0102 LDS R24,RD_UseCooperatingMiniOs.c:n
DE 5F8F SUBI R24,0xFF
DF 9380 0102 STS RD_UseCooperatingMiniOs.c:n,R24
(0142) if (n >= g_cCOSPROCCounter)
E1 9020 0100 LDS R2,g_cCOSPROCCounter
E3 1582 CP R24,R2
E4 F078 BCS 0x00F4
(0143) {
(0144) n = 0;
E5 2422 CLR R2
E6 9220 0102 STS RD_UseCooperatingMiniOs.c:n,R2
(0145) g_cScheduleTest = MIN(g_cScheduleTest + 1,254);
E8 9180 0101 LDS R24,g_cScheduleTest
EA 5F8F SUBI R24,0xFF
EB 3F8E CPI R24,0xFE
EC F420 BCC 0x00F1
ED 9140 0101 LDS R20,g_cScheduleTest
EF 5F4F SUBI R20,0xFF
F0 C001 RJMP 0x00F2
F1 EF4E LDI R20,0xFE
F2 9340 0101 STS g_cScheduleTest,R20
(0146) }
F4 9159 LD R21,Y+
F5 9149 LD R20,Y+
F6 9508 RET
_UARTgetDataFromRxBuff:
cflags0 --> R10
Data --> R16
F7 92AA ST R10,-Y
FILE: E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
(0001) /***********************************************************
(0002) * 函数库说明:串行通讯缓冲区处理函数库 *
(0003) * 版本: v1.00 *
(0004) * 作者: 王卓然 *
(0005) * 创建日期: 2006年4月24日 *
(0006) * -------------------------------------------------------- *
(0007) * [支 持 库] *
(0008) * 支持库名称:RD_MacroAndConst.h *
(0009) * 需要版本: v0.01 &abv *
(0010) * 函数库说明:系统常用宏定义库 *
(0011) * *
(0012) * 支持库名称:RD_UseSerialBuff.h *
(0013) * 需要版本: ----- *
(0014) * 声明库说明:串行通讯缓冲区处理声明库 *
(0015) * -------------------------------------------------------- *
(0016) * [版本更新] *
(0017) * 修改: 王卓然 *
(0018) * 修改日期: 2006年5月20日 *
(0019) * 版本: v0.31 *
(0020) * *
(0021) * 修改: 王卓然 *
(0022) * 修改日期: 2007年3月1日 *
(0023) * 版本: v0.40 *
(0024) * *
(0025) * 修改: 王卓然 *
(0026) * 修改日期: 2007年3月2日 *
(0027) * 版本: v1.00 *
(0028) * -------------------------------------------------------- *
(0029) * [版本历史] *
(0030) * v0.30 该版本提供了最基本的环形队列缓冲区操作函数。*
(0031) * v0.31 增加了调用该函数时候的宏说明,可以选择需要 *
(0032) * 提供的缓冲区功能。 *
(0033) * v0.40 增加了串口发送进程。增加了原子操作。 *
(0034) * v1.00 针对新规范进行了修改,增加自动收发进程。 *
(0035) * -------------------------------------------------------- *
(0036) * [使用说明] *
(0037) * 1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
(0038) * 小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
(0039) * 的大小。 *
(0040) * 2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
(0041) * 收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
(0042) * 一个发送缓冲区。 *
(0043) * 3、在取数的时候,有时候要考虑屏蔽中断,否则会 *
(0044) * 出现不可预知的后果。 *
(0045) * 4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
(0046) * 使用发送缓冲时,使用自动发送进程。并需要定 *
(0047) * 义宏UDR_PORT来指定发送端口、也需要将宏 *
(0048) * SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
(0049) * 成中断处理程序中。 *
(0050) * 5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
(0051) * 代码。例如485总线的发送使能等。 *
(0052) * 6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使 *
(0053) * 能关闭代码。例如485总线发送使能的关闭。 *
(0054) ***********************************************************/
(0055)
(0056) /********************
(0057) * 头 文 件 配 置 区 *
(0058) ********************/
(0059) # include "LIB_Config.h"
(0060) # include "RD_MacroAndConst.h"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -