单片机系统中的多任务多线程机制的实现
最后给出强制返回程序代码(供参考):
/*保存当前地址信息到环境变量JMPEnv[env1][]中,每个变量由三项组成,env1是二维下标参数*/
void getadd(unsigned char env1)
{unsigned char temp;
temp=SP;
JMPEnv[env1][0]=(*((unsigned char idata*)SP));
temp--;
JMPEnv[env1][1]=(*((unsigned char idata*)temp));
JMPEnv[env1][2]=SP-2;
}
/*置中断返回的任意跳转地址*/
void putadd(unsigned char env1)reentrant
{ unsigned char temp[15];char i;
/*下面保存进入中断程序时的压栈值*/
for(i=0,i<15;i++)
{temp=(*((unsigned char idata*)SP));
SP--;
}
/*放置新地址*/
SP=JMPEnv[env1][2];SP++;
(*((unsigned char idata*)SP)=JMPEnv[env1][1];SP++;
(*((unsigned char idata*)SP))=JMPEnv[env1][0];
/*恢复中断开始时的那些压栈值*/
for(i=14;i>=0;i--)
{SP++;
(*((unsigned char idata*)SP))=temp;
}
}
javascript:window.open(this.src);" style="cursor:pointer;"/>
结语
限于篇幅,不可能详述任务、线程和标识的细节,仅提出一种单片机等嵌入式控制系统对多任务进行实时处理的一种思想;借鉴于主流操作系统中的多任务和多线程机制。实践证明,这种想法是行之有效的,并且取得了很好的效果。
虽然我们研制的系统是对多个相同的任务进行并行处理,但该种设计方法应该可以推广到多种不同性质的实时任务的并行处理当中去。