首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[讨论]ram不够用

[讨论]ram不够用

请各位帮忙,我用MC68HC908JB16芯片,它的RAM只有384byte,我现在要用一个算法,用C语言做,光算法的变量就占了350byte最少,现在有什么办法,在不换芯片的前提下实现

不断学习,摸索中进步!
1.优化算法。
2.将中间变量存储于FLASH中。
3.外加EEPROM。
海纳百川  有容乃大
多谢版主,我在main()写了简单的小程序测了一下 ,怎么最多只能申请200byte变量。那其它剩余的空间干吗了,
我测试时候没有变量被优化的,当申请到380byte时debug初步可以看见给变量分配空间,但程序运行结果不正确,
不断学习,摸索中进步!
怎么“申请”变量?
海纳百川  有容乃大
就是定义了局部变量,比如:unsigned char a[300];
还有请教版主:start08.c具体干什么工作?会不会占用RAM空间?
不断学习,摸索中进步!
start08.c应该不会占用RAM。其余的RAM应该是被其他的全局变量和堆栈占用了。你可以试着调整一下堆栈的大小。
海纳百川  有容乃大
我的程序里面没有全局变量的,而且只有main(),在里面定义的变量,
我不明白堆栈大小在那可以调整?在prm看不出哪有,多谢!!!!
不断学习,摸索中进步!
就是在PRM文件中呀,仔细看看...
海纳百川  有容乃大
恩,版主有个不明白的,Z_RAM和RAM在数据寻找方式不同,一 是编译器自动完成的吗?
二 那么定义数据要不要用修饰符区别?
三 局部变量如果没有固定地址可以放到堆栈,那么我可不可以把堆栈大小设置位 384,这样测试,
四 我在申请变量空间大于200时候,在truetime窗口看见数组分配的位置怎么到了I/O register空间的位置,但是CW编译不报错,
不断学习,摸索中进步!
局部变量本身就没有固定的地址,是放到堆栈中的。所以CW编译时可能不报错。你必须注意栈底的位置以及堆栈的大小,不然确实可能出现堆栈溢出的问题。
海纳百川  有容乃大
哎呀,版主,,我在 PRM文件看见stack 的是这样:
.stack 80 R/W 0x100 0x14F RAM
起始地址是 0x0100,在程序truetime'窗口看见 SP 指针复位 FF
怎么越看越感觉不对了,当单步调试程序看见 SP 是递减的,嵌入函数内部时候,SP 的范围会指向 00DB,sp 应该是堆栈指针吧,这样不是跑到栈外的空间了吗?
但是程序解果是正确的。
不断学习,摸索中进步!
你的PRM文件很奇怪呵,哪里来的?标准的PRM文件应该是这样的:

/* This is a linker parameter file for the JB16 */

NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */

SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
ROM = READ_ONLY 0xBA00 TO 0xF9FF;
Z_RAM = READ_WRITE 0x0080 TO 0x00FF;
RAM = READ_WRITE 0x0100 TO 0x01FF;
END

PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
DEFAULT_RAM INTO RAM;
DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM; /* In case you want to use as well, be sure the option -OnB=b is passed to the compiler. */
_DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM;
END


STACKSIZE 0x50

VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */
海纳百川  有容乃大
是啊,我的prm就是这样的和标准的一样,编译自动生成的,我是在分配文件看见的,为什么sp出栈了,结果还正确啊!
不断学习,摸索中进步!
SP是应该递减的,你默认的mode是tiny,所以堆栈会放在zero page的空间内,从0x100地址开始递减。默认分配给堆栈的空间是0x50。
不是啊,我得堆栈看了是从0x14f开始,然后递减的,到100满了,但是就继续减,咋不报错?、
不断学习,摸索中进步!
返回列表