📄 ucos51移植心得zt续1(铁匠).htm
字号:
8; //任务地址高8位 <BR> *stk++
=
0x00; //PSW<BR> *stk++
=
0x0A; //ACC<BR> *stk++
=
0x0B; //B<BR> *stk++
=
0x00; //DPL<BR> *stk++
=
0x00; //DPH<BR> *stk++
=
0x00; //R0<BR> *stk++
=
0x01; //R1<BR> *stk++
=
0x02; //R2<BR> *stk++
=
0x03; //R3<BR> *stk++
=
0x04; //R4<BR> *stk++
=
0x05; //R5<BR> *stk++
=
0x06; //R6<BR> *stk++
=
0x07; //R7<BR> //不用保存SP,任务切换时根据用户堆<BR>栈长度计算得出。 <BR> return
((void *)ptos);<BR>}<BR><BR>#if OS_CPU_HOOKS_EN<BR>void OSTaskCreateHook
(OS_TCB *ptcb) reentrant<BR>{<BR> ptcb =
ptcb; /*
Prevent compiler
<BR>warning */<BR>}<BR><BR>void
OSTaskDelHook (OS_TCB *ptcb)
reentrant<BR>{<BR> ptcb =
ptcb; /*
Prevent compiler
<BR>warning */<BR>}<BR><BR>void
OSTimeTickHook (void)
reentrant<BR>{<BR>}<BR>#endif<BR><BR>//初始化定时器0<BR>void InitTimer0(void)
reentrant<BR>{<BR> TMOD=TMOD&0xF0;<BR> TMOD=TMOD|0x01; //模式1(16位定时器),仅受TR0控制<BR> TH0=0x70; //定义Tick=50次/秒(即0.02秒/次)<BR> TL0=0x00; //OS_CPU_A.ASM 和 OS_TICKS_PER_SEC<BR> ET0=1; //允许T0中断<BR> TR0=1; <BR>}<BR><BR>文件名
: YY.C<BR><BR>#include <INCLUDES.H><BR><BR>#define MAX_STK_SIZE
64<BR><BR>void TaskStartyya(void *yydata) reentrant;<BR>void
TaskStartyyb(void *yydata) reentrant;<BR>void TaskStartyyc(void *yydata)
reentrant;<BR><BR>OS_STK
TaskStartStkyya[MAX_STK_SIZE+1];//注意:我在ASM文件中设置?STACK空间为40H<BR>即64,不要超出范围。<BR>OS_STK
TaskStartStkyyb[MAX_STK_SIZE+1];//用户栈多一个字节存长度<BR>OS_STK
TaskStartStkyyc[MAX_STK_SIZE+1];<BR><BR>void
main(void)<BR>{<BR> OSInit();<BR> <BR> InitTimer0();<BR> InitSerial();<BR> InitSerialBuffer();<BR> <BR> OSTaskCreate(TaskStartyya,
(void *)0,
&TaskStartStkyya[0],2);<BR> OSTaskCreate(TaskStartyyb,
(void *)0,
&TaskStartStkyyb[0],3);<BR> OSTaskCreate(TaskStartyyc,
(void *)0,
&TaskStartStkyyc[0],4);<BR> <BR> OSStart();<BR>}<BR><BR><BR>void
TaskStartyya(void *yydata)
reentrant<BR>{<BR> yydata=yydata;<BR> clrscr();<BR> PrintStr('\n\t\t*******************************\n');<BR> PrintStr('\t\t* Hello!
The
world. *\n');<BR> PrintStr('\t\t*******************************\n\n\n');<BR> <BR> for(;;){<BR> PrintStr('\tAAAAAA111111
is
active.\n');<BR> OSTimeDly(OS_TICKS_PER_SEC); <BR> } <BR>}<BR><BR>void
TaskStartyyb(void *yydata)
reentrant<BR>{<BR> yydata=yydata;
<BR> <BR> for(;;){<BR> PrintStr('\tBBBBBB333333
is
active.\n');<BR> OSTimeDly(3*OS_TICKS_PER_SEC); <BR> } <BR>}<BR><BR>void
TaskStartyyc(void *yydata)
reentrant<BR>{<BR> yydata=yydata;
<BR> <BR> for(;;){<BR> PrintStr('\tCCCCCC666666
is
active.\n');<BR> OSTimeDly(6*OS_TICKS_PER_SEC); <BR> } <BR>}<BR><BR><BR><BR><BR>(文章推荐人:丁丁)
<BR><BR></BLOCKQUOTE></TD></TR>
<TR>
<TD width="100%">
<P align=center> </P></TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -