![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| DSP/BIOS中的线程 | |||||
作者:Free 文章来源:本站原创 点击数: 更新时间:2008-2-29 ![]() |
|||||
|
DSP/BIOS中的线程和电脑中的线程有很大区别。关于DSP/BIOS的详细介绍请参考TMS320 DSP/BIOS User's Guide。下面简单地介绍一下DSP/BIOS的线程。 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抢占。 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抢占。 若在TSK2运行当中,TSK1进入ready状态的话,DSP马上转到TSK1运行。稍后如果TSK1被阻塞的 话,DSP再继续TSK2运行,当TSK1所等待的信号就绪之后,再转入TSK1运行,如此反复。也就是说DSP可以在TSK之间相互切换。这正是因为每 个TSK都有自己独立的堆栈可以保存自己的运行环境。 |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| DSP集成开发环境CCS开发指南… DSP技术课程经典实验分析:F… 请教隔离的问题 程序不能load的问题 DSP和其供电芯片可以分别在两… 关于SBSRAM的问题 请问与EMIF有关的 /BE[3:0] … 怎么样才可以进入中断服务程… 没有仿真器能不能开发DSP 两种仿真器有何不同 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|