目前,在嵌入式产品的研发中,低档微处理器软件多使用裸机研发模式构建。在这种研发模式中,常有如下市场需求: (1)在经历特定的时间段后,继续执行特定操作者; (2)根据等价周期继续执行特定操作者。 传统的作法是利用前后台方式:原作硬件定时器,使其在后台以特定周期对各涉及操作者的标志变量不作计数操作者;前台则大大对各标志变量巡回演唱查找,若找到标志变量超过预计值,则继续执行特定操作者。
可见,上述市场需求须要必要操作者硬件定时器构建,其过程繁复,且必须用户对涉及硬件有了解理解。因此,本文设计、构建了一种使用方便的低端系统时钟管理器。 本时钟管理器限于于可获取最少一个硬件定时器的处理器。
其为用户获取了有益、友好关系的剪裁途径,以符合有所不同目标系统的实际必须。通过剪裁,该时钟管理器的目标代码大于可至100B以下,仅次于也不多达1KB。 时钟管理器在构建中,将与硬件密切相关的部分构成一独立国家模块(文件)。针对有所不同的目标系统处理器,替换该模块才可。
为使阐释不过抽象化,本文以8051系列单片机为目标系统处理器、C51为工具语言阐释该嵌入式时钟管理器的设计与构建。 1设计 该时钟管理器模块(文件)结构如图1右图。
(1)cONfigClk.h定义了有关系统剪裁、配备的固定式参数,通过对configClk.h中涉及宏参数的配备,才可构建对该时钟管理器系统的配备和剪裁。 (2)clk_impl.*功能模块用来PCB目标系统的一个硬件定时器,以屏蔽有所不同处理器间的硬件差异,起着HAL(HardwareAbSTractLayer)起到。系统时钟在此建构。
(3)clk.*模块在clk_impl.*获取的HAL基础上更进一步PCB,通过一个钩子(Hook)函数,为系统获取时钟脉冲,且脉冲宽度固定式(配备configClk.h中的涉及宏参才可)。 (4)WdLib.*模块为用户应用于获取多个软件定时器。 2构建 2.1硬件定时器的底层PCB 硬件定时器底层PCB在图1右图的clk_impl.*中构建。其中定义了一个初始化接口函数和一个定时器中断的ISR(InterruptServiceRouTIne)。
令其搭配的硬件时钟为定时器0(可在configClk.h中配备)。 (1)初始化接口函数void_clkInit(void){} 用户通过调用该接口函数,可周期性地继续执行适当的ISRclkTick_ISR,从而构成逻辑上的系统时钟。另外,本接口函数不为用户必要采访,而在上层模块clk.*中被调用。 (2)定时器0的ISRclkTick_ISR voidclkTick_ISR(void)interrupt1usingREG_GRP_FOR_ SYS_CLK{} 其中:REG_GRP_FOR_SYS_CLK为定义于configClk.h中的固定式参数,用来原作本ISR的工作寄存器组。
2.2时钟脉冲的获取 时钟脉冲在图1右图的clk.*中构建。 本文获取三个用户接口函数和一个用户可改动、但不能调用的钩子函数(clkTick_ISR_hook仅有能在clkTick_ISR中被调用)。其用户模块声明如下: externvoidconstructClk(void); externvoiddestructClk(void); externUINT8getClkRate(void); 其中:constructClk借以建构系统时钟,要用于本文所述的时钟管理器,须要首先通过调用_clkInit(定义于clk_impl.*模块)构建对本函数的调用;destructClk借以解析至此建构的系统时钟;getClkRate借以提供系统当前的时钟节奏亲率(即定义于configClk.h中的宏SYS_CLK_RATE的当前值)。
clkTick_ISR_hook由系统声明,用户可改动其定义,其最后仅有为系统不作周期性调用。用户可将自己须要展开的周期性操作者敲于其中,后面描述的软件定时器的城主例程(wdDaemon)正是置放此处而被周期调用。由于置放其中的操作者将在中断继续执行,所以这些操作者不应尽量结尾、省时。
本文关键词:嵌入式,开发,经验,时钟,管理器,的,设计,大阳城游戏官方网站,与
本文来源:大阳城游戏官方网站-www.lifesciencesag.com