OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7008|回复: 9

emwin+ucos3:GRAPH波形图使用GRAPH_DATA_YT_AddValue画点到一定程度时会死机进入HardFault_Handler

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-7-26
在线时间
16 小时
发表于 2020-8-28 18:00:51 | 显示全部楼层 |阅读模式
6金钱
使用了DMA中断向窗口发送消息,将数据指针发送给窗体(大概20ms中断一次,把200个数据使用一个static全局数组暂存,消息指针指向这个数组,发送给窗口)
窗口接收消息后,绘画每80个数据画一个点   GRAPH_DATA_YT_AddValue(tmp_value);                 //tmp_value为static全局变量,用来累加数值,达到80个后求均再写入数据对象
波形可以正常显示,但连续写入四分钟左右后将会进入HardFault_Handler

调试进入HardFault_Handler前会进入到OSStartHang


代码如下:
界面创建时:
      data = GRAPH_DATA_YT_Create(GUI_YELLOW, 231, YT_data, 0);  //创建数据对象,data为static全局变量, YT_data为static I16 YT_data[231];
      GRAPH_AttachData(hItem, data);                                                //将数据对象加入波形图中
      GRAPH_DATA_YT_SetAlign(data, GRAPH_ALIGN_LEFT);                //波形从左出现

adc.c文件中
//DMA中断
      void DMA2_Stream0_IRQHandler(void)
     {
          int i;
          int j = 0;
          int value = 0;

          OSIntEnter(); //进入中断

          msg.MsgId = WM_GET_ADC_VALUE;               //msg为static全局变量

          if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0))  //判断DMA传输完成中断  
         {
               DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0);
  
               //400个数据每两个压缩成一个
               for(i=0; i<400; i++)
              {
                    value += DMA_value;
   
                    if(i%2 == 1)
                   {
                       send_value[j++] = value / 2;
   
                       tmp_value = 0;
                    }
   
              }
  
              msg.Data.p = (const void *)send_value;               //send_value为static全局变量,static uint16_t  send_value[200] = {0};
              WM_SendMessage(g_PWin[MAIN], &msg);
  
              DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TC); //清除中断标志
  
        }

   
        OSIntExit();  //退出中断  
}


//WM_GET_ADC_VALUE消息执行
     value_data = (uint16_t *)pMsg->Data.p;

     for(i=1; i<=200; i++)
     {
         count++;                                            //计数值++
         tmp_value += value_data[i-1];              // tmp_value为static变量。用于累加数值
      
        if((count % 80) == 0)
        {
             tmp_value /= 80;
      
              GRAPH_DATA_YT_AddValue(data, tmp_value);

          }
     }



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-7-26
在线时间
16 小时
 楼主| 发表于 2020-8-28 18:01:28 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-8-29 02:00:15 | 显示全部楼层
帮顶
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-7-26
在线时间
16 小时
 楼主| 发表于 2020-8-29 15:17:08 来自手机 | 显示全部楼层
呜呜呜
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-13
在线时间
11 小时
发表于 2020-12-1 15:56:05 | 显示全部楼层
我也死机了
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2019-11-13
在线时间
11 小时
发表于 2020-12-1 15:57:09 | 显示全部楼层
楼主后来找到解决方法了吗
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-7-26
在线时间
16 小时
 楼主| 发表于 2020-12-8 16:43:13 | 显示全部楼层
hdchenwenhao 发表于 2020-12-1 15:57
楼主后来找到解决方法了吗

解决了,我的是因为ucos的开辟任务栈不够大,所以导致死机
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-5-9
在线时间
22 小时
发表于 2020-12-25 09:48:28 | 显示全部楼层
话说加看门狗没用吗
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-7-26
在线时间
16 小时
 楼主| 发表于 2020-12-28 09:28:57 | 显示全部楼层
YuXuan1001 发表于 2020-12-25 09:48
话说加看门狗没用吗

你总不能一出问题就复位吧,就好像你玩手机,一卡他就给你重启,看你气不气,还是想从根本上解决问题
回复

使用道具 举报

5

主题

133

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1775
金钱
1775
注册时间
2015-3-13
在线时间
270 小时
发表于 2022-8-1 22:10:07 来自手机 | 显示全部楼层
楼主的所有的任务堆栈总共多大?我的所有任务堆栈总共8KB,还是会进入hardfault
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 08:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表