Vladimir Ljaschko (24.01.2012 20:31, просмотров: 166) ответил Скрипач на А не накладно? В смысле много-букв-писать-через-указатель-обращаться?
А голова зачем дана? Когда накладно, то инлайнить. Пример управления двумя приводами (position control=pc) да и прочими автоматами для трех проектов в одном workspace. pc_type pca;
pc_type pcb;
pc_type * pc[2]={&pca,&pcb};
#pragma inline=forced
char GetSensors(char i)
{ switch (i)
{ case 0: return SENSORS1;
default: return SENSORS2;
}
}
void pcFastService(char i)
{ // uchar pow;
pc_type * pcp=pc[i];
// get sensors
pcp->sensors=GetSensors(i);
// count pulses
if ((pcp->sensors ^ pcp->last_sensors)&CLOCK_MASK)
{ pcp->cposition++;
if(pcp->sensors&CLOCK_MASK)
{ if(pcp->rotor_timer > 2) // supress short pulses
pcp->period=pcp->rotor_timer;
pcp->rotor_timer=0;
pcp->period_flag=1;
}
if (pcp->cposition>250)
{ if (!pcp->error)
if (pcp->function)
pcp->error=pcERROR_BIG_PULSES_QTY;
pcp->cposition=pcMAX_POSITION+2;
}
}
if (pcp->rotor_timer<50000)
pcp->rotor_timer++;
......
#pragma vector = TIMER0_COMP_vect
__interrupt void TC0_int_handler ( void )
{
// ON_LED;
BackgroundService();
#ifdef HTIM
MotorsService();
pcFastService(0);
pcFastService(1);
InternalAdcService();
#endif
#ifdef HTIT
MotorsService();
InternalAdcService();
dvFastService();
FanControlService();
#endif
#ifdef HTIP
MotorsService();
#endif
// OFF_LED;
}