打印

keil c51中RAM的问题

[复制链接]
4922|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
river1972|  楼主 | 2007-4-5 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在KEIL C51中一般来说不需要编程者专门编程来清楚RAM中的内容。但是不方便的是如果有特殊的需要使用到RAM的数据的时候,就很不方便。
请问各位在KEIL C51中如何设置,以保证程序在初始化的时候RAM中的内容不被清除。而是必须依靠使用者来编程清楚。
谢谢

相关帖子

沙发
ayb_ice| | 2007-4-5 15:49 | 只看该作者

随便说说

  你不去写程序清除它,它永远也不会自动清除,但软件仿真时它都会自动清除RAM,KEIL才不会那么贱,一定把你的RAM清除,更何况这种想法也不符合惯例...

使用特权

评论回复
板凳
xwj| | 2007-4-5 15:58 | 只看该作者

LS 错误,Keil默认会编译链接Startup.A51文件,

LZ你应该把这个文件拷到你的工程目录并加入工程,修改这个文件,再编译

使用特权

评论回复
地板
ayb_ice| | 2007-4-5 16:07 | 只看该作者

随便说说

看清楚,人家是不要清RAM,不加Startup.A51即可,我前面已经说的很清楚了.

使用特权

评论回复
5
river1972|  楼主 | 2007-4-5 16:14 | 只看该作者

谢谢两位!

别吵好吗?
事情都是因我而起,讨论技术和气一点。
我一直用ASM对C51不是太熟,再次谢谢两位。
但是我的项目文件没有包含Startup.a51是否可以这样理解如果你不禁止keil就会把这个文件包含进去

使用特权

评论回复
6
ayb_ice| | 2007-4-5 16:18 | 只看该作者

随便说说

没有加就对了...
LZ可以验证一下,注意软件仿真时无论是否有Startup.a51都清RAM...

使用特权

评论回复
7
river1972|  楼主 | 2007-4-5 16:38 | 只看该作者

察看DISASSEMBLY WINDOWS

LS我没有加,但是察看DISASSEMBLY WINDOWS,还是有这一段ASM程序存在。所以才觉得有点问题

使用特权

评论回复
8
ayb_ice| | 2007-4-5 16:44 | 只看该作者

随便说说

  反正我知道程序下载到芯片后是不会有自动清RAM功能的,我总觉得反汇编和源代码有些不一致,一般情况程序有问题搞不定时我才会去用硬件仿真,软件仿真更适合那些与硬件无关的程序如算法等...

使用特权

评论回复
9
river1972|  楼主 | 2007-4-5 16:52 | 只看该作者

不会吧

不会吧!反汇编出来的可是要产生HEX文件的,而且我有硬件仿真确实是清除了RAM的内容,很简单我将0X00-0X7F这一段RAM相加后输出一定是0X00.这段程序就加在MAIN()后面

使用特权

评论回复
10
ayb_ice| | 2007-4-5 16:55 | 只看该作者

随便说说

  那照你这么说,用KEIL写51程序做的项目不能做到热启动了...

使用特权

评论回复
11
xwj| | 2007-4-5 17:07 | 只看该作者

无知者无畏,拜托你别误导新人哦

使用特权

评论回复
12
river1972|  楼主 | 2007-4-5 17:11 | 只看该作者

XWJ正解

XWJ正解,不是不包含STARTUP.A51。而是必须包含,然后修改STARTUP.A51中的关于清除RAM内容的那一段程序。感谢XWJ

使用特权

评论回复
13
river1972|  楼主 | 2007-4-5 17:15 | 只看该作者

我当初的想法是

我当初的想法是在编译器的OPTION中可以将该选项屏蔽掉就可以了。看来是不可以。必须在程序中修改。这一段程序包含了关于对STACK的SETTING.可能KEIL是基于这样的考虑在选项中不可以没有这一段程序。当然在开始的时候不需要清除RAM的用户可能也很少。

使用特权

评论回复
14
ayb_ice| | 2007-4-5 19:40 | 只看该作者

随便说说

  白浪费这么久的口舌...

使用特权

评论回复
15
river1972|  楼主 | 2007-4-5 19:47 | 只看该作者

还真是无知者无畏

LS的

使用特权

评论回复
16
awey| | 2007-4-5 20:00 | 只看该作者

xwj 说得没错

使用特权

评论回复
17
computer00| | 2007-4-5 20:01 | 只看该作者

重新建立工程,会弹出对话筐,问你是否添加启动文件

你要选择yes,然后就会有一个startup.a的文件了,找到里面的内存初始化代码,删除之。

没有这个启动文件的话,keil会自动生成初始化清零RAM的代码。

使用特权

评论回复
18
jueju300| | 2007-4-5 23:41 | 只看该作者

如果怕程序初始化或重启改变重要数据

那用非易失性存储器不是更好?有的单片机直接放在Flash不用的高位就行了 保证丢不了

使用特权

评论回复
19
ayb_ice| | 2007-4-6 07:47 | 只看该作者

随便说说

昨晚我查了一下宝典,对不起我的说法是错误的,误导了大家,正确的说法是:
  如果项目不加Startup.a51文件,编译时会自动加上并一起编译,并且有个缺省的配置(是按标准的8051配置的),一般情况要添加Startup.a51并按实际情况做适当修改,并且可以禁止清RAM功能,我的项目一直会加Startup.a51所以有些疏忽.
  在此再次向大家道歉,对不起了.
  学无止境...

使用特权

评论回复
20
lyfly_away| | 2013-12-6 11:14 | 只看该作者
学习了,谢谢指导

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

78

帖子

0

粉丝