sayato 2017-01-16 14:35 采纳率: 0%
浏览 2026

ucos系统堆栈与任务堆栈是怎么建立联系的

我的Q405234961
关于UCOS中cpu当前运行的各寄存器R0....的值,在切换任务或者中断的时候,是如何被保存到对应的任务堆栈中的,又是如何将 即将运行的任务堆栈的内容拷贝到CPU运行的寄存器中?
我看了ucos上相关的两段汇编,完全看不懂,不知道前辈能否指教一下,不胜感激。
; OS_CTX_SAVE
;
; Description : This MACRO saves the CPU registers (i.e. CPU context) onto the current task's stack using
; the same order as they were saved in OSTaskStkInit().
;********************************************************************************************************

OS_CTX_SAVE .macro
; Save remaining registers.
PUSH AR1H:AR0H ; AR1H:AR0H
PUSH XAR2 ; XAR2
PUSH XAR3 ; XAR3
PUSH XAR4 ; XAR4
PUSH XAR5 ; XAR5
PUSH XAR6 ; XAR6
PUSH XAR7 ; XAR7
PUSH XT ; XT
PUSH RPC ; RPC

.endm

OS_STK *OSTaskStkInit (void (*task)(void *p_arg),
void *p_arg,
OS_STK *ptos,
INT16U opt)

假设:有任务A,B,对应的任务堆栈是A_Stack[512],B_Stack[512],
当前运行任务A,如果此时发生任务切换(切换到B),cpu是如何保存当前各寄存器的值到A的任务堆栈中的,
当保存好A的任务堆栈后,又是如何将B的任务堆栈推向CPU各寄存器中运行的

  • 写回答

1条回答

  • threenewbee 2017-01-16 15:37
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题