qq1646544 发表于 2023-10-31 14:34:41

RTX5任务切换原理是什么???

RT,好像没找到相关资料,有没有老大知道的科普一下,看源码太慢了

eric2013 发表于 2023-10-31 15:04:04

RTX5有个关键的设计是所有API都是在SVC软中断里面调用的,其它的就好理解了,也是PendSV做任务切换。

qq1646544 发表于 2023-10-31 15:10:16

eric2013 发表于 2023-10-31 15:04
RTX5有个关键的设计是所有API都是在SVC软中断里面调用的,其它的就好理解了,也是PendSV做任务切换。

:lol看来学完一个rtos再学另外的感觉都是大同小异,把不同点记一下基本就轻车熟路了

eric2013 发表于 2023-10-31 15:21:49

qq1646544 发表于 2023-10-31 15:10
看来学完一个rtos再学另外的感觉都是大同小异,把不同点记一下基本就轻车熟路了
就是深入理解比较花时间,RTX5的代码略晦涩

#define SVC0_0N(f,t)                                                         \
SVC_INDIRECT(0) t    svc##f ();                                                \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (void) {                                           \
SVC_ArgF(svcRtx##f);                                                         \
svc##f();                                                                  \
}

#define SVC0_0(f,t)                                                            \
SVC_INDIRECT(0) t    svc##f ();                                                \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (void) {                                           \
SVC_ArgF(svcRtx##f);                                                         \
return svc##f();                                                             \
}

#define SVC0_1N(f,t,t1)                                                      \
SVC_INDIRECT(0) t    svc##f (t1 a1);                                           \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (t1 a1) {                                          \
SVC_ArgF(svcRtx##f);                                                         \
svc##f(a1);                                                                  \
}

#define SVC0_1(f,t,t1)                                                         \
SVC_INDIRECT(0) t    svc##f (t1 a1);                                           \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (t1 a1) {                                          \
SVC_ArgF(svcRtx##f);                                                         \
return svc##f(a1);                                                         \
}

#define SVC0_2(f,t,t1,t2)                                                      \
SVC_INDIRECT(0) t    svc##f (t1 a1, t2 a2);                                    \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (t1 a1, t2 a2) {                                 \
SVC_ArgF(svcRtx##f);                                                         \
return svc##f(a1,a2);                                                      \
}

#define SVC0_3(f,t,t1,t2,t3)                                                   \
SVC_INDIRECT(0) t    svc##f (t1 a1, t2 a2, t3 a3);                           \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (t1 a1, t2 a2, t3 a3) {                            \
SVC_ArgF(svcRtx##f);                                                         \
return svc##f(a1,a2,a3);                                                   \
}

#define SVC0_4(f,t,t1,t2,t3,t4)                                                \
SVC_INDIRECT(0) t    svc##f (t1 a1, t2 a2, t3 a3, t4 a4);                      \
__attribute__((always_inline))                                                 \
__STATIC_INLINE t__svc##f (t1 a1, t2 a2, t3 a3, t4 a4) {                     \
SVC_ArgF(svcRtx##f);                                                         \
return svc##f(a1,a2,a3,a4);                                                \
}


LeslieChia 发表于 2023-12-7 10:27:17

eric2013 发表于 2023-10-31 15:21
就是深入理解比较花时间,RTX5的代码略晦涩

#define SVC0_0N(f,t)               ...

硬汉哥,能稍微指点下原理吗?例如osThreadNew,跳转看到调用的是__svcThreadNew,再跳转就是SVC0_3 (ThreadNew,         osThreadId_t,    osThreadFunc_t, void *, const osThreadAttr_t *),到这就看不懂了,不像其他os那么直接

skyshine 发表于 2023-12-7 13:37:36

LeslieChia 发表于 2023-12-7 10:27
硬汉哥,能稍微指点下原理吗?例如osThreadNew,跳转看到调用的是__svcThreadNew,再跳转就是SVC0_3 (Thr ...

硬汉哥的RTX教程里有
https://www.armbbs.cn/forum.php?mod=viewthread&tid=93396
页: [1]
查看完整版本: RTX5任务切换原理是什么???