ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
452092 Топик полностью
MegaJohn (08.10.2013 22:48 - 22:53, просмотров: 57) ответил Илюxa на Friend функция написанная на C.
доступ из вектора в метода класса можно сделать так хедер класса static void irq_func_( void* in_arg ); void irq_func( void ); cpp класса //------------------------------------------------------------------------------ void Cuart::irq_func_( void* in_arg ) { ((Cuart*)in_arg)->irq_func(); } //------------------------------------------------------------------------------ void Cuart::irq_func( void ) { u32 int_id = ((LPC_UART_TypeDef*)reg)->IIR; и обработка } //------------------------------------------------------------------------------ void Cuart::init( void ) { set_new_vector_int( this, irq_func_, UART0_IRQn ); } вызов из вектора //------------------------------------------------------------------------------ void UART0_IRQHandler(void) { callback_irq_arr[ UART0_IRQn ].callback_func( callback_irq_arr[ UART0_IRQn ].cls_p ); #ifdef TNKERNEL tn_int_exit(); #endif } где typedef struct{ func_ptr_param_pvoid callback_func; void* cls_p; }Scallback_irq; #define VECT_INT_QNTY ((u32)EEPROM_IRQn+1) Scallback_irq callback_irq_arr[ VECT_INT_QNTY ] = { 0 }; //------------------------------------------------------------------------------ void set_new_vector_int( void* in_cls, func_ptr_param_pvoid in_func, u32 in_bit_pos ) { IRQn_Type irq_id = (IRQn_Type)in_bit_pos; ASSERT( irq_id >= WDT_IRQn ); ASSERT( irq_id <= VECT_INT_QNTY ); ASSERT( in_func ); ASSERT( callback_irq_arr[ in_bit_pos ].callback_func == NULL ); callback_irq_arr[ in_bit_pos ].callback_func = in_func; callback_irq_arr[ in_bit_pos ].cls_p = in_cls; if( irq_id == ENET_IRQn ) NVIC_SetPriority( ENET_IRQn, 0 ); else NVIC_SetPriority( irq_id, 1 ); NVIC_EnableIRQ( irq_id ); }