OpenEdv-开源电子网

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

stm32死机问题

[复制链接]

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
发表于 2013-8-24 09:42:23 | 显示全部楼层 |阅读模式
             为什么在VC++6.0调用这个函数没有问题,但是在stm32调用这个函数就死机了?是不是局部变量开的内存太大了??

main函数调用: filter(ram, 900, &max, &min, 1);//返回的最大值是拍好序的第n-1-1,最小值为排好序的第1个   
//主函数调用的似乎在这里会死机不懂为什么

 

/*******************************************************
* 函数名称:Filter_MaxMin
* 功    能: 实现软件滤波,并且取出指定的最大和最小值
* 入口参数:  value_pre[]:原始数据
     n:原始数据的个数
     *pMax:要返回的最大值
     *pMin:要返回的最小值
     max_min:要返回值的范围。默认是第一个和倒数
* 出口参数: 原始数据的中间值
* 范    例:filter(ram, 10, &max, &min, 0) //返回的最大值是拍好序的第n-1,最小值为排好序的第0个
   filter(ram, 10, &max, &min, 1);//返回的最大值是拍好序的第n-1-1,最小值为排好序的第1个        
* 说    明:本滤波程序没有改变原始数据,内部有复制原始数据的操作
* 其    他:
*******************************************************/
 //总体思路:1. 对原始数据进行复制
 //      2.冒泡排序法返回中点值,最大值,最小值 
 //      3.
 char Filter_MaxMin(const char value_pre[], int n, char* pMax, char* pMin, int max_min)
 { 
  char count,i,j,temp;
  char value_buf[1000];

 //总体思路:1. 对原始数据进行复制
  for(i=0; i<n; i++)
  {
  value_buf = value_pre;
  }

 //2.冒泡排序法返回中点值,最大值,最小值 
  for (j=0;j<n-1;j++)
  {
   for (i=0;i<n-j-1;i++)
   {
    if ( value_buf>value_buf[i+1] )
    {
     temp = value_buf;
     value_buf = value_buf[i+1];
     value_buf[i+1] = temp;
   }
  }
 }

  *pMax = value_buf[n-1-max_min];
  *pMin  = value_buf[max_min];

 return value_buf[(n-1)/2];
 }

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

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-8-24 09:48:46 | 显示全部楼层
 char value_buf[n];  这个 不觉得 有问题吗, 你能编绎通过?
1-1
回复 支持 反对

使用道具 举报

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
 楼主| 发表于 2013-8-24 10:52:36 | 显示全部楼层
回复【2楼】mygod:
---------------------------------
后面改成char value_buf[1000];  但是还是会死机的!!
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-8-24 13:39:47 | 显示全部楼层
回复【3楼】lin111000713:
---------------------------------
超过256的数组 不要在函数内部 声明,用全局变量
1-1
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-8-24 14:26:33 | 显示全部楼层
回复【4楼】mygod:
---------------------------------
楼上说得对。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
 楼主| 发表于 2013-8-24 14:38:35 | 显示全部楼层
回复【4楼】mygod:
---------------------------------
(PC机上)局部变量是放在栈上,全局变量是放在静态存储区,但是貌似stm32上是这样存放的:FLASH中:Code+RO Data+RW Data,运行的时候:RAM: RW Data + ZI Data,当然还要有堆栈的空间。  S:我不需要改变传入的数组的值,然后如果我开辟一个超过256的数组在RAM区是不是很浪费(这块区域一直被占用着,如果开辟在栈上不会被一直占用)?
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-8-24 16:25:02 | 显示全部楼层
回复【6楼】lin111000713:
---------------------------------
PC机是带 系统的,系统会分配 每个进程 2M或更多的栈空间,但是 STM32 最大RAM也就 几十K,
1-1
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-14 13:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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