[ZLG-ARM] 如何修改Startup.s,能在启动时不清零RAM?

[复制链接]
2791|4
 楼主| tlhlg 发表于 2007-2-1 14:58 | 显示全部楼层 |阅读模式
用keil&nbsp;for&nbsp;ARM开发的LPC21XX,启动时把RAM中的所有变量都清零了。当看门狗动作时,也把所有变量清零了。这样就存在很大问题:虽然由于看门狗,机器不死机了,但看门狗动作前的中间结果全丢失了。请问高人,如何修改Startup.s,能在启动时不清零RAM?&nbsp;<br />
zlgARM 发表于 2007-2-2 09:31 | 显示全部楼层

RE

跟STARTUP.s没关系。<br />如果你用到了全局变量(或在main()函数的开头定义有),而且定义的同时赋有初值,那么变量的初始化操作实际上在进入main()函数之前就已经完成了。这是C编译器的特性,同时也是其它C编译器所共有的、ANSI&nbsp;C所要求的。<br />所以要从设置编译器入手。<br />在KEIL的option&nbsp;for&nbsp;target的target菜单里,有针对各RAM区域初始化与否的设置。注意一下NOInit的钩选框。
 楼主| tlhlg 发表于 2007-2-3 17:31 | 显示全部楼层

谢谢

  
 楼主| tlhlg 发表于 2007-2-3 17:32 | 显示全部楼层

谢谢

非常谢谢2楼的回答.现在情况是这样的,Startup.s结尾处的程序如下:<br /><br />...<br />//&nbsp;Enter&nbsp;the&nbsp;C&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,=?C?INIT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Bit-0&nbsp;set:&nbsp;INIT&nbsp;is&nbsp;Thumb<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDREQ&nbsp;&nbsp;&nbsp;LR,=exit?A&nbsp;&nbsp;;&nbsp;ARM&nbsp;Mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDRNE&nbsp;&nbsp;&nbsp;LR,=exit?T&nbsp;&nbsp;;&nbsp;Thumb&nbsp;Mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP<br /><br />PUBLIC&nbsp;exit?A<br />exit?A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROC&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit?A&nbsp;&nbsp;//****<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP<br /><br />PUBLIC&nbsp;exit?T<br />exit?T&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PROC&nbsp;&nbsp;&nbsp;&nbsp;CODE16<br />exit:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit?T<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br /><br /><br />用单拍跟踪,在&nbsp;//****&nbsp;处转去处理:1,清零所有定义的全局变量;2,转向c的main.<br />实际上若能修改相应语句,直接转向到c的main也就行了。但我找不到转向c的main的语句。ADS用的语句keil不适用。
hotpower 发表于 2007-2-4 02:37 | 显示全部楼层

应该不是noinit就能搞定的~~~

NOInit的钩选框<br />#define&nbsp;__noinit__&nbsp;__attribute__((zero_init))//变量不初始化为0<br />__noinit__&nbsp;volatile&nbsp;unsigned&nbsp;int&nbsp;SystemRamTest;//RAM不初始化<br />&nbsp;&nbsp;if&nbsp;(::SystemRamTest&nbsp;!=&nbsp;SystemRamTestVal)&nbsp;{<br />//................................<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;{<br />//................................<br />&nbsp;&nbsp;} <br /> 相关链接:<a href='http://hotpower.21ic.org/user1/46/archives/2006/10198.html'>http://hotpower.21ic.org/user1/46/archives/2006/10198.html</a>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部