DSP

DSP/BIOS 中的线程

2019-07-13 12:45发布

DSP/BIOS 中对线程的广义定义:DSP执行的所有独立的指令流。一个线程是一个单独的控制点,它可能包含一个子程序、一个宏或者是一个函数调用。 多线程的程序在一个单独的处理器上运行是通过允许高优先级抢占低优先级的线程来实现的,并且允许各线程间的相互作用,包括暂停、通信及同步。 DSP/BIOS有如下几类线程(高——>低): HWI:包括CLK功能 SWI:包括PRD功能 TSK IDL 1.选择线程类型: 线程选择的原则:在应用程序中,这个线程是否具有实时性?该线程的执行时间相对其他部分来说是否需要少许多? 1)严格实时性:如线程的执行需要严格的实时性,而线程执行需要的时间又很少时,可以使用硬件中断或时钟函数来完成。硬件中断线程推荐使用汇编语言。(尽量少用) 2)部分实时性:SWI或TSK线程特点:能够完成实时处理任务,但允许处理时间较长;允许被其他线程抢占。选择SWI还是TSK有如下几种情况:                         处理函数需等待某些资源(数据、信号),以便继续执行                         处理函数与其他线程之间有复杂的联系或数据共享要求                         希望处理函数有自己的堆栈空间而不是系统公用的堆栈空间                         处理函数中用到CLK,MBX或SEM这几个模块                         希望在线程创建、删除、退出、就绪、切换时调用钩子函数。              以上情况有任何一种存在时,建议使用TSK任务线程;相反,当没有上面的一种时,建议用SWI。 HWI靠硬件中断触发;SWI靠中断API函数调用实现触发,SWI适合用于处理一些发生速率低的任务,对实时性要求不苛刻。SWI也可帮助HWI将一些严格实时性的处理放到低优先级的线程去处理,以减少硬件中断的响应时间,这点可是硬件中断中关注中断状态。SWI使用系统资源,浪费少。 3)周期性服务:需要周期性的在固定时间能完成任务,可使用PRD函数,一个周期函数不能抢占其他周期函数 4)不需实时性:IDL线程