OpenEdv-开源电子网

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

内存池初始化导致ADC采集数据存到BUF里面异常?

[复制链接]

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
发表于 2018-12-13 11:50:18 | 显示全部楼层 |阅读模式
20金钱
  今天我将LED,DMA,I2C,USART,TIMER,MALLOC,ADC,LAN放在一起。因为用到网络通信这块,初始化  my_mem_init(SRAMIN)  的时候,也就是初始化内部内存池,采集的ADC值是存放在一个u16 buf[32]里面,结果取出数据的时候,发现异常,比如取出数组一个buf[0]的时候,发现数值居然是0xc2d3;相当于已经超出ADC采集的最大12位 0xfff,当我屏蔽掉 my_mem_init(SRAMIN) 这个时候,结果正常了。网上关于内存管理,资料很少。请求原子哥或者高手,解答一下我的燃眉之急。谢谢

最佳答案

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

问题解决了,发现是工程里面有BUG。新建一个工程,移植过去就好了。其次就是,内存池管理,分配的空间不要过大,不然也会影响采集的数据存到数组里面有异常。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-13 11:50:19 | 显示全部楼层
问题解决了,发现是工程里面有BUG。新建一个工程,移植过去就好了。其次就是,内存池管理,分配的空间不要过大,不然也会影响采集的数据存到数组里面有异常。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-14 02:30:23 | 显示全部楼层
内存管理和你的ADC没毛关系啊。。。
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-14 08:13:59 | 显示全部楼层
u16 buf[32]是全局变量吗?试试内存管理的数组改小点,但是两者真的没关系啊
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-14 08:46:41 | 显示全部楼层
szczyb1314 发表于 2018-12-14 08:13
u16 buf[32]是全局变量吗?试试内存管理的数组改小点,但是两者真的没关系啊

是全局变量,我也觉得很奇怪,但是确实发生了这个现象。管理的数组改小了,也没用,是不是内存管理导致内存地址和我的buf内存地址有交叉还是什么?
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-14 08:48:05 | 显示全部楼层
正点原子 发表于 2018-12-14 02:30
内存管理和你的ADC没毛关系啊。。。

是啊,我也觉得很奇怪。但是屏蔽掉了内存初始化函数,就正常了。原子哥,能解释一下吗?
回复

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-12-14 09:09:10 | 显示全部楼层
jiangyy 发表于 2018-12-14 08:46
是全局变量,我也觉得很奇怪,但是确实发生了这个现象。管理的数组改小了,也没用,是不是内存管理导致内 ...

地址分配是编译器做的,不会出错啊,你再研究下吧
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-12-14
在线时间
9 小时
发表于 2018-12-14 15:39:39 | 显示全部楼层
你的问题解决了吗?我用F407进行2000Hz采样,DMA传输也发生这个问题,采样值缓存区开始几个值特别大

回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-14 18:32:39 | 显示全部楼层
szczyb1314 发表于 2018-12-14 09:09
地址分配是编译器做的,不会出错啊,你再研究下吧

小哥哥,要不你就把ADC和内存池管理这两节放在一起试试看,看看会不会出现这个问题。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-14 18:33:34 | 显示全部楼层
Lelouch31 发表于 2018-12-14 15:39
你的问题解决了吗?我用F407进行2000Hz采样,DMA传输也发生这个问题,采样值缓存区开始几个值特别大

对,就是采样的值存在buf里面,然后打印buf里面的数值,发现很大。屏蔽了内存池初始化,就正常了。很奇怪的现象
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2018-12-14
在线时间
9 小时
发表于 2018-12-14 21:12:01 | 显示全部楼层
jiangyy 发表于 2018-12-14 18:33
对,就是采样的值存在buf里面,然后打印buf里面的数值,发现很大。屏蔽了内存池初始化,就正常了。很奇怪 ...

160138fptp5mkmtdnk6lst.png 是不是这样子的,我今天中午遇到了,晚上的时候重新看了一下,我定义了两个全局变量数组,晚上的时候把另一个取消了,然后数组中数据就正常了,有可能是因为数组过大,导致数组越界,但是具体原因还是没找到,如果有什么新的发现,还请告知,谢谢你,还是想弄懂为什么出错了。

回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-15 09:10:05 | 显示全部楼层
Lelouch31 发表于 2018-12-14 21:12
是不是这样子的,我今天中午遇到了,晚上的时候重新看了一下,我定义了两个全局变量数组,晚上的时候把另 ...

对的  ADC采集最大也就是12位采集,但是采集的数据存到BUF里面,明显看到BUF里面的数据已经超过0XFFF了。一起查找一下原因,看看具体是哪里问题
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-15 10:42:33 来自手机 | 显示全部楼层
一个是屏蔽内存池管理初始化函数,一个是没有屏蔽内存池管理初始化函数。明显可以看出数组里面的值已经越界了。求解释????
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2106
金钱
2106
注册时间
2017-2-11
在线时间
307 小时
 楼主| 发表于 2018-12-15 10:52:50 来自手机 | 显示全部楼层
jiangyy 发表于 2018-12-15 10:42
一个是屏蔽内存池管理初始化函数,一个是没有屏蔽内存池管理初始化函数。明显可以看出数组里面的值已经越界 ...

两组数据可以看出,屏蔽了内存池管理,ADC采集的数据存到数组里面的值是正常的。
1544842151572.jpg
1544842294743.jpg
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 04:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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