📄 ucos51移植心得.htm
字号:
<BR> USING
0
<BR>
PUSHALL<BR>
CLR EA<BR>
LCALL _?serial
<BR> SETB
EA<BR>
POPALL
<BR>
RETI<BR>;-------------------------------------------------------------------------<BR>
END<BR>;-------------------------------------------------------------------------</P>
<P>文件名 : OS_CPU_C.C</P>
<P>void *OSTaskStkInit (void (*task)(void *pd), void *ppdata,
void *ptos, INT16U opt) reentrant<BR>{
<BR> OS_STK *stk;</P>
<P> ppdata = ppdata;<BR>
opt =
opt;
//opt没被用到,保留此语句防止告警产生 <BR>
stk = (OS_STK
*)ptos;
//用户堆栈最低有效地址<BR> *stk++ =
15;
//用户堆栈长度<BR> *stk++ = (INT16U)task &
0xFF;
//任务地址低8位<BR> *stk++ = (INT16U)task >>
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> return ((void *)ptos);<BR>}</P>
<P>#if OS_CPU_HOOKS_EN<BR>void OSTaskCreateHook (OS_TCB *ptcb)
reentrant<BR>{<BR> ptcb =
ptcb;
/* Prevent compiler
warning
*/<BR>}</P>
<P>void OSTaskDelHook (OS_TCB *ptcb)
reentrant<BR>{<BR> ptcb =
ptcb;
/* Prevent compiler
warning
*/<BR>}</P>
<P>void OSTimeTickHook (void)
reentrant<BR>{<BR>}<BR>#endif</P>
<P>//初始化定时器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>}</P>
<P>文件名 : YY.C</P>
<P>#include <includes.h></P>
<P>#define MAX_STK_SIZE 64</P>
<P>void TaskStartyya(void *yydata) reentrant;<BR>void
TaskStartyyb(void *yydata) reentrant;<BR>void
TaskStartyyc(void *yydata) reentrant;</P>
<P>OS_STK
TaskStartStkyya[MAX_STK_SIZE+1];//注意:我在ASM文件中设置?STACK空间为40H即64,不要超出范围。<BR>OS_STK
TaskStartStkyyb[MAX_STK_SIZE+1];//用户栈多一个字节存长度<BR>OS_STK
TaskStartStkyyc[MAX_STK_SIZE+1];</P>
<P>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>}</P>
<P><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>}</P>
<P>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>}</P>
<P>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>} </P><SPAN
class=style1>(<A class=link3 href="http://www.avrw.com/"
target=_parent>综合电子论坛</A>)</SPAN></TD></TR></TBODY></TABLE>
<P
align=center> *注:部份文章为网上收录供大家共同学习参考之用,并不代表本站意见。如存在版权问题请马上通知我们,我们将马上删除。</P></TD></TR></TBODY></TABLE></P></TD></TR></TBODY></TABLE>
<SCRIPT src="uCOS51移植心得.files/floor.htm"></SCRIPT>
<SCRIPT src="uCOS51移植心得.files/homeright.js"></SCRIPT>
<SCRIPT language=javascript src="uCOS51移植心得.files/339405.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><A href="http://www.51.la/?339405" target=_blank><IMG
style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"
alt=我要啦免费统计 src="uCOS51移植心得.files/go.htm"></A></NOSCRIPT>
<SCRIPT language=JavaScript src="uCOS51移植心得.files/stat.htm"
charset=gb2312></SCRIPT>
<SCRIPT src="uCOS51移植心得.files/shownum.htm"></SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -