请教各位老师,如何修改keil里main函数前的初始化代码?

[复制链接]
6706|12
 楼主| ycx0617 发表于 2008-9-4 20:54 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请问各位老师,我想修改keil里进入main函数前那段数据初始化代码?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就是&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__main<br />&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;在反汇编里,进入main之前执行了一段数据初始化代码,这段代码是不在startup.s里。我想修改这段代码,甚至不需要初始化,不知在那里设置或修改。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;末学诚心请教各位老师,请老师不吝赐教!
Again_gyf 发表于 2008-9-5 08:30 | 显示全部楼层

re

<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__my_main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0<br /><br />__my_main:<br />&nbsp;&nbsp;&nbsp;........
 楼主| ycx0617 发表于 2008-9-5 09:35 | 显示全部楼层

可不可以仔细点!

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你的意思是不是直接跳到mian处,而不进过那段初始化代码?我试了下,好像不对,也许是我没弄对。请说仔细点,没搞懂。谢谢。
HWM 发表于 2008-9-5 09:39 | 显示全部楼层

LZ:再仔细看一下startup.s

......<br /><br />;&nbsp;Enter&nbsp;the&nbsp;C&nbsp;code<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__main<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 /><br />......<br />
 楼主| ycx0617 发表于 2008-9-5 11:36 | 显示全部楼层

我好像没表达清晰

&nbsp;&nbsp;&nbsp;&nbsp;4楼,这个是进入c的main。在反汇编中有这样一段代码:&nbsp;&nbsp;<br /><br />0x000000FC&nbsp;&nbsp;E12FFF10&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0&nbsp;&nbsp;&nbsp;;R0为0x00000110。<br />0x00000110&nbsp;&nbsp;EB000000&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__scatterload_rt2(0x00000118)<br />0x00000114&nbsp;&nbsp;EB0010CA&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__rt_entry(0x00004444)<br />~~~~~~~<br />~~~~~~~<br />~~~~~~~<br />执行玩这些代码后,才正真进入用户main函数。<br />&nbsp;&nbsp;&nbsp;&nbsp;在进入我们写的main之前还有这些,应该是初始化堆数据,以及ZI&nbsp;data。<br />有些变量我不想每次复位都初始化一次,而是想手动初始化,即进行显示初始化。<br />&nbsp;&nbsp;&nbsp;&nbsp;对编译器不是很熟,不知怎么改。
HWM 发表于 2008-9-5 12:34 | 显示全部楼层

re LZ:

你这里的<br /><br />0x000000FC&nbsp;&nbsp;E12FFF10&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0&nbsp;&nbsp;&nbsp;;R0为0x00000110。<br /><br />就是<br /><br />......<br /><br />;&nbsp;Enter&nbsp;the&nbsp;C&nbsp;code<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__main<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 /><br />......<br /><br />中的<br /><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 /><br />执行完这条指令后就进入到“C”的地界中去了(main()),那是编译的权力范围,你是无能为力的。<br />
 楼主| ycx0617 发表于 2008-9-5 14:10 | 显示全部楼层

知道了

&nbsp;&nbsp;&nbsp;&nbsp;这个是c编译器强制规定的,代码应该在库里,我是看不了了。看来改代码是不行了。那么有没有设置项,要求编译器不处理&nbsp;ZI&nbsp;data?<br />&nbsp;&nbsp;&nbsp;&nbsp;谢谢HWM的热心帮助!
农民讲习所 发表于 2008-9-5 14:17 | 显示全部楼层

你想干什么?

不想使用变量初始化,不要修改系统的ZI&nbsp;data,这是老掉牙的不安全行为。<br />你可以用指针的方式,在_bss_end的后面自己开辟一个内存区操作。
农民讲习所 发表于 2008-9-5 14:33 | 显示全部楼层

ARM里面

extern&nbsp;unsigned&nbsp;char&nbsp;Image$$ZI$$Limit[];&nbsp;&nbsp;//系统编译器的系统变量<br /><br />unsigned&nbsp;char&nbsp;*p;<br />p&nbsp;=&nbsp;(unsigned&nbsp;char&nbsp;*)(Image$$ZI$$Limit);<br /><br />p指向系统变量区完毕后的开始内存区。
 楼主| ycx0617 发表于 2008-9-5 14:35 | 显示全部楼层

&nbsp;&nbsp;&nbsp;&nbsp;我要的就是上电复位和看门狗复位,变量初始化不一样。<br />&nbsp;&nbsp;&nbsp;&nbsp;上电复位需要初始化,但看门狗复位就不一定需要。有些变量我不想在看门狗复位后改变,而是保存原值。原来用PIC,现在用arm,思想上还拐来拐去的。<br />&nbsp;&nbsp;&nbsp;&nbsp;那么,如何在&nbsp;_bss_end&nbsp;的后面自己开辟一个内存区操作了?<br />&nbsp;&nbsp;&nbsp;&nbsp;请老师指点。<br />&nbsp;&nbsp;&nbsp;&nbsp;越学下去,越觉得不懂,呵呵。
 楼主| ycx0617 发表于 2008-9-5 14:36 | 显示全部楼层

&nbsp;&nbsp;&nbsp;&nbsp;这还在写了,您就发上来了。农民老师这是热心啊。
农民讲习所 发表于 2008-9-5 14:41 | 显示全部楼层

继续

struct&nbsp;xxx{<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;a;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;*pv;<br />&nbsp;&nbsp;....<br />};<br />struct&nbsp;xxx&nbsp;*psxxx;<br /><br />初始化时只要将psxxx指针赋值就可以了,不影响保存的数据。<br />操作时psxxx-&gta,&nbsp;psxxx-&gtpv就可以。
Wxy8030 发表于 2008-9-5 18:13 | 显示全部楼层

直接把跳到你自己的 main 就行

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就是&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0<br /><br />改为&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main<br /><br />(记不清是否要加一个下划线了)<br /><br />但不建议这么做
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

17

帖子

1

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