OpenEdv-开源电子网

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

adc采集,使用中位滤波,为什么只能采集250次,251就卡死

[复制链接]

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
发表于 2023-12-4 10:30:39 | 显示全部楼层 |阅读模式
5金钱
adc采集,使用中位滤波,为什么只能采集250次,251就卡死,代码:AD_Value[0]= middleValueFilter(250);

uint16_t middleValueFilter(uint16_t N)
{
   uint16_t value_buf[N];
   uint16_t i,j,k,temp;
    for( i = 0; i < N; ++i)
    {
        value_buf[i] = AD_GetValue(10);        //adc通道10
                               
    }
    for(j = 0 ; j < N-1; ++j)
    {
        for(k = 0; k < N-j-1; ++k)
        {
            if(value_buf[k] > value_buf[k+1])
            {
                temp = value_buf[k];
                value_buf[k] = value_buf[k+1];
                value_buf[k+1] = temp;
            }
        }
    }
    return value_buf[(N-1)/2];
}










最佳答案

查看完整内容[请看2#楼]

你定义的是局部变量,栈是不是太小了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-12-4 10:30:40 | 显示全部楼层
你定义的是局部变量,栈是不是太小了
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-4 10:32:58 | 显示全部楼层
卡到这里


/**
  * @brief  This function handles Hard Fault exception.
  * @param  None
  * @retval None
  */
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}
回复

使用道具 举报

10

主题

116

帖子

0

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2021-12-23
在线时间
202 小时
发表于 2023-12-4 10:43:07 | 显示全部楼层
一般都是数组越界,你可以用偶数试试,再用奇数试试
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2023-12-4 11:16:05 | 显示全部楼层

你要会调试 你这个是报错了之后运行到这里了
看这个没什么用
你要看运行到这里的前面一步是在做什么
数组越界可以考虑,把j k 改成全局变量后再运行看看卡住的时候数值是多少
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-4 11:53:51 | 显示全部楼层
电子控2021 发表于 2023-12-4 11:16
你要会调试 你这个是报错了之后运行到这里了
看这个没什么用
你要看运行到这里的前面一步是在做什么

value_buf是这个有8192,这个最大是4095,但他是超过了4095
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-4 11:54:20 | 显示全部楼层
苏九思 发表于 2023-12-4 10:43
一般都是数组越界,你可以用偶数试试,再用奇数试试

value_buf是这个有8192,这个最大是4095,但他是超过了4095
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2021-2-4
在线时间
146 小时
发表于 2023-12-4 17:02:20 | 显示全部楼层
1493146041 发表于 2023-12-4 11:54
value_buf是这个有8192,这个最大是4095,但他是超过了4095

value_buf 8192 你说的是 k的值是8192吧
8192 换算成 二进制是 0010 0000 0000 0000
看起来就是溢出了
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-5 10:13:10 | 显示全部楼层
电子控2021 发表于 2023-12-4 17:02
value_buf 8192 你说的是 k的值是8192吧
8192 换算成 二进制是 0010 0000 0000 0000
看起来就是溢出了

不是k,value_buf是读到adc的值,adc的最大值是4096,但他读到8192
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-5 10:20:19 | 显示全部楼层
把  uint16_t value_buf[N];定义为全局变量,解决了
回复

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2023-11-4
在线时间
12 小时
 楼主| 发表于 2023-12-5 10:21:44 | 显示全部楼层
阿侑kevin 发表于 2023-12-4 10:30
你定义的是局部变量,栈是不是太小了


把  uint16_t value_buf[N];定义为全局变量,解决了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 17:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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