r8c2l 看不懂的程序,求高手解答一二
程序如下;#define __STACKSIZE__ 0x80 // user stack
#define __ISTACKSIZE__ 0x80 // interrupt stack
#define __HEAPSIZE__ 0x0 // heap size
#define __STANDARD_IO__0 // use standard I/O (ex printf)
#define __WATCH_DOG__ 0 // When watchdog is made effective after reset, here is set to 1.
#pragma section program interrupt
#if __WATCH_DOG__ != 1
#define scopy(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" .initsct "X"I,rom"Y",noalign\n"\
" mov.w #(topof "X"I)&0ffffH,A0\n"\
" mov.b #(topof "X"I)>>16,R1H\n"\
" mov.w #(topof "X")&0ffffH,A1\n"\
" mov.w #sizeof "X",R3\n"\
" smovf.b")
#define sclear(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" mov.b #00H,R0L\n"\
" mov.w #(topof "X") ,A1\n"\
" mov.w #sizeof "X",R3\n"\
" sstr.b")
#else
#define scopy(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" .initsct "X"I,rom"Y",noalign\n"\
" scopy "X"I,"X"")
#define sclear(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" N_BZERO "X"")
#endif
#define scopy_f(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" .initsct "X"I,rom"Y",noalign\n"\
" push.w #(sizeof "X") >> 16\n"\
" push.w #(sizeof "X") & 0ffffH\n"\
" push.w #(topof "X") >> 16\n"\
" push.w #(topof "X") & 0ffffH\n"\
" push.w #(topof "X"I) >> 16\n"\
" push.w #(topof "X"I) & 0ffffH\n"\
" .stk 12\n"\
" .glb _bcopy\n"\
" .call _bcopy,G\n"\
" jsr.a _bcopy\n"\
" add.b #12,sp\n"\
" .stk -12")
#define sclear_f(X,Y,Z) _asm(" .initsct "X","Y","Z"\n"\
" push.w #(sizeof "X")>>16\n"\
" push.w #(sizeof "X")&0ffffH\n"\
" push.w #(topof "X")>>16\n"\
" push.w #(topof "X")&0ffffH\n"\
" .stk 8\n"\
" .glb _bzero\n"\
" .call _bzero,G\n"\
" jsr.a _bzero\n"\
" add.b #8H,sp\n"\
" .stk -8")
#if __WATCH_DOG__ == 1
#pragma ASM
scopy .macro FROM_,TO_
mov.b #00,0DH
mov.b #0ffH,0DH
mov.w #0000H,R0
.local M1
M1:
cmp.w #sizeof TO_,R0
.local M2
jeq M2
mov.b #00,0DH
mov.b #0ffH,0DH
mov.w #(topof FROM_)&0ffffH,A0
mov.w #(topof TO_)&0ffffH,A1
add.w R0,A0
add.w R0,A1
mov.b ,
add.w #1,R0
jmp M1
M2:
.endm
N_BZERO .macro SECT_
mov.b #00,0DH
mov.b #0ffH,0DH
mov.w #0000H,R0
.local M1
M1:
cmp.w #sizeof SECT_,R0
.local M2
jeq M2
mov.b #00,0DH
mov.b #0ffH,0DH
mov.w #(topof SECT_)&0ffffH,A0
add.w R0,A0
mov.b #00H,
add.w #1H,R0
jmp M1
M2:
.endm
#pragma ENDASM
#endif
这段程序到底是什么意思,scopy和sclear有什么功能?
页:
[1]