用单片机计算 内存不够

想用单片机双串口接收两组gps数据 然后计算距离 可是内存不够用了 怎么办?求大神

解决方案:
一、在原有的单片机上改动。
1、优化程序,有效果,但效果其实不大。
2 、自己扩展片外的RAM,一来是费硬件的钱,二来是电路要不停的飞线。
二、换一大内存的单片机。比如STC32F103C8T6,三个串口,16K的RAM。
三、减少串口对数据的接收量,比如只检查$GPRMC信息,提取到坐标后就把其他信息丢弃了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-22
我个人还是建议你,换单片机,推荐你个STC90C516AD,有4K的XRAM和256B的IRAM.
1 优化程序,有效果,但效果其实不大。
2 自己扩展片外的RAM,一来是费硬件的钱,二来是电路你要不停的飞线,飞线还要讲求好工艺,不然也会出问题。
所以,你就不如换一个大内存的单片机,就像我推荐的那个。追问

我用的是12c5a60s2芯片,keil编译就不能通过

追答

抱歉,下午有事,没及时回答你,我想问一下,你说的编译不能通过是什么意思?如果编译不能通过的话,就不一定是内存的事,还有可能是你程序的事。
最好把你编译不能通过的信息发我看一下

追问

先谢谢您耐心的为我解答!!!

追答

兄弟,我先教你看明白几个数据先:

data = 9.3,data 的空间一共256个,你只用了9.3个

xdata = 169,60S2的xdata 一共1024个,你只用了169个。

所以,你的程序,不是内存不够,你的内存还早着用完呢。

 

说句题外话,可能说重了点,你别生气:做技术的,一定要把英语学好,不用说什么口语,听力,之类的,但是你的单词要认识。

 

如果你认识单词,那么这句话你就猜出来了:

warning C650:....意思是Keil软件的许可码错误,让你更新一下许可码。

你的Keil或者没有破解,或者是破解了又过期了,所以导致你只能编译2048字节的代码,而你现在的代码是 4422个,所以告诉你,编译不了。

 

你自己重新破解一下吧。

我用附件上传了个注册机,但是是Keil 4的,如果你的不是Keil 4,你就自己去找破解的方法吧。

本回答被提问者和网友采纳
第2个回答  2013-07-22
扩大单片机的ram是肯定的,比如STC12C5A60S2单片机外扩62256,就能得到32k的RAM。
换大容量的单片机,比如STC32F103C8T6,三个串口,16K的RAM。
减少串口对数据的接收量,比如只检查$GPRMC信息,提取到坐标后就把其他信息丢弃了。追问

怎么丢弃其他信息啊?

追答

最简单的就是检查GPS信息头,把不需要的GSA、GSV、VTG等信息放弃了,只接受有坐标的GGA、RMC或者GLL信息。

第3个回答  2013-07-22
优化计算过程, 能用移位就用移位。不要用单片机做乘除。追问

a=b*1000;怎么移位?

追答

a=b*(1024-24)=b*(1024-16-8)=b<<10-b<<4-b<<3

第4个回答  2013-07-22
用一片RAM扩展单片机的内存空间。

需加硬件。追问

具体怎么弄啊 ?

追答

扩展片外的RAM太麻烦了,还不如换一个XRAM大的单片机,例如STC 60S2
需要有头文件,否则编译不过。

用单片机计算 内存不够
1、优化程序,有效果,但效果其实不大。2 、自己扩展片外的RAM,一来是费硬件的钱,二来是电路要不停的飞线。二、换一大内存的单片机。比如STC32F103C8T6,三个串口,16K的RAM。三、减少串口对数据的接收量,比如只检查$GPRMC信息,提取到坐标后就把其他信息丢弃了。

51单片机定义数组太大RAM不够用如何扩展?
选用内存比较大的单片机或按8080总线扩展内存 不管是片上256B以外的内存还是外扩内存,编程中变量前都要加xdata 修饰 其实你只要用xdata 修饰,编译就能通过,但如果你实际上没有扩展内存,运行时才会出错

stm8s003单片机写OLED的代码内存不够怎么办
1,修改优化等级,如下图所示,这样会优化掉无关的函数,将代码优化到最大程度2,如果代码有多个数组,而ram实际空间不够使用的时候,修改下面的参数,最大修改为0xfff。3,当二维数组定义完报错,无法容纳的时候,在数组前面加上NEAR可解决报错例如:NEAR u8 buff[10][10] = {***};4,当代码还是...

在单片机中怎样计算程序占用的RAM空间?
如果是用汇编语言编写程序,使用那些RAM单元,是由编程者自己安排的;那么占用的RAM空间,编程者就可以很容易的计算出来。如果是用C语言编写程序,使用那些RAM单元,编程者就不知道了;不同的编译软件、不同的编译条件,很复杂。必须由编译软件给出报告才能知道。

想用51单片机做读SD的装置,需要定义一个512个字节的数组,ram不够,怎么...
ram不足是51的一大缺陷。不知你用的什么厂家的51,AT,STC?如果是老AT的51需要通过P0,P2外扩RAM,占用io多也很不经济 所以建议选用STC的stc12c5a60s2这个型号,集成1KB的外部RAM,60k的FLASH ROM. 淘宝7元左右。比较经济。当然这所谓的1KB的RAM虽然集成在单片机片内,但它本质还是外部RAM.所以在c中...

怎么看单片机自带的ROM\/RAM够不够用
这个主要是看所做项目大小,程序大小与ROM挂钩,从程序量上估计ROM是否够用,变量的多少与RAM有关,从变量的多少估算RAM是否够用。单片机运行是不占用或很少占用内存的。

89C52单片机的内存8K不够用了怎么办?
答:不行.2.如果用扩展外部存储芯片,那芯片型号是什么,程序又怎么写?答:可以扩展.典型的并行存储芯片一般都可.电路非常经典.程序设计上做配合,参考Keil的Band模式.另外,要不直接扩一个足够大的外部程序芯片算了.3.如果改用大内存的单片机芯片,那程序又不一样了吧?答:只要单片机还是51系列的,程序...

51单片机内存不足加片外存储后程序烧录问题
如果使用外部存储器,需要单独烧录,内部程序存储器可用可不用。不建议这样操作,原因是虽然可以多学一点知识,但这种知识(外扩程序存储器期)太小儿科了,将来一次也用不到,现在大容量单片机比比皆是,换个型号就解决了。你这样做如用PCB得重绘重新制板,成本(包括时间成本)提高很多,外扩存储器由于...

STC12单片机烧写提示程序空间已满
意思就是程序空间超了,比如你单片机ROM程序存储空间是8K,你HEX烧写文件超过8K,下载器会把HEX 8K数据下载到单片机其余的数据丢掉了,这样程序下载到单片机肯定不正常的了

kill5报错内存不够
找出\/proc\/\/oomscore最大者并将之禁用掉当内存不足时不至于出现太严重问题,有点壮士断腕的意味,在kernel2.6,内存不足将唤醒oomkeli5为了保护重要进程不被oomkeli5掉,我们可以在echo17>\/proc\/\/oomadj,17表示禁用OOM我们也可以对把整个系统的OOM给禁用掉。keiluvision5简称为keil5,是一款功能强大...

相似回答