找回密码
 注册
关于网站域名变更的通知
查看: 325|回复: 2
打印 上一主题 下一主题

DSP线程

[复制链接]
  • TA的每日心情
    开心
    2022-12-27 15:07
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-10-11 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    DSP/BIOS中的线程和电脑中的线程有很大区别。关于DSP/BIOS的详细介绍请参考TMS320 DSP/BIOS User's Guide。下面简单地介绍一下DSP/BIOS的线程。9 ^" ?( w9 v0 I; q# r" C* H1 a# q8 m
    为了让DSP能够同时处理多个任务,DSP/BIOS提供了如下几种类型的线程。
    $ d) h. X) K/ E  [' KHWI(硬件中断),SWI(软件中断),TSK(任务),IDL(空闲线程)。
    3 `+ R3 k  b& d: T8 D) N# b" M/ }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抢占。' [, x0 x9 I5 `; J
    SWI有15级优先级,高优先级的SWI可以抢占低优先级的SWI。一般通过SWI_post(或者类似的函数)来启动它。SWI和HWI一样都是不能被阻塞(blocking)的线程。也就是说一旦它们被运行,就要运行到终点为止,除非被其它的线程抢占。. `, W" E" a$ n+ J
    HWI和SWI都使用系统堆栈,而每个TSK都有自己的堆栈。可以在TSK线程之间随意地互相切换,切换时DSP/BIOS将自动地更新堆栈寄存器,因此TSK线程可以被阻塞。这样TSK就可以写成一个死循环:
    ! [% u7 F5 E( o5 r  Q3 G! o; u& ]! i* iWhile(1){
    ; G5 @6 b8 |2 D  B   Do_some_task();4 h" ?( L# z* k, i
       Yield_to_other_task();% O, R# M/ R5 Q0 ^2 d' I
    }
    ( M! q! j, V" ]2 U3 nDo_some_task做这个TSK所要做的事情,Yield_to_other_task则把控制权转给其他的TSK。例如如果是把控制权转给同样优先级的其他TSK,则可以调用TSK_yield函数。如果是要把控制权转给低优先级的TSK,则可以调用TSK_sleep函数让自己休眠一段时间,或者调用SEM_pend函数等待。除非TSK中调用了HWI_disable或者SWI_disable,否则它在任何时候都可以被HWI或者SWI抢占。
    % r" O7 K+ g8 I: i: CTSK和电脑上的线程有些类似,而HWI和SWI则不一样。下面举一个例子说明一下:假设有线程SWI1,SWI2,TSK1,TSK2。SWI1的优先级大于SWI2,TSK1的优先级大于TSK2。& ~% A4 b2 ~$ {/ M% Y, O
    则:
    ; Y) p0 ~0 O5 f, U若在SWI2运行当中,SWI1被post了的话,DSP马上转到SWI1运行,并且直到SWI1运行结束之后再继续SWI2的运行。这就是说SWI只能被抢占,不能被阻塞。这是因为所有的SWI和HWI都公用系统堆栈,一旦SWI1运行,堆栈的最上层就变成了SWI1的环境,除非SWI1运行结束,是无法切换回到SWI2的环境中去的。
    % l6 ^2 @3 J8 y3 P若在TSK2运行当中,TSK1进入ready状态的话,DSP马上转到TSK1运行。稍后如果TSK1被阻塞的话,DSP再继续TSK2运行,当TSK1所等待的信号就绪之后,再转入TSK1运行,如此反复。也就是说DSP可以在TSK之间相互切换。这正是因为每个TSK都有自己独立的堆栈可以保存自己的运行环境0 M' ~, M' F# g5 k% X

    该用户从未签到

    2#
    发表于 2021-10-11 13:53 | 只看该作者

    6 h6 s# X. n- r$ V: GDSP/BIOS中的线程和电脑中的线程有很大区别

    该用户从未签到

    3#
    发表于 2021-10-11 13:59 | 只看该作者
    SWI和HWI一样都是不能被阻塞(blocking)的线程。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-11 13:50 , Processed in 0.109375 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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