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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大