ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
301597 Топик полностью
Vladimir Ljaschko (24.01.2012 20:31, просмотров: 150) ответил Скрипач на А не накладно? В смысле много-букв-писать-через-указатель-обращаться?
А голова зачем дана? Когда накладно, то инлайнить. Пример управления двумя приводами (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; }