原创 STM32的C++类成员函数做中断函数的三个主要步骤

2008-2-10 04:41 6019 10 7 分类: MCU/ 嵌入式
hotpower 发表于 2008-2-10 04:34 ST MCU ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: STM32的C++类成员函数做中断函数的三个主要步骤


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()替代为新的节拍中断函数


200821043111632.gif

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条