[求助] stm32很奇怪的问题

newsa111   2014-3-12 16:43 楼主
我在做一个数据处理的问题,程序基本可以了,但是加入一个滤波函数f1()的调用后,数据就全乱了,之后把这个函数调用改成紧紧只是调用,不对数据对象进行任何操作,数据任然是乱的,但是一去掉这段调用,数据就正常了,不知道是怎么回事。大概是下面这样的情况,麻烦大师帮忙看看
func()
{
....
a = f1(100);
a = f2(b);
....
}

回复评论 (10)

实在没有看懂是什么意思,好好看看是不是堆栈问题或全局变量不对,仿真一下应该能找到原因。
我的博客
点赞  2014-3-12 16:47
引用: zhaojun_xf 发表于 2014-3-12 16:47
实在没有看懂是什么意思,好好看看是不是堆栈问题或全局变量不对,仿真一下应该能找到原因。

我这个是处理数据的,a是连续输出的,就是说不加a = f1(100);这段,a 出来的数据是正常的,如果加了这段代码,出来的数据就不正常了,我也考虑到了堆栈,但是加大了堆栈,也还是不行,我用的是stm32f407的,程序本身内存消耗就几十k左右
点赞  2014-3-12 16:55
还是仿真吧,进去看看,那个地方修改了数据。
我的博客
点赞  2014-3-12 17:12
1. 看滤波函数是否确实没有处理数据;
2. 看滤波这一段是不是耗费了太多时间,虽然不改变数据本身,但是时间占用导致循环的时候数据错误。
construction complete!
点赞  2014-3-12 19:15
最好的办法就是仿真,或者用排除法,把那个函数调用从空函数开始,一句句加上去,看到那一部分出了问题。我感觉会是参数指针之类的问题吧
点赞  2014-3-12 21:06

《Google Android开发入门与实战》PDF和源码下载

真是没太看明白。
51嵌入式,嵌入式开发的家园!51嵌入式官方QQ群52497844,欢迎爱好者加入。
点赞  2014-3-12 21:10
引用: zqjqq88 发表于 2014-3-12 19:15
1. 看滤波函数是否确实没有处理数据;
2. 看滤波这一段是不是耗费了太多时间,虽然不改变数据本身,但是时 ...

你说的很对啊,我调试发现这个函数耗时比较长,导致数据混乱,经过调高主频后,数据恢复正常,但是再继续加滤波函数,或者调高滤波对象的长度(相当于内存大了)或是再加滤波,又会出现这种情况,调试仿真发现耗时影响已经没有了,所以怀疑是内存的问题,不知道是不是哪里有内存限制了,我用的是stm32f407vet6,本身耗内存不是很大    Total RO  Size (Code + RO Data)                16012 (  15.64kB)
    Total RW  Size (RW Data + ZI Data)             14824 (  14.48kB)
    Total ROM Size (Code + RO Data + RW Data)      16280 (  15.90kB)

Maximum Stack Usage = 104 bytes + Unknown(Functions without stacksize, Cycles, Untraceable Function Pointers)
我的IROM1的size是100000,IRAM1是20000
是不是stm32哪里有内存限制还是怎么回事
点赞  2014-3-14 11:28
引用: newsa111 发表于 2014-3-14 11:28
你说的很对啊,我调试发现这个函数耗时比较长,导致数据混乱,经过调高主频后,数据恢复正常,但是再继续 ...

建议采用双缓冲或者4缓冲乒乓方式试试,不过牺牲点内存来换取时间~。这个自己综合考虑下平衡~!
construction complete!
点赞  2014-3-14 12:25
引用: zqjqq88 发表于 2014-3-14 12:25
建议采用双缓冲或者4缓冲乒乓方式试试,不过牺牲点内存来换取时间~。这个自己综合考虑下平衡~!

我再次加大了主频,降低了延时的影响,可以了,忘了之前主频没有配到最大
点赞  2014-3-14 15:40
引用: newsa111 发表于 2014-3-14 15:40
我再次加大了主频,降低了延时的影响,可以了,忘了之前主频没有配到最大

还是建议双缓冲吧~主频很高并不是什么好事~你可以都试试~看看效果。
construction complete!
点赞  2014-3-14 17:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复