欢迎来到天天文库
浏览记录
ID:36405989
大小:391.60 KB
页数:14页
时间:2019-05-09
《IDSPBIOS4:线程调度pa》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DSPBIOS4:线程调度(part2)4.6信号灯(信号量)(1)应用环境:信号灯经常用于在一组竞争的任务间协助访问共享资源。DSP/BIOS提供了一组基于信号灯的用于任务间同步和通讯的函数。SEM模块提供了一组用于访问信号灯对象的函数。SEM对象是计数信号灯(countingsemaphores),既可以实现任务同步,也可以实现互斥访问。使用方法:计数信号灯对象有一个内部计数器,计数值对应资源的有效性,如果计数值大于0,任务在请求信号灯时不会阻塞。4.6信号灯(2)创建和删除:动态创建和删除,SEM_create,SEM_
2、delete配置工具创建SEM_pend:SEM_pend用于等待一个信号灯。如果信号灯计数值大于0,则SEM_pend只是简单的将计数值减1并返回。否则,SEM_pend等到另一个线程调用SEM_post触发(post)这个信号灯(即释放资源)。SEM_pend函数的超时参数允许任务等待一段时间,也可以无限等待(取值SYS_FOREVER),或不等待(取值0)。SEM_post:给一个信号灯发信号(signal),如果有一个任务正在等待这个信号灯,SEM_post将这个任务从信号灯队列中移去,并将它放入就绪任务队列等待调度。如果
3、没有任务等待这个信号灯,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/B
4、IOS通常使用其中一个定时器作为系统时钟(systemclock)源。CLK模块和CLK对象:CLK模块使用片上硬件定时器可以实现接近CPU指令周期的时间分辨率。在配置工具中指定系统时钟参数,还可以添加更多的CLK对象在每次定时器中断时调用函数。4.8定时器、中断和系统时钟DSP/BIOS两种计时方式(1)高、低分辨率计时(2)系统时钟高分辨率计时:timer的计数值低分辨率计时:时钟中断的次数,时钟HWI中加1系统时钟(在在配置工具中设置):默认低分辨率计时和系统时钟,系统时钟还可由其它事件驱动。系统时钟驱动PRD模块。周
5、期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_
6、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周期函数管
7、理器和系统时钟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
8、、24和36,那么PRD_swi每4个系统时钟计数(tick)时运行一次,而不是6个tick。当建立一个PRD对象时,一个PRD_swi对象自动加入到SWI管理器下4.9.1调用PRD对象的函数(2)PRD_swi运行时的操作:周期函数的运行是延迟
此文档下载收益归作者所有