stm32死机问题

lin111000713 2013-08-24 09:44:35
为什么在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[n];

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

//2.冒泡排序法返回中点值,最大值,最小值
for (j=0;j<n-1;j++)
{
for (i=0;i<n-j-1;i++)
{
if ( value_buf[i]>value_buf[i+1] )
{
temp = value_buf[i];
value_buf[i] = 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];
}
...全文
637 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin111000713 2013-09-02
  • 打赏
  • 举报
回复
char最大是125。。
u010003037 2013-09-02
  • 打赏
  • 举报
回复
最大应该是127
jeffkuang_2005 2013-08-30
  • 打赏
  • 举报
回复
char 最大只有256
lin111000713 2013-08-26
  • 打赏
  • 举报
回复
是啊,呵呵。。
zhujinqiang 2013-08-26
  • 打赏
  • 举报
回复
已经解决了啊?
lin111000713 2013-08-26
  • 打赏
  • 举报
回复
就是把char count,i,j,temp; 里面的char类型改为int类型程序 就能正常执行了!!
xqhrs232 2013-08-25
  • 打赏
  • 举报
回复
引用 4 楼 lin111000713 的回复:
感谢各位前辈的指点,问题解决了!
也不分享一下,怎么解决的!
lin111000713 2013-08-25
  • 打赏
  • 举报
回复
感谢各位前辈的指点,问题解决了!
dceacho 2013-08-24
  • 打赏
  • 举报
回复
i,j溢出了,900数据量 但i,j是char型的
咕噜咕噜斯基 2013-08-24
  • 打赏
  • 举报
回复
建议楼主以后对非特殊计数用的变量定义成 unsigned 类型. 出错了容易被编译器警告发现. RAM 足够的话, 尽量统一变量类型为 32bit 的 int/long. 在 32bit CPU 下, 考虑到内存对齐, char 不会比 int 好.
咕噜咕噜斯基 2013-08-24
  • 打赏
  • 举报
回复
楼上说的对. 你这个 for 变成死循环了.
 
for(i = 0; i < n; i++) // i: char, n: int
{
        // i 从 0 到 127, 再从 -128 到 -1, 然后重复 0->127->-128->-1->0......
        value_buf[i] = value_pre[i];
}

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧