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

📄 rd_usecooperatingminios.s

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 S
字号:
	.module RD_UseCooperatingMiniOs.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
_g_cCOSPROCCounter::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
_g_cScheduleTest::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
	.dbfunc e NULL_PROC _NULL_PROC fc
	.even
_NULL_PROC::
	.dbline -1
	.dbline 89
; /***********************************************************
; *   函数库说明:合作调度器基本函数库                       *
; *   版本:      v1.01                                      *
; *   作者:      王卓然                                     *
; *   创建日期:  2006年8月28日                              *
; * -------------------------------------------------------- *
; *  [支 持 库]                                              *
; *   支持库名称:RD_UseCooperatingMiniOs.h                  *
; *   需要版本:  -----                                      *
; *   支持库说明:合作调度器基本声明库                       *
; *                                                          *
; *   支持库名称:RD_MacroAndConst.h                         *
; *   需要版本:  v0.04 &abv                                 *
; *   支持库说明:系统常用宏定义库                           *
; * -------------------------------------------------------- *
; *  [版本更新]                                              *
; * -------------------------------------------------------- *
; *  [版本历史]                                              *
; * -------------------------------------------------------- *
; *  [使用说明]                                              *
; *           1、在系统初始化的时候调用函数CmOSInit()来初始  *
; *              化消息对系统;同时通过定义宏                *
; *              COS_REGISTER_PROC_FUNCTION来说明静态进程函  *
; *              数的消息处理函数和动作函数(使用函数指针)。  *
; *              每增加一个静态进程,要更新一次进程计数器    *
; *              COS_Proc_Counter,保证每一个进程都能被有效  *
; *              的寻址。                                    *
; *           7、用户可以通过宏COS_PROCESS_COUNT来定义最大的 *
; *              进程PCB数量。这个数值直接影响系统允许的静态 *
; *              进程的数量,并要占用一定的空间。这个数目的  *
; *              最小值是1,因为默认有一个系统默认消息处理   *
; *              进程。                                      *
; *           8、用户需要COS_REGISTER_MSG_FUNCTION宏来说明   *
; *              系统进程的初始化函数,通过这个初始化函数告  *
; *              诉消息系统,一共有多少静态进程,并且说明这  *
; *              些静态进程的相关函数指针是什么。            *
; ***********************************************************/
; 
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "RD_MacroAndConst.h"
; # include "RD_UseCooperatingMiniOs.h"
; 
; /********************
; *   系 统 宏 定 义  *
; ********************/
; 
; /*------------------*
; *   常 数 宏 定 义  *
; *------------------*/
; #ifndef COS_PROCESS_COUNT
;     //# define COS_PROCESS_COUNT 8
;     #error Need for COS_PROCESS_COUNT!      
; #endif
; 
; /*------------------*
; *   动 作 宏 定 义  *
; *------------------*/
; #ifndef COS_REGISTER_PROC_FUNCTION
;     # define COS_REGISTER_PROC_FUNCTION
; #endif
; 
; /********************
; *    结构体宏定义   *
; ********************/
; 
; /********************
; *   函 数 声 明 区  *
; ********************/
; BOOL NULL_PROC(void);
; void CMOS_INIT(void);
; void Process_Task(void);
; 
; /********************
; *   全局变量声明区  *
; ********************/
; volatile PROCESS ProcPCB[COS_PROCESS_COUNT+1];
; uint8 g_cCOSPROCCounter = 0;
; uint8 g_cScheduleTest = 0;
; 
; /***********************************************************
; *   函数说明:空函数                                       *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; BOOL NULL_PROC(void)
; {
	.dbline 90
;     return FALSE;
	clr R16
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e CMOS_INIT _CMOS_INIT fV
;           Reg1 -> R10,R11
;             n1 -> R20
	.even
_CMOS_INIT::
	rcall push_xgset300C
	.dbline -1
	.dbline 111
; }
; 					  
; /***********************************************************
; *   函数说明:消息队列系统初始化函数                       *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:COS_REGISTER_PROC_FUNCTION                   *
; * -------------------------------------------------------- *
; *  [注意事项]                                              *
; *         1、ProcPCB[]是一个函数指针数组,里面登记着       *
; *            所有系统合法的消息处理函数的地址。            *
; *         2、ProcPCB[]下标中,0为系统保留,其余为用户      *
; *            自定义。                                      *
; *         3、用户需要自己通过编写函数并通过连接宏          *
; *            MSG_REGISTER_PROC_FUNCTION来注册合法消息处理  *
; *            函数。                                        *
; *         4、编程的时候,每增加一个静态的进程,就要增加一  *
; *            次进程计数器MSG_Proc_Counter。                *
; ***********************************************************/
; void CMOS_INIT(void)
; {
	.dbline 112
;     uint8 n = 0;
	.dbline 114
; 		
;     for (n = 0;n<COS_PROCESS_COUNT+1;n++)
	clr R20
	rjmp L6
L3:
	.dbline 115
;     {
	.dbline 119
;         #ifdef _USE_MESSAGE_PROC
;         ProcPCB[n].ProcIO = SYS_DEFAULT;
;         #endif
;         ProcPCB[n].Proc   = NULL_PROC;
	ldi R24,3
	mul R24,R20
	movw R10,R0
	ldi R24,<_ProcPCB
	ldi R25,>_ProcPCB
	movw R30,R10
	add R30,R24
	adc R31,R25
	ldi R24,<PL_NULL_PROC
	ldi R25,>PL_NULL_PROC
	std z+1,R25
	std z+0,R24
	.dbline 120
;         ProcPCB[n].IfProcAlive = FALSE;
	ldi R24,<_ProcPCB+2
	ldi R25,>_ProcPCB+2
	movw R30,R10
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 121
;     }
L4:
	.dbline 114
	inc R20
L6:
	.dbline 114
	cpi R20,4
	brlo L3
X0:
	.dbline 123
; 		
;     COS_REGISTER_PROC_FUNCTION
	rcall _PROC_Register
	.dbline -2
L2:
	.dbline 0 ; func end
	rjmp pop_xgset300C
	.dbsym r Reg1 10 S
	.dbsym r n1 20 c
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
L9:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
	.dbfunc e Process_Task _Process_Task fV
	.dbsym s n L9 c
	.even
_Process_Task::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 133
; }
; 
; /***********************************************************
; *   函数说明:任务处理函数                                 *
; *   输入:    无                                           *
; *   输出:    无                                           *
; *   调用函数:无                                           *
; ***********************************************************/
; void Process_Task(void)
; {
	.dbline 136
;     static uint8 n = 0;
;     
;     if (ProcPCB[n].IfProcAlive)                             //处理进程
	lds R2,L9
	ldi R24,3
	mul R24,R2
	movw R30,R0
	ldi R24,<_ProcPCB+2
	ldi R25,>_ProcPCB+2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	breq L10
X1:
	.dbline 137
;     {
	.dbline 138
;         ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
	lds R2,L9
	ldi R24,3
	mul R24,R2
	movw R2,R0
	ldi R24,<_ProcPCB
	ldi R25,>_ProcPCB
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	push R0
	push R1
	movw R30,R26
	rcall xicall
	pop R3
	pop R2
	ldi R24,<_ProcPCB+2
	ldi R25,>_ProcPCB+2
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 139
;     }        
L10:
	.dbline 141
;     
;     n ++;
	lds R24,L9
	subi R24,255    ; addi 1
	sts L9,R24
	.dbline 142
;     if (n >= g_cCOSPROCCounter)
	lds R2,_g_cCOSPROCCounter
	cp R24,R2
	brlo L14
X2:
	.dbline 143
;     {
	.dbline 144
;         n = 0;
	clr R2
	sts L9,R2
	.dbline 145
;         g_cScheduleTest = MIN(g_cScheduleTest + 1,254);
	lds R24,_g_cScheduleTest
	subi R24,255    ; addi 1
	cpi R24,254
	brsh L16
X3:
	lds R20,_g_cScheduleTest
	subi R20,255    ; addi 1
	rjmp L17
L16:
	ldi R20,254
L17:
	sts _g_cScheduleTest,R20
	.dbline 146
;     }
L14:
	.dbline -2
L8:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
_ProcPCB::
	.blkb 12
	.dbstruct 0 3 Process
	.dbfield 0 Proc pfc
	.dbfield 2 IfProcAlive c
	.dbend
	.dbsym e ProcPCB _ProcPCB A[12:4]S[Process]
; }
	.area  func_lit
PL_NULL_PROC:	.word `_NULL_PROC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -