小编Mac*_*cit的帖子

如何避免使用"extern"在C中的多个文件之间共享实例?

我在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)

c embedded avr

3
推荐指数
1
解决办法
305
查看次数

标签 统计

avr ×1

c ×1

embedded ×1