单片机系统中的多任务多线程机制的实现

[09-12 17:11:52]   来源:http://www.88dzw.com  单片机学习   阅读:8216

文章摘要:图5为后台流程。后台程序依靠通道按键启动一个测试任务,然后进行该任务预处理,类似初始化的一些功能。如果这期间又启动别的任务,则未初始化完的先前任务中止。图4 前台控制流程2void time0() interrupt 1 初始化完成后进入多任务所属线程的循环处理阶段,其间可以随时由通道按键引起的中断来加入新的任务,每个线程的调度标识可以由相关的前台线程给出,也可来自相关的后台线程。配合Getadd()和Putadd()从中断强制返回某地此后,使用跳转语句到真正的目标地址。最后给出强制返回程序代码(供参考):/*保存当前地址信息到环境变量JMPEnv[env1][]中,每个变量由三项组成,

单片机系统中的多任务多线程机制的实现,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
图5为后台流程。后台程序依靠通道按键启动一个测试任务,然后进行该任务预处理,类似初始化的一些功能。如果这期间又启动别的任务,则未初始化完的先前任务中止。

图4 前台控制流程2----void time0() interrupt 1

    初始化完成后进入多任务所属线程的循环处理阶段,其间可以随时由通道按键引起的中断来加入新的任务,每个线程的调度标识可以由相关的前台线程给出,也可来自相关的后台线程。配合Getadd()和Putadd()从中断强制返回某地此后,使用跳转语句到真正的目标地址。

最后给出强制返回程序代码(供参考):

/*保存当前地址信息到环境变量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[i]=(*((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[i];

}

}

结语

限于篇幅,不可能详述任务、线程和标识的细节,仅提出一种单片机等嵌入式控制系统对多任务进行实时处理的一种思想;借鉴于主流操作系统中的多任务和多线程机制。实践证明,这种想法是行之有效的,并且取得了很好的效果。

虽然我们研制的系统是对多个相同的任务进行并行处理,但该种设计方法应该可以推广到多种不同性质的实时任务的并行处理当中去。


上一页  [1] [2] [3] 


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行