DSP-BIOS-常用API总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

DSP/BIOS常用API总结DSP/BIOSAPI使用目的DSP/BIOS内核提供大约150个API函数调用,而且几乎都可以使用C或C++语言直接调用。通过这些API,用户可以完成硬件中断的管理,软件中断的启动,任务的切换,各个线程之间的同步和数据通信。对DSP/BIOS的掌握,也就是熟练的使用这些API调用。几种常见的模块的API调用LOG模块SWI模块TSK模块SEM模块LOG模块当目标程序执行时,可以使用LOG模块中的事件日志来记录实时的事件。运行程序后在CCS的DSP/BIOS选项的MessageLog,可以看到通过LOG_printf函数输出的信息。LOG模块常用的API函数包括LOG_disable,LOG_enable,LOG_printfLOG_disable(LOG_Obj*log)LOG_disable将关闭指定对象的日志记录功能,这时日志缓冲区的内容将不会被更新LOG_enable(LOG_Obj*log)与LOG_disable函数相反,LOG_enable函数将允许日志可以记录事件。DSP/BIOS默认情况下日志记录功能是打开的。LOG_printf(LOG_Objlog,Stringformat,Intarg0)LOG_printf可以在指定的LOG窗口显示消息,等效于标准C语言中的print()函数。SWI模块SWI模块管理软件中断服务程序。这些软件服务程序与HWI硬件中断服务程序有密切的联系。一般情况下,会将日常的大多数处理函数放到这些软件中断中去处理。所有的SWI共享一个堆栈,当SWI发生时,新的线程会加栈顶,系统执行一次任务的切换。每个SWI对象都设置一个16位的邮箱可以利用这个邮箱有条件的启动这个软件中断。所有的软件中断都是通过DSP/BIOS内核的API调用来启动,所有SWI中常用的API都是实现包括启动软件中断,改变软件中断的优先级等操作,SWI的API包括如下:SWI_disable,SWI_enable,SWI_create,SWI_getpri,SW_getmboxSWI_andn,SWI_or,SWI_dec,SWI_inc,SWI_post,SWI_raisepri,SWI_restorepri,SWI_selfSWI_disable(void)SWI_enable(void)SWI_create(SWI_attrsattrs)SWI_disabel调用后将禁止软件中断,SWI_enable调用后将开启软件中断,必须在已调用SWI_disable后才能调用,一般组合使用保护重要代码,如下:SWI_disable()/*需要禁止软件中断和线程切换的重要代码*/SWI_enable()SWI_create是用于动态的创建一个软件中断,也可以在配置文件中静态创建。SWI_getpri(SWI_Obj*swi)SWI_getmbox(Void)SWI_getpri用于获得SWI对象的优先级SWI_getmbox用于获得当前SWI对象的邮箱值SWI_andn(SWI_Obj*swi,Unsmask)SWI_or(SWI_Obj*swi,Unsmask)SWI_inc(SWI_Obj*swi)SWI_dec(SWI_Obj*swi)SWI_post(SWI_Obj*swi)其中SWI_Obj软件中断句柄,Uns无符号8位启动软件中断,其中SWI_andn和SWI_or分别是对邮箱值按位与和或操作。SWI_inc和SWI_dec分别是对邮箱值家园和减一操作,SWI_post忽略对邮箱进行操作。在这5个API函数中,其中SWI_or,SWI_inc,SWI_post调用时就能启动软件中断,而SWI_dec和SWI_post必须等邮箱变为0时启动软件中断。SWI_raisepri(Umask)SWI_restorepri(Unskey)SWI_self(Void)SWI_raisepri用于提高SWI软件中断的优先SWI_restorepri用于恢复软件中断的优先级。SWI_self返回当前软件中断地址使用举例如下:/*raiseprioritytothepriorityofswi_1*/key=SWI_raisepri(SWI_getpri(&swi_1));….SWI_restorepri(key);SWI_self举例SWI_post(SWI_self());TSK模块TSK模块中提供一系列可以使用的函数,这些函数通过TSK_Handle句柄访问和管理任务对象。各个任务对象可以独立运行,也可以并行运行。DSP/BIOS的任务管理模块根据各对象优先级安排运行,并通过切换函数完成一项任务到另一项任务的转换。TSK的常用API函数包括如下:TSK_create,TSK_delete,TSK_disable,TSK_enable,TSK_getname,TSK_gepri,TSK_self,TSK_setpri,TSK_sleep,TSK_stat,TSK_time,TSK_yield,TSK_exit,Tsk的工作状态Tsk_yield使另一相同优先级的任务进入Ready状态TSK_create(fxn,attrs,[arg]…)TSK_delete()fxn指向任务的指针attrs任务参数指针arg任务参数TSK_create用来动态创建一个新的任务对象,TSK_delete用来删除一个指针。如下:task=TSK_create((Fxn)myFxn,NULL);TSK_delete(task);TSK_disable(void)TSK_enable(void)这两个函数用来关闭和开启任务调动机制。TSK_getname(TSK_handletask)TSK_gepri(TSK_handletask)TSK_self(void)TSK_setpri(TSK_handletask,newpri)TSK_getname返回任务的名字TSK_gepri返回指定任务的优先级TSK_self返回当前任务句柄TSK_setpri可以指定任务的优先级举例:TSK_setpri(task,10)把task的优先级设置为10TSK_sleep(ntick)TSK_stat(TSK_handletask,TSK_Stat*statbuf)TSK_time(void)TSK_yield(void)TSK_exit(void)TSK_sleep把当前任务从运行转变为暂停,延迟ntick个时钟后继续执行TSK_stat返回任务的属性参数和状态信息,返回到第二个参数TSK_time返回系统告警时钟的当前值TSK_yield强制实现任务切换,同优先级或更高等级的任务会执行TSK_exit中止当前任务的运行SEM模块使用一组旗语对象的句柄来管理任务间同步和通信,通常使用SEM_pend函数阻塞任务的运行,等待旗语post后,继续运行。通常的API函数有如下:SEM_create,SEM_delete,SEM_pend,SEM_postsem=SEM_create(count,attrs)SEM_create实现动态创建一个新的旗语对象,当然也可以在配置文件中实现静态的配置SEM_delete(sem)删除指定的旗语SEM_pend(sem,timeout)SEM_post(sem)sem旗语对象timeout超时时间如果旗语计数器大于0,SEM_pend会对计数器进行减1操作,并返回ture,否则的话SEM_pend会暂停当前任务的运行,直到该函数指定的旗语到达。SEM_post函数使得处于等待旗语的任务变为就绪状态,而该任务在等待旗语时处于暂停状态。

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功