打印
[uCOS/RTOS]

有没有研究KEIL RTX-ARM实时内核的。最近正研究源码。

[复制链接]
2489|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
he19880406|  楼主 | 2014-4-19 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于OS_MCB、OS_MUCB、OS_SCB中都有类似p_TCB = rt_get_first ((P_XCB)p_MCB);;的语句。相当不明白。
像信号量的发送函数:
OS_RESULT rt_sem_send (OS_ID semaphore) {
  /* Return a token to semaphore */
  P_SCB p_SCB = semaphore;
  P_TCB p_TCB;

  if (p_SCB->p_lnk != NULL) {
    /* A task is waiting for token */
    p_TCB = rt_get_first ((P_XCB)p_SCB);
    p_TCB->ret_val = OS_R_SEM;
    rt_rmv_dly (p_TCB);
    rt_dispatch (p_TCB);
    os_tsk.run->ret_val = OS_R_OK;
  }
  else {
    /* Store token. */
    p_SCB->tokens++;
  }
  return (OS_R_OK);
}
怎么会把SCB指针转换为XCB。XCB转换为TCB是因为OS_TCB包含OS_XCB。
这关系到信号量、互斥锁、邮箱的链表p_lnk是怎么实现的。

相关帖子

沙发
he19880406|  楼主 | 2014-4-19 20:52 | 只看该作者
有在研究Keil实时内核的可以交流一下。

使用特权

评论回复
板凳
yinsheng1990| | 2014-4-24 22:54 | 只看该作者
同关注

使用特权

评论回复
地板
myxiaonia| | 2015-3-12 14:48 | 只看该作者
为什么可以这么做的原因是,rtx将这些结构设计的刚好有这些共同特征,所以可以这么使用
你去看看这些结构体头部,基本完全类似

这些都是双向链表,可以抽象出相同的操作集

使用特权

评论回复
5
hnkf118| | 2015-3-12 23:44 | 只看该作者
同意楼上意见。

使用特权

评论回复
6
jinqiankun| | 2015-7-3 10:56 | 只看该作者
本帖最后由 jinqiankun 于 2015-7-3 11:00 编辑
myxiaonia 发表于 2015-3-12 14:48
为什么可以这么做的原因是,rtx将这些结构设计的刚好有这些共同特征,所以可以这么使用
你去看看这些结构体 ...


能不能把你在啊莫的帖子也在这里开一下。
我用了5年的啊莫账号不知道咋回事登陆不了了。
ps一个问题不明白:
typedef  U32  OS_SEM

typedef struct
{
   U8
   U16
  struct *
}  *P_SCB 这个要8字节>Sizeof(OS_SEM)
os_init_sem(OS_ID sem)
{
这里面直接把OS_SEM当作P_SCB来赋值??
}

使用特权

评论回复
7
myxiaonia| | 2015-7-3 13:11 | 只看该作者
jinqiankun 发表于 2015-7-3 10:56
能不能把你在啊莫的帖子也在这里开一下。
我用了5年的啊莫账号不知道咋回事登陆不了了。
ps一个问题不明 ...

帖子东西也比较多  不过你可以直接去那里看啊 我把帖子链接挂上RTX学习笔记


还有 你这个问题请写详细些   省略的东西太多可能理解有偏差

使用特权

评论回复
8
jinqiankun| | 2015-7-3 14:48 | 只看该作者
myxiaonia 发表于 2015-7-3 13:11
帖子东西也比较多  不过你可以直接去那里看啊 我把帖子链接挂上RTX学习笔记

啊莫现在不登陆,附件不能下载。
我的问题是这样的:
P_SCB结构体占内存8字节,而信号量 OS_SEM 是U32,不足8字节,赋值的时候不会越界么?:
sem初始化函数:
void os_sem_init(OS_ISD semaphore,U16 token_count)
{
P_SCB p_SCB=semaphore;
p_SCB->cb_types=SCB;
p_SCB->p_lnk=NULL;
p_SCB->tokens=token_count;
}
typedef struct  OS_SCB{
U8 cb_type;
U16 tokens;
struct OS_TCB *p_lnk;
}

OS_SEM sem;
os_sem_init(sem,1);

使用特权

评论回复
9
myxiaonia| | 2015-7-3 15:04 | 只看该作者
jinqiankun 发表于 2015-7-3 14:48
啊莫现在不登陆,附件不能下载。
我的问题是这样的:
P_SCB结构体占内存8字节,而信号量 OS_SEM 是U32,不 ...

/* Definition of Semaphore type */
typedef U32 OS_SEM[2];


这里确实是个8字节的数组

使用特权

评论回复
10
jinqiankun| | 2015-7-3 15:18 | 只看该作者
myxiaonia 发表于 2015-7-3 15:04
/* Definition of Semaphore type */
typedef U32 OS_SEM[2];

确实,看漏了:(

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

13

帖子

0

粉丝