А я сторонник следующей школы:
Код
//terminals.c
#include <ioavr.h>
#include <inavr.h>
#include <string.h>
#include "typedefines.h"
#include "settings.h"
#include "pins.h"
#include "service.h"
#include "terminals_defines.h"
//--------------------------------------------------------------------------------------------------------
//************************************
// Variables
//************************************
struct terminal_data
{
u8_t type;
u8_t cmd;
u8_t view_mode;
u8_t view_time;
u8_t buf[TERMINAL_BUF_SIZE];
u8_t flags;
}terminal[TERMINAL_NUM];
//************************************
// Prototypes
//************************************
u8_t Terminal_Check_Free(u8_t id);
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Проверка - свободен ли терминал id
// 1 - свободен
// 0 - занят
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
u8_t Terminal_Check_Free(u8_t id)
{
return(terminal[id].cmd == TERMINAL_CMD_NOT);
}
Код
//terminals.h
#if !defined( TERMINALS_H )
#define TERMINALS_H
//-----------------------------------------------------------------------------
//************************************
// Variables
//************************************
extern struct terminal_data
{
u8_t type;
u8_t cmd;
u8_t view_mode;
u8_t view_time;
u8_t buf[TERMINAL_BUF_SIZE];
u8_t flags;
}terminal[TERMINAL_NUM];
//************************************
// Prototypes
//************************************
extern u8_t Terminal_Check_Free(u8_t id);
//-----------------------------------------------------------------------------
#endif
Один недостаток - в каждом модуле, где понадобятся ресурсы terminal.c модуля придется подключать хедер и дефайновый хедер.