搜索
bottom↓
回复: 12

请教:RT-Thread怎样深入

[复制链接]

出0入0汤圆

发表于 2010-2-6 09:51:36 | 显示全部楼层 |阅读模式
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 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

出0入0汤圆

 楼主| 发表于 2010-2-6 10:02:49 | 显示全部楼层
谢谢

出0入0汤圆

发表于 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[set%MAXSEM] = cnt + 1;
rt kprintf("the producer generates a number: %d\n", array[set%MAXSEM]);
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如何做到这一点?

出0入0汤圆

发表于 2010-2-6 18:25:01 | 显示全部楼层
上面这个例子仅仅是不想让它永远继续下去,所以设置了一个counter值。

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

出0入0汤圆

发表于 2010-2-6 18:26:22 | 显示全部楼层
回复【楼主位】winshton  
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 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。

出0入0汤圆

发表于 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, 那么,它到哪里去了呢?

出0入0汤圆

发表于 2010-2-6 21:36:41 | 显示全部楼层
呵呵,对RTX没有什么研究,你说的这个实现是否是在库中了?

出0入0汤圆

发表于 2010-2-6 21:39:33 | 显示全部楼层
回复【楼主位】winshton  
呵呵,不是使用,是深入理解分析,有结构说明文档?辅助工具?光啃代码,头晕,不知道从哪下手。
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2010-2-6 23:22:56 | 显示全部楼层
回复【9楼】ffxz  
-----------------------------------------------------------------------

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

出0入0汤圆

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

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

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

出0入0汤圆

发表于 2010-2-23 17:22:06 | 显示全部楼层
RT-Thread的实现条理性是非常清晰的,不过需要些预备知识,

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

基础知识在编程指南中有提及
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 22:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表