1.在类中声明ISP() class SystemObj { public: //................ //类成员函数做中断函数 static void SysTickHandler(void);//必须声明为静态函数!!! public: volatile unsigned int RamTest; union { volatile unsigned char WorkFlag; struct { unsigned char Watchdog: 1;//允许喂狗 unsigned char SysTickFlag: 1;//节拍中断 unsigned char MainLoopFlag: 1;//主循环运行 unsigned char MainWatchdog: 1;//主循环喂狗 }; }; };
2.构造类成员函数 //节拍中断服务程序(类成员函数做中断函数) //static//此处不能加static!!! //类成员变量必须指明实际的类!!!(System.SysTickFlag 不能写成SysTickFlag ) void SystemObj::SysTickHandler(void) { Keyboard.Exec();//"零耗时键盘"消抖及运行命令 System.SysTickFlag = true;//通知主循环节拍中断正常工作 }
3.在stm32f10x_vector.c内的中断向量表内填写需要中断的类成员函数地址 const __root intvec_elem __vector_table[] = { { .__ptr = __sfe( "CSTACK" ) }, __program_start, NMIException, HardFaultException, MemManageException, BusFaultException, UsageFaultException, 0, 0, 0, 0, /* Reserved */ SVCHandler, DebugMonitor, 0, /* Reserved */ PendSVC, // SysTickHandler, &SystemObj::SysTickHandler, //不能用下列写法 // &System.SysTickHandler, WWDG_IRQHandler, PVD_IRQHandler, //.......................... };
注意: &SystemObj::SysTickHandler替换了原先的SysTickHandler 即饶过了stm32f10x_it.c内的空函数SysTickHandler() 用SystemObj::SysTickHandler()替代为新的节拍中断函数
|
|
文章评论(0条评论)
登录后参与讨论