DSP中的线程(转载)

原创 2007年09月30日 16:17:00
 DSP/BIOS中的线程和电脑中的线程有很大区别。关于DSP/BIOS的详细介绍请参考TMS320 DSP/BIOS User's Guide。下面简单地介绍一下DSP/BIOS的线程。
为了让DSP能够同时处理多个任务,DSP/BIOS提供了如下几种类型的线程。
HWI(硬件中断),SWI(软件中断),TSK(任务),IDL(空闲线程)。
HWI其实就是中断服务。当硬件中断产生之后,DSP/BIOS就会调用相应的HWI函数。如果把HWI设置为Dispatch的话,则会在调用HWI函数的前后自动调用HWI_enter和HWI_exit。在HWI函数的执行时,若有其他的硬件中断产生,当前的HWI会被新的中断抢占,也就是说DSP会先去执行新的HWI。如果希望当前的HWI在不被其他的HWI打断的话,可以在不能被打断的代码前后调用HWI_disable和HWI_enable。HWI的优先级是硬件级别的优先级(固定的),若同时有多个中断向DSP请求的话,它决定DSP先响应哪个中断。而中断所对应的HWI则是可以被任何其他的HWI抢占。
SWI有15级优先级,高优先级的SWI可以抢占低优先级的SWI。一般通过SWI_post(或者类似的函数)来启动它。SWI和HWI一样都是不能被阻塞(blocking)的线程。也就是说一旦它们被运行,就要运行到终点为止,除非被其它的线程抢占。
HWI和SWI都使用系统堆栈,而每个TSK都有自己的堆栈。可以在TSK线程之间随意地互相切换,切换时DSP/BIOS将自动地更新堆栈寄存器,因此TSK线程可以被阻塞。这样TSK就可以写成一个死循环:
While(1){
   Do_some_task();
   Yield_to_other_task();
}
Do_some_task做这个TSK所要做的事情,Yield_to_other_task则把控制权转给其他的TSK。例如如果是把控制权转给同样优先级的其他TSK,则可以调用TSK_yield函数。如果是要把控制权转给低优先级的TSK,则可以调用TSK_sleep函数让自己休眠一段时间,或者调用SEM_pend函数等待。除非TSK中调用了HWI_disable或者SWI_disable,否则它在任何时候都可以被HWI或者SWI抢占。
TSK和电脑上的线程有些类似,而HWI和SWI则不一样。下面举一个例子说明一下:假设有线程SWI1,SWI2,TSK1,TSK2。SWI1的优先级大于SWI2,TSK1的优先级大于TSK2。
则:
若在SWI2运行当中,SWI1被post了的话,DSP马上转到SWI1运行,并且直到SWI1运行结束之后再继续SWI2的运行。这就是说SWI只能被抢占,不能被阻塞。这是因为所有的SWI和HWI都公用系统堆栈,一旦SWI1运行,堆栈的最上层就变成了SWI1的环境,除非SWI1运行结束,是无法切换回到SWI2的环境中去的。
若在TSK2运行当中,TSK1进入ready状态的话,DSP马上转到TSK1运行。稍后如果TSK1被阻塞的话,DSP再继续TSK2运行,当TSK1所等待的信号就绪之后,再转入TSK1运行,如此反复。也就是说DSP可以在TSK之间相互切换。这正是因为每个TSK都有自己独立的堆栈可以保存自己的运行环境。

相关文章推荐

多线程编程之重点--使用DSP/BIOS时选择线程类型的参考方法

多线程编程之重点--使用DSP/BIOS时选择线程类型的参考方法 了解以下这些,对在DSP/BIOS上设计多线程应用程序就是轻而易举的事件。 DSP/BIOS支持多种类型线程,每种类型线程且有不同...

DSP/BIOS 线程

很多实时的 DSP 应用程序很可能会在同一时间执行多个看似不相关的任务。比如当外部数据变为有效或者出现控制信号时,对外部事件进行响应。这些任务都很重要,而且必须同时进行。 通常,我们将这些任务称...

DSP/BIOS 线程控制 MBX SEM QUE模块API

DSP/BIOS的高级应用 DSP在同一时间执行多个任务,当外部数据变为有效或者出现控制信号时,对外部事件进行响应。 通常将这些任务称为线程,DSP/BIOS采用广义的定义:DSP执行的所有独立的...

纯新手DSP编程--5.30--DSP/BIOS线程

DSP/BIOS中的线程和电脑中的线程有很大区别。关于DSP/BIOS的详细介绍请参考TMS320 DSP/BIOS User's Guide。下面简单地介绍一下DSP/BIOS的线程。 在DSP/...

DSP市场拓展纵横谈(从TI官网转载的,觉得挺不错的)

在经历整整二十年的市场拓展之后,DSP所树立的高速处理器地位不仅不可动摇,而且业已成为数字信息时代的核心引擎。与此同时,DSP的市场正在蓬勃发展。根据Forward Concepts 分析家的预测,今...

转载几个牛人的牛语录:有关FPGA和DSP和ARM的。

这世界真是疯了,貌似有人连FPGA原理是什么都不知道就开始来学习FPGA了。 DSP就是一个指令比较独特的处理器。它虽然是通用处理器,但是实际上不怎么“通用”。技术很牛的人可以用DSP做一台电脑...

【转载】DSP看门狗定时器

1 工作方式                在数字信号处理器的工作过程中有时会发生一些异常情况,这可能是在软件执行时发生错误,如堆栈溢出、内存溢出等软件编写时没有预料到的错误,也可能是DSP在运行时...

DSP学习的三个阶段(转载)

研究生期间断断续续做过TI  DSP研究,从一个对嵌入式一点也没有了解的新手到快毕业时完成一个自认为满意的项目,其中走过很多弯路,现在把我对DSP学习的心得和一些参考文献列出来,可能对初学者具有帮助。...
  • yuyin86
  • yuyin86
  • 2012年03月06日 09:11
  • 1116

DSP浮点研究之二:IEEE754标准(转载)

IEEE 754 浮点数的表示精度探讨前言从网上看到不少程序员对浮点数精度问题有很多疑问,在论坛上发贴询问,很多热心人给予了解答,但我发现一些解答中有些许小的错误和认识不当之处。我曾经做过数值算法程序...

牛人经验0(转载几个牛人的牛语录:有关FPGA和DSP和ARM的。)

需求说明:FPGA基本知识 内容       :如何确定时序约束数值 来自       :时间的诗 原文:http://blog.csdn.net/zhengmeifu/article/det...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DSP中的线程(转载)
举报原因:
原因补充:

(最多只允许输入30个字)