?? rd_usecooperatingminios.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 + -