打印
[STM8]

STM8库函数的中断问题

[复制链接]
3703|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 坏小孩~ 于 2015-8-2 19:50 编辑

如图,我一般是在main.c中位域出时间标志位,struct                             //位域出时间平台标志位 {
  unsigned char flag_1mS    :1;
  unsigned char flag_2mS    :1;
  unsigned char flag_4mS    :1;
  unsigned char flag_50mS   :1;
  unsigned char flag_100mS  :1;
  unsigned char flag_500mS  :1;
  unsigned char flag_1S     :1;
  unsigned char flag_2S     :1;

}Time = {0,0,0,0,0,0,0,0};


然后把中断函数写在main.c中,在里面构造时间平台
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);  //清除TIM1溢出标志

  static unsigned char Cnt_1mS = 0;
  static unsigned char Cnt_2mS = 0;
  static unsigned char Cnt_100mS = 0;
  static unsigned char Cnt_500mS = 0;
  static unsigned char Cnt_1S = 0;


  Cnt_1mS++;
  if(Cnt_1mS == 10)
  {
    Cnt_1mS = 0;
    Time.flag_1mS = 1;

    Cnt_2mS++;
    if(Cnt_2mS == 2)
    {
      Cnt_2mS = 0;
      Time.flag_2mS = 1;

      Cnt_100mS++;
      if(Cnt_100mS == 50)
      {
        Cnt_100mS = 0;
        Time.flag_100mS = 1;

        Cnt_500mS++;
        if(Cnt_500mS == 5)
        {
          Cnt_500mS = 0;
          Time.flag_500mS = 1;

          Cnt_1S++;
          if(Cnt_1S == 2)
          {
            Cnt_1S = 0;
            Time.flag_1S = 1;


          }
        }
      }
    }
  }
}


再在主循环里面判断标志位来确定时间,执行任务
for(;;)
  {
    if(Time.flag_500mS == 1)
    {
      Time.flag_500mS = 0;
      LED_Running();
    }


  }


/***********************************分隔线***********************************************/
以前一直是用寄存器的,没有问题,现在改库函数了,报错重复编译。可是stm8s_it.h里面不是声明了中断函数了吗,main.c中我也引用了stm8s_it.h,为什么会这样呢?

位域.png (19.76 KB )

位域.png

调用中断函数.png (17.74 KB )

调用中断函数.png

中断函数.png (15.59 KB )

中断函数.png

stm8s_it_h.png (47.11 KB )

stm8s_it_h.png
沙发
zhou00| | 2015-8-2 20:38 | 只看该作者
看来寄存器和库函数在这方面还是有所区别的。。。

使用特权

评论回复
板凳
坏小孩~|  楼主 | 2015-8-2 21:42 | 只看该作者
zhou00 发表于 2015-8-2 20:38
看来寄存器和库函数在这方面还是有所区别的。。。

是呀,我也是刚开始使用库函数,我发现如果在stm8s_it.c中注释掉调用的中断函数就可以,不过还有更好的做法吗,总觉得这样做不太好

使用特权

评论回复
地板
dove萝卜| | 2015-8-2 21:56 | 只看该作者
一直用库函数、木发现这个问题。。

使用特权

评论回复
5
坏小孩~|  楼主 | 2015-8-2 22:50 | 只看该作者
我找到原因了,因为我在user文件夹下也放了stm8s_itc.c文件,所以编译时跟FWLib中的stm8s_itc.c重复了。我粗心大意了,刚好此贴可以警示后来者不要犯我这样的错误:P

QQ截图20150802224239.png (7.84 KB )

QQ截图20150802224239.png

使用特权

评论回复
6
香水城| | 2015-8-3 10:51 | 只看该作者
找到问题就好。:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

1

粉丝