DSP/BIOS任务管理
1 任务管理 TSK任务管理模块
TSK模块中提供了一系列可以利用的函数,这些函数通过TSK_Handle句柄访问和管理任务对象。通过优先级安排运行,并通过切换函数完成任务切换。
当我们创建一个任务对象时,同时建立一个属于该任务专用的堆栈,用来存储本地局部变量和进一步的函数调用嵌套。堆栈不但要处理一般的子程序调用,还要处理任务切换。所以堆栈要足够大。当需要切换到更高优先级的任务时,这些堆栈可以用来保存当前任务的状态。所有的任务有一块共享存储器,用以保存所有任务对象都能访问的全局变量。
DSP/BIOS为任务对象提供0~15的优先级。相同优先级,先来先服务。作为一项原则,当前运行任务的优先级高于任何处于就绪状态的任务。
在DSP/BIOS配置工具中,还可以定义一个或者多个钩子函数。无论任何时候,一个任务的状态发生变化,钩子函数就会运行。还可以通过HOOK管理模块提供API函数动态创建钩子函数。
另外,用户还可以定义一个切换函数,就绪函数。
2 任务管理 HOOK钩子函数管理摸
Hook模块管理着一组涉及钩子函数的对象,在DSP/BIOS初始化期间,每个HOOK对象都分配了一个数字标识符。每个HOOK模块都有一个初始化函数,该函数会在钩子函数调用前运行。DSP/BIOS内核把HOOK对象的标识符以参数的形式传给初始化函数。一旦创建了HOOK对象,配置工具自动生成一个HOOK_KNL的HOOK对象。任何我们在TSK任务管理模块中定义的钩子函数都会被自动放到这个HOOK对象中。对这个HOOK对的属性参数的设置,除初始化外,请在TSK任务模块完成。对HOOK_KNL对的初始化函数的属性设置请在HOOK模块中完成。当一个事件发生时,该时间所有的HOOK函数都会按照配置工具中列出来的顺序调用。我们可以用鼠标拖动,改变顺序。
DSP/BIOS的后台管理:IDL模块
IDL函数优先级最低,DSP/BIOS的很多分析工具,都是用IDL函数完成的。