[ZLG-ARM] 请教 C语言下如何把一个函数定位到一个绝对地址啊

[复制链接]
6220|8
 楼主| wlsq910 发表于 2007-6-15 15:44 | 显示全部楼层 |阅读模式
比如定位到0x1000  我用的LPC2103  KEIL ARM 编译环境。 谢谢!
 楼主| wlsq910 发表于 2007-6-15 15:56 | 显示全部楼层

我准备写一段IAP的bootload函数,将之定位到2103的扇区高位,当我要升级程序的时候&nbsp;跳转到这个函数&nbsp;通过无线方式接收新程序&nbsp;存入外部串行FLASH中&nbsp;,然后擦除低扇区&nbsp;读出串行FLASH中的数据&nbsp;&nbsp;写入低扇区&nbsp;&nbsp;达到更新程序的目的。现在我搞不明白的是如何用C语言实现函数定位和函数跳转!请知道的朋友告之!<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谢谢&nbsp;!
 楼主| wlsq910 发表于 2007-6-15 16:03 | 显示全部楼层

我还有个想法&nbsp;就是单独写个BOOTLOAD程序&nbsp;编译后烧写到2103指定的高扇区&nbsp;但我不知道ZLG的的LPC210X-ISP下载软件能不能指定扇区烧入
zx1221 发表于 2007-6-15 16:58 | 显示全部楼层

IAR

ARM不清楚,不过IAR有这个功能直接可以实现按物理地址定义<br />#pragma&nbsp;location=0x1000
luhuaren 发表于 2007-6-15 20:06 | 显示全部楼层

re

用这个方式声明<br />void&nbsp;(*V_RUN_ROM)(void)&nbsp;=&nbsp;(void&nbsp;(*)(void))RO_BASE;<br /><br /><br />用这个方式调用<br />(*V_RUN_ROM)();&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />RO_BASE&nbsp;&nbsp;这个地址你可以自己定义。。。。。。。。
 楼主| wlsq910 发表于 2007-6-19 15:05 | 显示全部楼层

谢谢!

我试了怎么不行呢?我是要把一个函数定位到一个指定地址&nbsp;
xillinx 发表于 2007-6-25 09:42 | 显示全部楼层

很多办法

你可以通过连接器定位。<br />你把你的这个函数定义到一个自己定义的section内,在连接器里面把这个section定位到你想要的地址就可以了。<br />第二,你可以把你的这个函数编译成为OBJ文件,然后把里面的txt,sdata等section转换成为BIN格式,再转换成为一个用C语言描述的数据,这样用C语言把一个数据存放到指定的位置就很容易了。
high 发表于 2007-6-25 11:17 | 显示全部楼层
 楼主| wlsq910 发表于 2007-6-25 12:00 | 显示全部楼层

谢谢大家!

我现在用KEIL&nbsp;MDK305版本&nbsp;直接用__at就可以定义了&nbsp;简单多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

28

帖子

0

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