导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]怎么把C函数指令地址定义到汇编文件中间空余的部分去,

* 53826: [求助]怎么把C函数指令地址定义到汇编文件中间空余的部分去,请求指点

   jamesdhxy 
jamesdhxy发表的帖子 

 [求助]怎么把C函数指令地址定义到汇编文件中间空余的部分去,请求指点
用汇编做主程序运行,调用C写的函数。现在汇编调用C函数和他们之间传递参数都没什么问题,但是C函数的指令空间地址超了存储空间范围,结果片上运行时一调这个C函数整个程序就跑飞了,然后单片机就复位回到0000h开始。

我用的SST的51单片机,程序空间是从0000h到FFFFh,我定义的从0000h到5FFFh是单片机运行用的程序存储空间,从6000h到BFFFh是备份程序空间,不写入运行用的程序,后边的是当Flash用,所以不管汇编还是C程序都放在6000h以前的空间。汇编代码在地址上分成两部分,主要运行的部分从0000h到4600h,中间4600h到5500h是空白的,后边5500h到5FF4h这块地址上是一部分固定地址的代码,C函数只能放在4600h到5500h之间空白的地址段上。

汇编文件是一个.A51文件,C函数文件是一个.C文件,再加上头文件一共是3个文件,如果我不指定C函数的地址,那么连接器就把前边的A51主程序的固定和不固定的两部分算做同一部分了,从MAP文件中看就是把0000h到5FF4h全分给汇编文件了,把C文件分配到整个汇编文件以后的空间,就是5FF4h以后,这样就造成了程序跑到6000h以后去运行,结果就是开始我说的单片机认为程序访问了不可用的地址,复位去了。

我用了一个网上说的办法给C函数分配程序存储地址,就是在Keil中的project->  options for target '...' ->   LX51 Locate->  User Segments里边加入?PR?_FUNCTION?CFILE(0x4600) 让连接器给C函数分配到指定地址去,但是这时候一连接就出错了,错误代码分别是L108、L121、L120,我看了下错误说明说是不能进行地址跳转,这个程序段的地址不可用……到这我就不知道怎么办了,中间那部分存储器空间明明是空的,为什么不让访问绝对地址给C文件分配到那里去呢?难道光设置Keil不行,在程序上还要有什么指令才可以分吗?

怎么把C函数指令地址定义到汇编文件中间空余的部分去,请求指点。

发表时间:2009年6月10日12:57:37

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[原创]原群人已经满,欢迎加入我们的新群原群人已经满,欢迎加入我们的新群88492142 /P P
[下一篇帖子]:大家觉得这个可以吗?大家觉得怎么样?