📄 model.lst
字号:
(0326) uint8 n = 0;
(0327) uint8 cXORCheck = 0;
2FB 24AA CLR R10
(0328)
(0329) (*(pSFP->OutputDataFunc))(pSFP->cHeadByte); //发送消息头部
2FC 85EA LDD R30,Y+10
2FD 85FB LDD R31,Y+11
2FE 8D00 LDD R16,Z+24
2FF 01AF MOVW R20,R30
300 5E42 SUBI R20,0xE2
301 4F5F SBCI R21,0xFF
302 01FA MOVW R30,R20
303 81A0 LDD R26,Z+0
304 81B1 LDD R27,Z+1
305 01FD MOVW R30,R26
306 D791 RCALL xicall
(0330)
(0331) if (!(pSFP->cFixLength))
307 85EA LDD R30,Y+10
308 85FB LDD R31,Y+11
309 8C22 LDD R2,Z+26
30A 2022 TST R2
30B F451 BNE 0x0316
(0332) {
(0333) (*(pSFP->OutputDataFunc))((Length+5)); //发送消息长度
30C 2D0E MOV R16,R14
30D 5F0B SUBI R16,0xFB
30E 01FA MOVW R30,R20
30F 81A0 LDD R26,Z+0
310 81B1 LDD R27,Z+1
311 01FD MOVW R30,R26
312 D785 RCALL xicall
(0334) cXORCheck ^= (Length + 5);
313 2D8E MOV R24,R14
314 5F8B SUBI R24,0xFB
315 26A8 EOR R10,R24
(0335) }
(0336)
(0337) (*(pSFP->OutputDataFunc))(cCMD); //发送指令字节
316 2D0C MOV R16,R12
317 01FA MOVW R30,R20
318 81A0 LDD R26,Z+0
319 81B1 LDD R27,Z+1
31A 01FD MOVW R30,R26
31B D77C RCALL xicall
(0338) cXORCheck ^= cCMD;
31C 24AC EOR R10,R12
(0339)
(0340) for (n = 0;n < Length;n++)
31D 24CC CLR R12
31E C011 RJMP 0x0330
(0341) {
(0342) (*(pSFP->OutputDataFunc))(pMSG[n]); //发送消息本体
31F 2D6C MOV R22,R12
320 2777 CLR R23
321 840E LDD R0,Y+14
322 841F LDD R1,Y+15
323 0D60 ADD R22,R0
324 1D71 ADC R23,R1
325 01FB MOVW R30,R22
326 8100 LDD R16,Z+0
327 01FA MOVW R30,R20
328 81A0 LDD R26,Z+0
329 81B1 LDD R27,Z+1
32A 01FD MOVW R30,R26
32B D76C RCALL xicall
(0343) cXORCheck ^= pMSG[n];
32C 01FB MOVW R30,R22
32D 8020 LDD R2,Z+0
32E 24A2 EOR R10,R2
32F 94C3 INC R12
330 14CE CP R12,R14
331 F368 BCS 0x031F
(0344) }
(0345)
(0346) (*(pSFP->OutputDataFunc))(cXORCheck); //发送校验字节
332 2D0A MOV R16,R10
333 01FA MOVW R30,R20
334 81A0 LDD R26,Z+0
335 81B1 LDD R27,Z+1
336 01FD MOVW R30,R26
337 D760 RCALL xicall
(0347) (*(pSFP->OutputDataFunc))(pSFP->cEndByte); //发送消息头部
338 85EA LDD R30,Y+10
339 85FB LDD R31,Y+11
33A 8D01 LDD R16,Z+25
33B 01FA MOVW R30,R20
33C 81A0 LDD R26,Z+0
33D 81B1 LDD R27,Z+1
33E 01FD MOVW R30,R26
33F D758 RCALL xicall
(0348)
(0349) return TRUE;
340 E001 LDI R16,1
341 D716 RCALL pop_xgsetF0FC
342 9624 ADIW R28,4
343 9508 RET
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:
344 2700 CLR R16
345 9508 RET
_CMOS_INIT:
Reg1 --> R10
n1 --> R20
346 D727 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++)
347 2744 CLR R20
348 C014 RJMP 0x035D
(0115) {
(0116) #ifdef _USE_MESSAGE_PROC
(0117) ProcPCB[n].ProcIO = SYS_DEFAULT;
(0118) #endif
(0119) ProcPCB[n].Proc = NULL_PROC;
349 E083 LDI R24,3
34A 9F84 MUL R24,R20
34B 0150 MOVW R10,R0
34C E586 LDI R24,0x56
34D E091 LDI R25,1
34E 01F5 MOVW R30,R10
34F 0FE8 ADD R30,R24
350 1FF9 ADC R31,R25
351 E384 LDI R24,0x34
352 E090 LDI R25,0
353 8391 STD Z+1,R25
354 8380 STD Z+0,R24
(0120) ProcPCB[n].IfProcAlive = FALSE;
355 E588 LDI R24,0x58
356 E091 LDI R25,1
357 01F5 MOVW R30,R10
358 0FE8 ADD R30,R24
359 1FF9 ADC R31,R25
35A 2422 CLR R2
35B 8220 STD Z+0,R2
35C 9543 INC R20
35D 3044 CPI R20,4
35E F350 BCS 0x0349
(0121) }
(0122)
(0123) COS_REGISTER_PROC_FUNCTION
35F D655 RCALL _PROC_Register
360 C712 RJMP pop_xgset300C
_Process_Task:
361 934A ST R20,-Y
362 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) //处理进程
363 9020 0102 LDS R2,RD_UseCooperatingMiniOs.c:n
365 E083 LDI R24,3
366 9D82 MUL R24,R2
367 01F0 MOVW R30,R0
368 E588 LDI R24,0x58
369 E091 LDI R25,1
36A 0FE8 ADD R30,R24
36B 1FF9 ADC R31,R25
36C 8020 LDD R2,Z+0
36D 2022 TST R2
36E F0C1 BEQ 0x0387
(0137) {
(0138) ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
36F 9020 0102 LDS R2,RD_UseCooperatingMiniOs.c:n
371 E083 LDI R24,3
372 9D82 MUL R24,R2
373 0110 MOVW R2,R0
374 E586 LDI R24,0x56
375 E091 LDI R25,1
376 01F1 MOVW R30,R2
377 0FE8 ADD R30,R24
378 1FF9 ADC R31,R25
379 81A0 LDD R26,Z+0
37A 81B1 LDD R27,Z+1
37B 920F PUSH R0
37C 921F PUSH R1
37D 01FD MOVW R30,R26
37E D719 RCALL xicall
37F 903F POP R3
380 902F POP R2
381 E588 LDI R24,0x58
382 E091 LDI R25,1
383 01F1 MOVW R30,R2
384 0FE8 ADD R30,R24
385 1FF9 ADC R31,R25
386 8300 STD Z+0,R16
(0139) }
(0140)
(0141) n ++;
387 9180 0102 LDS R24,RD_UseCooperatingMiniOs.c:n
389 5F8F SUBI R24,0xFF
38A 9380 0102 STS RD_UseCooperatingMiniOs.c:n,R24
(0142) if (n >= g_cCOSPROCCounter)
38C 9020 0100 LDS R2,g_cCOSPROCCounter
38E 1582 CP R24,R2
38F F078 BCS 0x039F
(0143) {
(0144) n = 0;
390 2422 CLR R2
391 9220 0102 STS RD_UseCooperatingMiniOs.c:n,R2
(0145) g_cScheduleTest = MIN(g_cScheduleTest + 1,254);
393 9180 0101 LDS R24,g_cScheduleTest
395 5F8F SUBI R24,0xFF
396 3F8E CPI R24,0xFE
397 F420 BCC 0x039C
398 9140 0101 LDS R20,g_cScheduleTest
39A 5F4F SUBI R20,0xFF
39B C001 RJMP 0x039D
39C EF4E LDI R20,0xFE
39D 9340 0101 STS g_cScheduleTest,R20
(0146) }
39F 9159 LD R21,Y+
3A0 9149 LD R20,Y+
3A1 9508 RET
_UARTgetDataFromRxBuff:
cflags0 --> R10
Data --> R16
3A2 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) * 函
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -