uCOS-II移植到51单片机任务切换压栈和出栈的操作


UCOS-II嵌入式实时操作系统 在任务切换时,单片机压入堆栈和出栈结构图

       由于51系列单片机要求堆栈必须设置在片内RAM(IDATA)中,而这种处理器的片内RAM非常有限,不可能把应用程序中的所有任务的任务堆栈都设置在片内RAM中,所以就只能把应用程序中各个任务堆栈的内容存放在片外RAM,只在片内RAM中设置一个公用的堆栈(即片内RAM只存放将要执行的任务堆栈)。在任务切换时,CPU先把当前的任务压入系统堆栈,再把系统堆栈的任务复制到片外堆栈中保存起来,最后再从片外堆栈把将要运行的任务堆栈映像复制到系统堆栈中。


     51单片机的外部RAM中设置任务堆栈映像,其最低地址空间用来存放用户堆栈的长度,并使该任务的TCB中的OSTCBStkPtr指针变量指向该地址。

     51单片机的堆栈指针SP总是先加1再存数据,因此,SP初始时指向系统堆栈起始地址(OSStack)减1处(OSStkStart)。所以系统堆栈的长度为SP~OSStkStart。

     在任务切换时,应先把当前任务在系统堆栈的内容复制保存到该任务堆栈映像中。也就是计算SP~OSStkStart得出堆栈的长度,并将其写入任务堆栈映像最低地址空间中;然后以其为长度,以任务堆栈映像最低地址为目标起始地址,以OSStkStart为源起始地址,由系统堆栈向任务堆栈映像复制数据。反之,由任务堆栈映像向系统堆栈复制数据,则相反便是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值