完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟刚刚学习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回答。 小弟对于上述问题非常的不解,希望得到各位大神的指点感激不尽。 |
|
相关推荐
2个回答
|
|
这么好的东西怎么能不顶呢
|
|
|
|
这么好的东西怎么能不顶呢
|
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
4979 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3193 浏览 1 评论
560浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:02 , Processed in 0.707216 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号