ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
452069 Топик полностью
Apтём (08.10.2013 22:03 - 22:15, просмотров: 55) ответил Илюxa на Friend функция написанная на C.
Не, вы что-то странное хотите... 
Обработчик прерывания с extern "C", то бишь на C
Не правильно. Если файл сишный, то его компилируют с це-режиме, а си-компилятор классов и их друзей не понимает - ошибку выдаст. Значит функция плюснутая. extern "C" она для того чтобы линкер указатель на неё в таблицу смог положить. extern "C" void Nuzhnij_Isr_Handler(); class BlaBla_t { friend void Nuzhnij_Isr_Handler(); static void Handler(); public: }; void Nuzhnij_Isr_Handler() { BlaBla_t::Handler(); }
Или как вариант функцию-обработчик прерывания сделать статическим членом класса, но как тогда прописать ее в вектор
В АВР такое делалось без проблем, а тут не хотят они...Но где-то я видел чей-то проект, где в таблице векторов было что-то такое: void (* const g_pfnVectors[])(void) = { /* Core interrupt vectors */ (intfunc)_estack, Reset_Handler, //... (intfunc)&SysTck::ISR, Там то ли стартап был cpp. то ли ещё как-то...
если там все указатели типа void(*p)(void)
Привести к типу не пробовали? P.S. А нельзя ли таблицу векторов в cpp-файле объявлять?