nu-lb-nuc140 RTX 流程 分析(五)

nu-lb-nuc140 RTX 流程 分析(五)
在这里插入图片描述

t_phaseA = os_tsk_create (phaseA, 1); /* start task phaseA */
在这里插入图片描述
在这里插入图片描述
#define os_tsk_create(tsk,prio) _os_tsk_create((U32)rt_tsk_create,tsk,prio,NULL,NULL)

extern OS_TID _os_tsk_create (U32 p, void (*task)(void), U32 prio_stksz,
void *stk, void *argv) __SVC_0;

r12 中保存的是p 函数的地址 ----- rt_tsk_create
r0 中保存的是task 函数的地址 ----- phaseA
r1 中保存的是 prio_stksz的值 ----- 1
r2 中保存的是stk
r3中保存的是argv

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
R0是作为函数的返回值,写到PSP栈中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
PSP 的内容只是 修改了 R0的值,其他的没有修改。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SVC 0 之后 ,会把r0 ,r1,r2,r3,r12,返回地址依次存入PSP堆栈中
SVC 0 返回的时候,

在这里插入图片描述
在这里插入图片描述

运行完毕之后,
t_phaseA = 0x00000002
在这里插入图片描述

dispatch 调度;

p_BM->free = 0x2000 0210
p_BM->end = 0x2000 0A10
p_BM->blk_size = 0x0000 0100

next_block = 0x2000 0210 – task1 — idle
next_block = 0x2000 0310 – task2 — init
next_block = 0x2000 0410 – task3 — phaseA
next_block = 0x2000 0510 – task4
next_block = 0x2000 0610 – task5
next_block = 0x2000 0710 – task6
next_block = 0x2000 0810 – task7
next_block = 0x2000 0910
next_block = 0x2000 0A10

123

end = 0x2000 01C8

blk_size = 0x38 = 56

box_size = 404 = 0x194

P_BM->free = 0x2000 0078
P_BM->end = 0x2000 0200
P_BM->blk_size = 0x0000 0038

block1 = 0x2000 0078
block2 = 0x2000 00B0
block3 = 0x2000 00E8
block4 = 0x2000 0120
block5 = 0x2000 0158
block6 = 0x2000 0190
block7 =0x2000 01C8

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

t_phaseA = 0x00000002
在这里插入图片描述

#define os_evt_set(evt_flags,task_id) _os_evt_set((U32)rt_evt_set,evt_flags,task_id)

extern void _os_evt_set (U32 p, U16 event_flags, OS_TID task_id) __SVC_0;
p = rt_evt_set

event_flags = 0x0001
task_id = t_phaseA

_os_evt_set(rt_evt_set,0x0001,t_phaseA)

r0 = evt_flags
r1 = t_phaseA

r12 = rt_evt_set 的地址

在这里插入图片描述
在这里插入图片描述

BLX 解析

入栈 和出栈 ,以及R0 和R1 作为参数
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

os_tsk_delete_self

#define os_tsk_delete_self() { _os_tsk_delete((U32)rt_tsk_delete, 0); for(;?; }

extern OS_RESULT _os_tsk_delete (U32 p, OS_TID task_id) __SVC_0;

r0 = 0
r12 = rt_tsk_delete

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值