www.openedv.com
您好,欢迎您!    会员注册 | 登入 
公告:欢迎访问www.openedv.com开源电子网,开源共享共同进步,祝您新年快乐,万事如意!
设为首页 | 加入收藏
论坛首页 » 51单片机 前往: 
为什么定义的数组超过60,会溢出呢?
发表人 内容
[Down] [Up]
[楼主位] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

   做了两个星期的GSM,感谢群里的一个网友提供的51GSM温度报警器,我想实现的的功能可远不止这些,我想在他的框架里面做一个GSM+NRF24L01的远程无线控制器,可以接收手机发过来的信息,然后根据命令来选择哪个继电器的开关,控制哪个房间的电器等,现在温度报警器已经基本完成,现在遇到的问题是 修改里面定义的
char RxBuf[RxBuf_N]; //定义串口接收数据缓冲区
uchar RxPoint; //Rx缓冲区指针

#define RxBuf_N 60 //定义接收缓冲区大小为50bytes //问题出在这里,为什么不能定义超过60的数据缓冲器呢?
如果不改的话,发送过来的短信可能会接收不完全,这样就读取不了结束的字符 OK了,

下面的这个函数返回的值是要查找的值吗?请各位大哥回答下,谢谢,小弟C语言不太行,只能做基本的
比如我要在LookFor_Str(RxBuf, "OK"),在RxBuf里面查找OK,返回的值是OK吗?
我能否在这样判断if(p=="OK") 然后返回一个数值呢?



//查找字符串,在s中查找t
//返 回 值: s_temp(t在s中的位置)成功 0失败
char *LookFor_Str(uchar *s, uchar *t)
{
uchar    *s_temp;       
uchar    *m_temp;       
uchar    *t_temp;     
if (s == 0 ||t == 0) return 0;
for (s_temp = s; *s_temp != '\0'; s_temp++)
{
m_temp = s_temp;
for (t_temp = t; *t_temp == *m_temp; t_temp++, m_temp++);
if (*t_temp == '\0') return s_temp;
}
return 0;
}

在贴上源码











这篇文章被编辑了 1 次. 最近一次更新是在 2011/10/30 13:51

[加为好友] 回复 引用回复
[Down] [Up]
[1楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线


图片


这篇文章被编辑了 1 次. 最近一次更新是在 2011/10/30 13:54

[加为好友] 回复 引用回复
[Down] [Up]
[2楼] Tardis


等级:NO
注册时间:
2011/07/17 14:35
文章: 621
离线

因为你没把数组放flash里,加code了放flash里,例如:unsigned char code shit[]={};



Time And Relative Dimension In Space.
[加为好友] 回复 引用回复
[Down] [Up]
[3楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

Tardis 这么快就回复了,谢谢


[加为好友] 回复 引用回复
[Down] [Up]
[4楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

我这就试试,能加为你好友吗?小弟今年也毕业了,准备找工作, 大专生


[加为好友] 回复 引用回复
[Down] [Up]
[5楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

加了CODE的话就不可以改变里面的值了


[加为好友] 回复 引用回复
[Down] [Up]
[6楼] fengye1966


等级:NO
注册时间:
2011/10/27 15:13
文章: 53
来自: 北京
离线

这是STM32开发板配套程序里的问题吗?


这篇文章被编辑了 1 次. 最近一次更新是在 2011/10/30 14:51

[加为好友] 回复 引用回复
[Down] [Up]
[7楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

肯定不是的,我用51来搞的,等熟悉了就用STM32来搞,hh


[加为好友] 回复 引用回复
[Down] [Up]
[8楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

请原子老大回答下,现在我定义为idata又可增加到100


[加为好友] 回复 引用回复
[Down] [Up]
[9楼] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8089
来自: 湖南
在线

回复【8楼】 zhuosifan :
---------------------------------
51我也不太熟.
不过这东西,51就一两百个字节的内存.还要划分一部分作为堆栈.定义数组大了,影响到堆栈区,肯定就死的.
建议使用大内存的51,stc系列的,应该可以.(至少1K内存吧.)
idata的说明见:http://wenku.baidu.com/view/341c91c62cc58bd63186bd7c.html



我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
[Down] [Up]
[10楼] zhuosifan

等级:NO
注册时间:
2011/03/22 22:50
文章: 87
离线

谢谢老大了!我明天接着弄


[加为好友] 回复 引用回复
[Down] [Up]
[11楼] luomcs51

等级:NO
注册时间:
2011/11/09 17:35
文章: 13
离线

我也在解决这个问题,不知兄弟解决了没有, 我修改过定义值  最多就是收个64位,再多就不行


[加为好友] 回复 引用回复
[Down] [Up]
[12楼] zhaoxukiller

等级:NO
注册时间:
2012/01/04 21:11
文章: 1
来自: 吉林
离线

请将target中的memory mode改成 PDATA试试,不过启动速度慢 
另外咋发图啊



努力学习STM32中
[加为好友] 回复 引用回复
 
前往: 

Powered by ALIENTEK工作室 © 粤ICP备12000418号-1