标题:
DSP程序开发之基本API使用(5)
[打印本页]
作者:
look_w
时间:
2017-9-23 14:15
标题:
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; //
任务堆栈曾经使用的最大值
}
注意:任务比
HWI
和
SWI
中断优先级要低,所以当任务被中断时,还是返回
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
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0