如何控制复位时不被初始化为0

2020-01-20 19:03发布

本帖最后由 一匹狼 于 2015-5-4 17:43 编辑

C51的启动代码把片内RAM中00H~7FH单元的内容清零
  1. IDATALEN        EQU     80H
复制代码
  1. IF IDATALEN <> 0
  2.                 MOV     R0,#IDATALEN - 1
  3.                 CLR     A
  4. IDATALOOP:      MOV     @R0,A
  5.                 DJNZ    R0,IDATALOOP
  6. ENDIF
复制代码
为了判断冷、热启动,我需要在特定单元分别写入0xA5、0x5A,
有如下两者解决方案:
1、编译器设置
2、修改启动代码
比较倾向于修改编译器设置,请问在Keil中如何实现热启动时不对其初始化为0?

17:45-2015.05.04修改原因:
如果改启动代码,比如
  1. IDATALEN        EQU     70H
复制代码
直接编译就ok了吗,还需要其他操作不?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
bccuje_love
1楼-- · 2020-01-21 09:49
C语言要修改启动代码或定义非初始化变量,手动清零,汇编的话初始一个RAM的值,上电就判断这个值是否为自己写的值,不是的话就全部初始化变量,
一匹狼
2楼-- · 2020-01-21 13:27
 精彩回答 2  元偷偷看……
dz20062008
3楼-- · 2020-01-21 14:47
C语言的话的却比较麻烦,汇编就是不用就不会改变了。
bccuje_love
4楼-- · 2020-01-21 20:11
一匹狼 发表于 2015-5-5 09:14
让指针指向不被初始化的单元(启动代码只初始化0x00~0xFF单元):

这两单元会不会被编译器分配给其他变 ...

PIC的是persistent unsigned int,前面加persistent
一匹狼
5楼-- · 2020-01-21 23:33
本帖最后由 一匹狼 于 2015-5-7 16:57 编辑

//把热启动标志写入片内RAM,并把启动代码的初始化部分全部注释
一匹狼
6楼-- · 2020-01-22 01:59
xintao 发表于 2015-5-4 19:24
1.用KEIL编写51程序好像不用启动文件也可以吧?记得以后写的程序都是没加启动文件,这样程序估计是直 ...

谢谢~            

一周热门 更多>