首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP程序开发之基本API使用(5)

DSP程序开发之基本API使用(5)


假如流式IO没有准备好,那么该API函数会阻塞(Blocked),任务切换,一段时间后,流式IO数据

准备好了,此时发出READY信号,将本任务置为ready状态,此时TSK_settime会重新记录时间。
(6)void TSK_disable(void)
  
全局关闭内核调度机制,Busy-Shutting-Down状态。只有当前任务可行,其余所有任务禁止。

此函数不会禁止中断,所以在中断开始前需要调用此函数保证中断发生时不会发生任务切换。

可以嵌套,但是调用几次TSK_disable,就得相应调用几次TSK_enable
(7)void TSK_enable(void)
  
全局开启内核调度机制

(8)void TSK_exit(void)
  
终止当前任务运行。如果所有任务都被终止,则DSP/BIOS会调用SYS_exit终止程序。

无论什么时候,任务从顶层函数返回时,都是自动调用此函数。

可以注册一个退出辅助函数 void myExitFxn(void)
  
这样,在任务被设置为TSK_TERMINATED模式之前,会调用这个辅助函数。

(9)Ptr environ = TSK_getenv(TSK_Handle task)
  
返回任务环境指针,这个指针指向一个该任务可以访问的全局属性的结构。

若程序定义多个钩子对象,那么HOOK_getenv函数可以获取设置的环境指针。
(10)void TSK_setenv(TSK_Handle task, Ptr environ)
  
设置指定任务的环境指针。

若程序定义多个钩子对象,那么HOOK_setenv函数可以为每个钩子和任务对象的组合体设置独立的环境指针。
(11)int errno = TSK_geterr(TSK_Handle task)
  
每个任务对象都有一个包含任务错误号的存储单元。初始值为SYS_OK
(12)void TSK_seterr(TSK_Handle task, int errno)
  
改变错误号

(13)String name = TSK_getname(TSK_Handle task)
  
返回任务的名字。

对于静态对象来说,必须打开Allocate Task Name on Target
  
对于动态对象来说,TSK_getname返回attrs.name字段

(14)int priority = TSK_getpri(TSK_Handle task)
  
返回优先级
(15)int oldpri = TSK_setpri(TSK_Handle task, int newpri)
  
设置优先级

设置优先级对于TSK_BLOCKED状态任务只是优先级改变,而不会改变状态;

对于TSK_READY状态的任务而言,可能会改变运行状态。
(16)STS_Handle sts = TSK_getsts(TSK_Handle task)
  
获得统计对象句柄,以便查看数据
(17)void TSK_sleep(Uns nticks)
  
暂停任务的时钟个数,此时钟数可能比真实的暂停时钟少一个时钟(告警时钟)
(18)void TSK_itick(void)
  
对告警时钟加1,以便让TSK_sleep或者SEM_pend函数暂停执行的任务恢复到ready

一些暂停的任务可能会随着告警时钟的增加而超时,从而就绪。
(19)void TSK_tick(void)
  
对告警时钟加1,以便让TSK_sleep或者SEM_pend函数暂停执行的任务恢复到ready

一些暂停的任务可能会随着告警时钟的增加而超时,从而就绪。

可以在中断服务程序和当前任务中调用,后者在控制超时非常有用。
(20)Uns currtime = TSK_time(void)
  
返回系统告警时钟的当前值。(由于延迟,只能得到一个大概的系统时钟)
(21)TSK_Handle currtask = TSK_self(void)
  
返回当前任务对象的句柄

(22)void TSK_stat(TSK_Handle task,TSK_Stat * statbuf)
  
返回任务的属性参数和状态信息
  struct TSK_Stat{
   TSK_Attrs attrs;//
任务参数
   TSK_Mode mode; //
任务执行模式
   Ptr sp;     //
任务当前堆栈指针
   Uns used;    //
任务堆栈曾经使用的最大值
  }
  
注意:任务比HWISWI中断优先级要低,所以当任务被中断时,还是返回TSK_RUNNING

因为中断完成后任务继续运行。
(23)void TSK_yield(void)
  
强制任务切换,请注意,任务可以被中断,但是,任务之间必须依靠切换来进行,就是说,

即便当前有高优先级任务就绪,它不能被执行,除非切换。

此函数用于任务之间的同步。

十、任务管理 HOOK钩子函数管理模块
HOOK
模块管理者一组涉及钩子函数的对象。DSP/BIOS初始化期间,每一个HOOK对象都分配了一个数字标识符。

每个HOOK模块都有一个初始化函数,该函数会在钩子函数调用前运行。在调用初始化函数是,DSP/BIOS内核

会将HOOK对象的标识符以参数的形式传给初始化函数。
HOOK
对象的数据是存放在.bss部分中的。

关于HOOK属性的设置,对应关系如下:
Initialization function: TSK_create
delete function: TSK_delete
Exit function: TSK_exit
另外还有Call switch function, switch function, Call ready function, ready function


返回列表