So, I have a huge set of functions for reading inputs from some form source:
ErrCode_t in_func1(t1_t * const data1);
ErrCode_t in_func2(t2_t * const data2);
...
Some trigger functions telling me if I can call the functions above:
TrCode_t tr_func1();
TrCode_t tr_func2();
...
and related functions for recording data:
void out_func1(t1_t const * const data1, const uint32_t handled_error);
void out_func2(t2_t const * const data2, const uint32_t handled_error);
...
There is also a rather complicated algorithm depending on the trigger functions, which decides whether I can call the input function or not. (This is a simplified picture, more than one trigger function and timers provided for each I / O).
This algo, but basically says: If the trigger says yes, call the input function with a pointer to a data variable, check for an error, do some checking, and then pass the pointer to the updated variable for output.
void execute_f1(t1_t * const pData1)
{
if(evalTr(tr_func1()))
{
const ErrCode_t myErr = in_func1(pData1);
const uint32_t myOutErr = evalError(myErr);
out_func1(pData1,myOutErr);
}
}
( evalTr evalError , )
,
void execute_io(???)
. , , .
, , , :
ErrCode_t my_in_func1(void * const pData1)
{
t1_t * const data1 = (t1_t*) pData1;
return in_func1(data1);
}
:
void my out_func2(void const * const data2, const uint32_t handled_error) {...}
, , .
. - , "" execute_io , ?
: barak manos:
system_interface.h
ErrCode_t in_func1(t1_t * const data1);
TrCode_t tr_func1();
void out_func1(t1_t const * const data1, const uint32_t handled_error);
my_code.c
static ErrCode_t my_in_func1(void * const data1)
{
t1_t * const data1 = (t1_t*) pData1;
return in_func1(data1);
}
static void my_out_func1(void const * const pData1, const uint32_t handled_error)
{
t1_t const * const data1 = (t1_t) pData1;
out_func1(pData1, handled_error);
return;
}
typedef ErrCode_t (*inFuncPtr)(void * const);
typedef void (*outFuncPtr)(void const * const, const uint32_t);
typedef TrCode_t (*trFuncPtr)();
execute_io(inFuncPtr inFunc, outFuncPtr outFunc, trFuncPtr trFunc, void * pData)
{
if(evalTr((*trFunc)()))
{
const ErrCode_t myErr = (*inFunc)(pData);
const uint32_t myOutErr = evalError(myErr);
(*outFunc)(pData,myOutErr);
}
return;
}
void do_all_my_work()
{
{
t1_t data1;
execute_io(&my_in_func1, &my_out_func1, &tr_func1, &data1);
}
{
t2_t data2;
execute_io(&my_in_func2, &my_out_func2, &tr_func2, &data2);
}
}
, -. ( , , , , )