6-5-DSP-BIOS:线程调度(-part-2-)

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

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

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

资源描述

DSPBIOS4:线程调度(part2)远见品质4.6信号灯(信号量)(1)应用环境:信号灯经常用于在一组竞争的任务间协助访问共享资源。DSP/BIOS提供了一组基于信号灯的用于任务间同步和通讯的函数。SEM模块提供了一组用于访问信号灯对象的函数。SEM对象是计数信号灯(countingsemaphores),既可以实现任务同步,也可以实现互斥访问。使用方法:计数信号灯对象有一个内部计数器,计数值对应资源的有效性,如果计数值大于0,任务在请求信号灯时不会阻塞。远见品质4.6信号灯(2)创建和删除:动态创建和删除,SEM_create,SEM_delete配置工具创建SEM_pend:SEM_pend用于等待一个信号灯。如果信号灯计数值大于0,则SEM_pend只是简单的将计数值减1并返回。否则,SEM_pend等到另一个线程调用SEM_post触发(post)这个信号灯(即释放资源)。SEM_pend函数的超时参数允许任务等待一段时间,也可以无限等待(取值SYS_FOREVER),或不等待(取值0)。SEM_post:给一个信号灯发信号(signal),如果有一个任务正在等待这个信号灯,SEM_post将这个任务从信号灯队列中移去,并将它放入就绪任务队列等待调度。如果没有任务等待这个信号灯,SEM_post简单地将计数值加1并返回。远见品质4.6.1·信号灯的例子远见品质4.7邮箱应用场合:任务同步,把消息从一个任务传递给另外一个任务。邮箱由MBX模块管理(SWI对象中的邮箱则是独立管理的)邮箱的创建:与信号灯类似邮箱的使用:可代替队列+信号灯MBX_pend(&mbx,&msg,TIMEOUT)MBX_post(&mbx,&msg,TIMEOUT)不同于信号灯远见品质4.8定时器、中断和系统时钟定时器和它产生的硬件中断:一般的DSPs都有一个或多个片上定时器(timers)可以按一定的周期产生硬件中断。DSP/BIOS通常使用其中一个定时器作为系统时钟(systemclock)源。CLK模块和CLK对象:CLK模块使用片上硬件定时器可以实现接近CPU指令周期的时间分辨率。在配置工具中指定系统时钟参数,还可以添加更多的CLK对象在每次定时器中断时调用函数。远见品质4.8定时器、中断和系统时钟DSP/BIOS两种计时方式(1)高、低分辨率计时(2)系统时钟高分辨率计时:timer的计数值低分辨率计时:时钟中断的次数,时钟HWI中加1系统时钟(在在配置工具中设置):默认低分辨率计时和系统时钟,系统时钟还可由其它事件驱动。系统时钟驱动PRD模块。周期PRD函数:一到多个系统时钟计数才执行一次。远见品质4.8.1高精度和低精度时钟设置:在CLK管理器的属性页中可以设置是否让DSP/BIOS使用片上定时器驱动高、低分辩计时。在C6000平台上这是不可选择的。在C54x平台上这是可选的。在C6000平台上还可以选择使用那个定时器。时钟HWI函数CLK_F_isr的操作:(1)低分辩计时加1(2)在中断服务程序的上下文中依次调用每个CLK对象的函数CLK_getltime可以得到低分辩时间CLK_gethtime可以得到高分辩时间注意:CLK函数不能调用HWI_enter和HWI_exit,因为DSP/BIOS在调用CLK_F_isr时已经内部调用了这对函数。远见品质4.8.2系统时钟概念:系统时钟是一个32位计数器,在每次调用PRD_tick函数时这个计数器加1。系统时钟的驱动:系统时钟可以由低分辩计时驱动,也可以由外部事件驱动。超时参数:很多DSP/BIOS函数都有一个超时参数。DSP/BIOS使用系统时钟决定超时时间是否到期。如:TSK_sleep(1000);时钟HWI中断调用PRD_clock时钟对象的函数PRD_F_tick,PRD_F_tick会调用PRD_tick使系统时钟加1。远见品质4.9周期函数管理器和系统时钟PRD管理器中可以建立对象来周期地执行函数PRD模块的驱动:DSP/BIOS使用系统时钟驱动PRD模块多个PRD对象:可以同时有多个PRD对象被系统时钟驱动。PRD对象的周期:PRD对象的周期决定了函数被调用的频率,PRD对象的周期是按系统时钟计数定义的。远见品质4.9.1调用PRD对象的函数(1)调用PRD_tick时执行的操作:(1)系统时钟计数器PRD_D_tick加1(2)触发一个PRD_swi软件中断PRD_swi的周期:各个PRD对象的周期的最大公约数且是2的幂。比如:有3个PRD对象,它们的周期分别12、24和36,那么PRD_swi每4个系统时钟计数(tick)时运行一次,而不是6个tick。当建立一个PRD对象时,一个PRD_swi对象自动加入到SWI管理器下远见品质4.9.1调用PRD对象的函数(2)PRD_swi运行时的操作:周期函数的运行是延迟到软件中断PRD_swi的上下文中运行的,而不是在HWI的上下文中运行的。所以,周期函数的优先级可看作是和SWI相同。(CLK函数和HWI函数同)远见品质小结:高、低分辨率计时,系统时钟和PRD对象的关系高分辩率计时Globalsetting中设置主频,高分辨率时钟=CPUrate/4(C6000)低分辩率计时系统时钟PRD管理器的属性页的“UseCLKManagertoDrivePRD”控制是否使用CLK管理器驱动系统时钟PRD对象如果不用低分辨率时钟驱动,则设置Micrsecends/tickCLK管理器的属性中设置:时钟周期寄存器的值,以决定中断发生的时间间隔PRD对象的属性中设置几次系统时钟tick运行一次PRD函数

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

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

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

×
保存成功