winshton 发表于 2010-2-6 09:51:36

请教:RT-Thread怎样深入

呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。

shaolin 发表于 2010-2-6 09:56:02

你可以先看RT-Thread编程手册,里面有对RT-Thread内核较为详细的介绍。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3868799&bbs_page_no=1&bbs_id=3066

winshton 发表于 2010-2-6 10:02:49

谢谢

TBN1 发表于 2010-2-6 14:32:17

有一个问题,看RTT MANUAL里面的例程:

/* 生成者线程入口*/
void producer thread entry(void* parameter)
{
int cnt = 0;
/* 运行100次*/
while( cnt < 100)
{
/* 获取一个空位*/
rt sem take(&sem empty, RT WAITING FOREVER);
/* 修改array内容,上锁*/
rt sem take(&sem lock, RT WAITING FOREVER);
array = cnt + 1;
rt kprintf("the producer generates a number: %d\n", array);
set++;
rt sem release(&sem lock);
/* 发布一个满位*/
rt sem release(&sem full);
cnt++;
/* 暂停一段时间*/
rt thread delay(50);
}
rt kprintf("the producer exit!\n");
}


这个任务为什么不象其他的RTOS那样,必须是WHILE(1)没有返回的形式?

在打印生产者退出后,任务就要返回了,而这会打乱任务调度的。

RTT如何做到这一点?

ffxz 发表于 2010-2-6 18:25:01

上面这个例子仅仅是不想让它永远继续下去,所以设置了一个counter值。

RTT是支持线程运行结束的,一个函数调用时,它的返回值是LR寄存器(假设是ARM),所以在线程栈初始化时,已经把退出函数放在栈的LR寄存器位置,所以如果运行结束它能够自动做后面的收尾处理。

ffxz 发表于 2010-2-6 18:26:22

回复【楼主位】winshton
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。
-----------------------------------------------------------------------

核心代码没多少行,编程指南已经露出一些端倪,所以剩下的仔细分析下就可以了,很容易的。

TBN1 发表于 2010-2-6 18:36:57

今天学了一招,仔细看了一下RTX:

typedef struct OS_SCB {
   U8   cb_type;                /* Control Block Type                      */
   U16    tokens;               /* Semaphore tokens                        */
   struct OS_TCB *p_lnk;          /* Chain of tasks waiting for tokens       */
} *P_SCB;

struct OS_SCB a;
P_SCB B;

a是结构体,B是指针,不浪费RAM。

TBN1 发表于 2010-2-6 21:30:46

对了,ffxz老兄,想请教一个问题。

RTX manual里面有如下函数:OS_TID os_tsk_create (
    void (*task)(void),    /* Task to create */
    U8    priority );      /* Task priority (1-254) */

在它的头文件里,是如下定义:
#define os_tsk_create(tsk,prio)       _os_tsk_create((U32)rt_tsk_create,tsk,prio,NULL,NULL)

而在RTOS源程序里面,我找不到_os_tsk_create, 只找到:
extern OS_TID    rt_tsk_create (FUNCP task, U32 prio_stksz, void *stk, void *argv);

到哪里都找不到_os_tsk_create, 那么,它到哪里去了呢?

ffxz 发表于 2010-2-6 21:36:41

呵呵,对RTX没有什么研究,你说的这个实现是否是在库中了?

ffxz 发表于 2010-2-6 21:39:33

回复【楼主位】winshton
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。
-----------------------------------------------------------------------

发现你把RT-Thread的名称都写错了,这个似乎有些说不过去,帮你把标题中的名字改过来了。如果觉得RT-Thread太英文化了,那么用它的中文名称:实时线程操作系统 即可。

winshton 发表于 2010-2-6 23:22:56

回复【9楼】ffxz
-----------------------------------------------------------------------

抱歉没注意,春节期间如果有空闲时间的话,准备研究一下RT-Thread,正好手里有块7x256的板子

VERY 发表于 2010-2-23 16:42:31

回复【5楼】ffxz
回复【楼主位】winshton   
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。
-----------------------------------------------------------------------
核心代码没多少行,编程指南已经露出一些端倪,所以剩下的仔细分析下就可以了,很容易的。
-----------------------------------------------------------------------

可否有空写一个核心代码的说明文档:)

我也是,直接啃,不知道怎么开始下手,有文档做指引,感觉会顺畅好多

ffxz 发表于 2010-2-23 17:22:06

RT-Thread的实现条理性是非常清晰的,不过需要些预备知识,

list链表的实现 --> kservice.h
对象的实现 --> object.c

基础知识在编程指南中有提及
页: [1]
查看完整版本: 请教:RT-Thread怎样深入