我在c中制作了一个计时器库来启动计时器,停止它......等等.我使用这个lib为不同的事件制作许多计时器.对于每个事件,我应该创建一个新的计时器实例.我使用一个带有串行通信库,一个用于键盘库.现在重点是timer_interrupt_handler(New_timer* timer)必须通过微控制器的timer1中断程序为每个实例调用一个函数,该程序保留在主文件中.为此,计时器的实例必须是外部类型.有没有办法避免在这种情况下使用extern.
timer_tick.h文件
typedef enum state{STOPPED=0, RUNNING, TIMEOUT} Timer_state;
typedef struct {
unsigned char volatile state;
unsigned int volatile ticks;
unsigned int volatile timeout_ticks;
}New_timer;
Run Code Online (Sandbox Code Playgroud)
timer_tick.c文件
#include "timer_tick.h"
void start_a_timer(New_timer* timer)
{
timer->state = RUNNING;
timer->ticks = 0;
}
void stop_a_timer(New_timer* timer)
{
timer->state = STOPPED;
}
void timer_interrupt_handler(New_timer* timer)
{
if(timer->state==RUNNING)
{
if(timer->ticks < timer->timeout_ticks)
timer->ticks++;
else
timer->state = TIMEOUT;
}
}
Run Code Online (Sandbox Code Playgroud)
main.c中
// timer1 interrupt routine
void timerIsr()
{
timer_interrupt_handler(&timer1);
timer_interrupt_handler(&timer2);
timer_interrupt_handler(&timer3);
timer_interrupt_handler(&timer4);
timer_interrupt_handler(&timer5);
}
Run Code Online (Sandbox Code Playgroud)