sayato 2017-01-11 13:28 采纳率: 0%
浏览 1392

UCOSII中任务堆栈如何具体的实现保存CPU寄存器的值?

小弟刚刚学习UCOS-II,问题可能比较low,请各位大神不吝赐教,感激不尽。

如题所说,UCOS中穿件任务时都会调用到一个函数OSTaskStkInit(),该函数位于os_cpu_c.c
该函数将任务创建时 开辟的任务堆栈的栈顶指针传递进来,以后任务堆栈就会保存在这块内存对吧,
问1,我想,说的是任务切换时 都是使用一个“陷阱“或者软件中断触发的,这样CPU就会进行一次入栈,保存当前任务堆栈,然后将上次被中断的任务堆栈拷贝到CPU寄存器,然后执行上次被中断的任务,这个理解对吗?
问2,每次产生软件中断或者陷阱的时候,CPU执行入栈操作,保存当前寄存器的状态,它是如何将这些值保存到任务堆栈中的?当cpu切换任务时是怎么将任务堆栈保存的寄存器值拷贝到cpu寄存器中的?总之,就是任务堆栈是怎么和CPU寄存器之间建立数据交互的,麻烦详细一点。
问3,
#define CPU_CRITICAL_ENTER() do { CPU_INT_DIS(); } while (0)

#define CPU_CRITICAL_EXIT() do { CPU_INT_EN(); } while (0)

#define CPU_INT_DIS() do { cpu_sr = CPU_SR_Save(); } while (0)
#define CPU_INT_EN() do { CPU_SR_Restore(cpu_sr); } while (0)
//以下内容来源ucosII-F28335的OS_CPU_A.ASM
.asmfunc
_OS_CPU_SR_Save:
PUSH ST1 //什么意思?
DINT //关中断?
POP @AL//什么意思?
AND AL, #1//什么意思?
LRETR //什么意思?
.endasmfunc

.asmfunc

_OS_CPU_SR_Restore:
PUSH ST1 //什么意思?
POP AR0 //什么意思?
AND AR0, #0xFFFE //什么意思?
OR AL, AR0 //什么意思?
PUSH AL //什么意思?
POP ST1 //什么意思?
LRETR //什么意思?
.endasmfunc

    能否帮忙纤细解释一下上述汇编语言,最好结合上面问题1,2回答。

    小弟对于上述问题非常的不解,希望得到各位大神的指点感激不尽。
  • 写回答

1条回答

  • dabocaiqq 2017-01-14 14:47
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包