现在,在嵌入式产品的研制中,等级低微处理器软件多选用裸机开发形式完成。在这种开发形式中,常有如下需求:
(1) 在阅历特定的时间段后,履行特定操作;
(2) 依据给定周期履行特定操作。
传统的作法是使用前后台方法:设定硬件定时器,使其在后台以特定周期对各相关操作的标志变量作计数操作;前台则不断对各标志变量巡回查询,若发现标志变量到达预订值,则履行特定操作。可见,上述需求需直接操作硬件定时器完成,其进程繁琐,且需求用户对相关硬件有深化了解。因而,本文规划、完成了一种使用方便的低端体系时钟管理器。
本时钟管理器适用于可供给至少一个硬件定时器的处理器。其为用户供给了有利、友爱的裁剪途径,以满意不同方针体系的实际需求。经过裁剪,该时钟管理器的方针代码最小可至100B以下,最大也不超越1KB。
时钟管理器在完成中,将与硬件密切相关的部分组成一独立模块(文件)。针对不同的方针体系处理器,替换该模块即可。为使表述不过笼统,本文以8051系列单片机为方针体系处理器、C51为东西言语论述该嵌入式时钟管理器的规划与完成。
1 规划

该时钟管理器模块(文件)结构如图1所示。
(1) configClk.h界说了有关体系裁剪、装备的可调参数,经过对configClk.h中相关宏参数的装备,即可完成对该时钟管理器体系的装备和裁剪。
(2) clk_impl.*功能模块用来封装方针体系的一个硬件定时器,以屏蔽不同处理器间的硬件差异,起到HAL(HardwareAbstractLayer)效果。体系时钟在此构建。
(3) clk.*模块在clk_impl.*供给的HAL基础上进一步封装,经过一个钩子(Hook)函数,为体系供给时钟脉冲,且脉冲宽度可调(装备configClk.h中的相关宏参即可)。
(4) WdLib.*模块为用户使用供给多个软件定时器。
2 完成
2.1硬件定时器的底层封装
硬件定时器底层封装在图1所示的clk_impl.*中完成。其间界说了一个初始化接口函数和一个定时器中止的ISR(InterruptServiceRoutine)。令选用的硬件时钟为定时器0(可在configClk.h中装备)。
(1) 初始化接口函数void_clkInit(void){}
用户经过调用该接口函数,可周期性地履行相应的ISR—clkTick_ISR,然后构成逻辑上的体系时钟。别的,本接口函数不为用户直接拜访,而在上层模块clk.*中被调用。
(2) 定时器0的ISR—clkTick_ISR
voidclkTick_ISR(void)interrupt1usingREG_GRP_FOR_
SYS_CLK{}
其间:REG_GRP_FOR_SYS_CLK为界说于configClk.h中的可调参数,用来设定本ISR的作业寄存器组。