搜索
bottom↓
回复: 4

线程如何定义

[复制链接]

出0入0汤圆

发表于 2010-6-13 06:18:18 | 显示全部楼层 |阅读模式
请问下,如果我要用一个操作系统,面对整个系统的各个信息,如何划分线程,有什么规律,比如需要扫描按键,触摸屏,写LCD,接收串口数据,转发数据包,AD采集,音频输出,N多的定时器任务,等等一系列任务要做,那么在划分线程的时候,如何划分,到底哪几个任务可放在一个线程里,大家有什么经验吗
有RTT QQ群吗

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

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

出0入0汤圆

发表于 2010-6-13 08:09:02 | 显示全部楼层
回复【楼主位】jichong211
-----------------------------------------------------------------------

你应该看一下邵贝贝写的UCOS2在来问这个问题

出0入0汤圆

发表于 2010-6-13 08:28:57 | 显示全部楼层
帮楼主顶

出0入0汤圆

发表于 2010-6-13 23:32:38 | 显示全部楼层
线程设计
--------

程序的运行上下文
================
采用RT-Thread的实时系统,程序运行状态只有几种类型,但这几种类型却构成的程序运行的上下文状态,当程序员清晰的知道自己编写的程序处于何种状态时,对于程序中应该注意什么要点将非常清晰了然。

RT-Thread中程序运行的上下文包括:

* 中断服务例程;
* 普通线程;
* 空闲线程;


空闲线程指的是在RT-Thread系统中采用idle线程钩子方式在idle线程上钩入自己的功能函数。通常这个空闲线程钩子能够完成一些额外特殊功能,例如系统运行状态指示,系统省电模式等。除了空闲线程钩子,RT-Thread系统还把idle线程用于一些其他目的:当系统删除一个线程或一个动态线程运行结束时,会挂在一个 僵尸 列表中,真正的系统资源回收工作在idle线程完成。所以,对于空闲线程钩子上挂接的程序,它应该:

* 不会挂起idle线程;
* 不应该陷入死循环,需要留出部分时间用于系统处理僵尸线程的系统资源回收。


中断服务例程是另外一种需要特别注意的上下文环境。中断服务程序是运行在非线程的执行环境下(一般为芯片的一种特殊运行模式),在这个上下文环境中也不能够进行挂起当前线程的操作(因为当前线程并不存在)。另外中断服务程序需要注意的是,它的执行时间最好保持精简短小,因为中断服务是一种高于任何线程的存在。

普通线程看似没有什么限制程序执行的因素,似乎所有的操作都可以执行。但是做为一个实时系统,一个优先级明确的实时系统,如果一个线程中的程序执行了死循环操作,那么比它优先级低的线程都将不能够得到执行,当然也包括了idle线程。

线程设计要点
============

在实时系统的章节中提到过,实时系统大多数是一种被动的系统,被动的响应外部事件:当外部事件触发后进行设定的工作内容。当要对系统进行线程设计时,就需要考虑到:

* 工作内容的上下文环境

        对于工作内容,需要思考它的执行环境是什么。工作内容与工作内容间是否有重叠的部分,是否能够合并到一起进行处理,或者单独划分开进行处理。例如STM32 Radio中,键盘事件的处理:在正常情况下,键盘可以采用中断服务例程直接产生RT-Thread/GUI所要求的键盘事件,然后在中断服务例程中把它发送给RT-Thread/GUI服务线程。但是在STM32 Radio中,由于硬件的限制,需要自行查询按键的状态,即不能够在中断服务的上下文中执行,所以单独开辟了一个key线程来处理按键。

* 线程的状态跃迁

        这里说的状态跃迁指的是线程的运行状态变化,从就绪态过渡到阻塞态。实时系统一般会被设计成一种优先级的系统,如果一个线程只有就绪态而无阻塞态,那势必会影响到其他低优先级线程的执行情况。所以在进行线程设计时,就应该能够保证,在线程不活跃的时候必须让出处理机,即线程能够主动让出处理机资源,进入到阻塞状态。这需要设计者在设计线程的时候就明确知道哪些点需要让线程从就绪态跃迁到阻塞态。

* 线程运行时间长度

        线程运行时间长度定义为,在线程所关心的一种事件或多种事件触发状态下,线程由阻塞态跃迁为就绪态进行设定的工作,再从就绪态跃迁为阻塞态所需要的时间(一般还应加上这段时间内,这个线程不会被其它线程所抢占)。线程运行时间长度将和线程的优先级设计密切相关,同时也决定着设计的系统是否能够达到预计的实时响应指标。
       
        例如,对于事件A(对应的服务线程是Ta),系统要求的实时响应指标是1ms。此时,系统中还存在这以50ms为周期的另一线程Tb,它每次运行的时间长度最大是100us。Ta的最大运行时间是500us,在这种情况下,即使把线程Tb的优先级抬到比Tb更高的位置,对系统的实时性指标也没什么影响(因为即使在Ta的运行过程中,Tb抢占了Ta进行运行,但在规定的时间内(1ms),Ta也能够完成对事件A的响应)。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 13:27

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

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