求教:PICC中的函数定位

[复制链接]
6306|25
 楼主| zhbwgh 发表于 2008-5-28 19:19 | 显示全部楼层 |阅读模式
     用MPLAB8.0+HI_TECH PICC编译工具,怎么对一个子函数实现物理地址的定位呢?我用C编写的,发现编译后,程序超了范围,中间一段地址没有用,我用的PIC 16F873A 多谢。
cheungman 发表于 2008-5-28 19:33 | 显示全部楼层
cheungman 发表于 2008-5-28 19:35 | 显示全部楼层

re

C18的就可以,不知道PICC的行不行?网上搜了一下,有人说PICC不支持这样操作。 <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/list.asp?boardid=27&page=1&t=2978964&tp=C18%u7F16%u8BD1%u5668%u53EF%u4EE5%u5BF9%u4EE3%u7801%u5B9A%u4F4D%uFF0C%u90A3PICC18%u7F16%u8BD1%u5668%u4E2D%u5982%u4F55%u5BF9%u4EE3%u7801%u5B9A%u4F4D%uFF1F'>https://bbs.21ic.com/club/bbs/list.asp?boardid=27&page=1&t=2978964&tp=C18%u7F16%u8BD1%u5668%u53EF%u4EE5%u5BF9%u4EE3%u7801%u5B9A%u4F4D%uFF0C%u90A3PICC18%u7F16%u8BD1%u5668%u4E2D%u5982%u4F55%u5BF9%u4EE3%u7801%u5B9A%u4F4D%uFF1F</a>
 楼主| zhbwgh 发表于 2008-5-28 22:01 | 显示全部楼层

re

请教一下&nbsp;楼上&nbsp;这应该怎么做呢?换编译器?搞不懂中间的地址没有用&nbsp;怎么用的后面的地址&nbsp;谢谢楼上了
zhaoyu2005 发表于 2008-5-29 09:47 | 显示全部楼层

有可能是LZ的子函数太大了

好像在哪里见过PIC(或者是仿PIC的)单片机,子函数不能太大,好像与代码区域有关,也许记错了,LZ可以试一下
cheungman 发表于 2008-5-29 11:13 | 显示全部楼层

LZ试试LS说的

  
hongye7390 发表于 2008-5-29 12:39 | 显示全部楼层

可以的.

在PICC的参考手册里有详细介绍如何绝对定位的。
yewuyi 发表于 2008-5-29 12:41 | 显示全部楼层

看连接文件

  
 楼主| zhbwgh 发表于 2008-5-29 19:01 | 显示全部楼层

回楼上

感谢各位:<br />&nbsp;&nbsp;&nbsp;首先我编写的子函数没有超过2K的,我想不是函数的长度太长。<br />&nbsp;&nbsp;&nbsp;至于连接文件,我看过了,网上也找了个例子,发现&nbsp;我单独定义一个函数的地址能够成功(能够定义到指定位置),但是放到我的原函数中,就提示出错,错误提示为:&nbsp;unkown&nbsp;psect&nbsp;mycode//mycode是我自己定义的地址名称。请教各位这是什么原因呢?&nbsp;我的子函数&nbsp;都不是很长&nbsp;没有超过1K的!
yewuyi 发表于 2008-5-29 20:08 | 显示全部楼层

把你的连接文件发上来

  
hjh002 发表于 2008-5-29 21:33 | 显示全部楼层

我也想知道.

  
 楼主| zhbwgh 发表于 2008-5-31 09:36 | 显示全部楼层

回复:

我已经连接成功了,现在就是还有些地方没太搞懂,<br />下面是我的连接过程:<br />1&nbsp;打开build&nbsp;options&nbsp;选项框,&nbsp;找到&nbsp;use&nbsp;alternate&nbsp;setting&nbsp;<br />2&nbsp;然后输入-L-pmmycode=0x100(注意此处与后面留一空格)<br />3&nbsp;在你要指定的函数前面加上<br />&nbsp;&nbsp;#pragma&nbsp;psect&nbsp;text%%u=mycode&nbsp;就可以了<br />不过我现在不知道地址的设定有什么规律,一开始设定的时候提示出错,可能跟你设定的地址有关,如果不对(不是说你设置的函数的地址不对,而是超出最大地址空间),改换地址再试试!<br />&nbsp;&nbsp;&nbsp;多谢hongye7390&nbsp;&nbsp;&nbsp;yewuyi&nbsp;和其他朋友
cheungman 发表于 2008-5-31 11:18 | 显示全部楼层

怎么不行呢?

编译后提示说:<br />Error[000]&nbsp;&nbsp;&nbsp;:&nbsp;unknown&nbsp;psect:&nbsp;mmycode<br /><br />仔细看了zhbwgh的方法,发现<br />-L-pmmycode=0x100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----(1)<br />#pragma&nbsp;psect&nbsp;text%%u=mycode&nbsp;&nbsp;&nbsp;&nbsp;____(2)<br /><br />发现&quot;mycode&quot;中,(1)比(2)多了个&quot;m&quot;,然后我删了个&quot;m&quot;,再试仍然提示提示:<br />Error[000]&nbsp;&nbsp;&nbsp;:&nbsp;unknown&nbsp;psect:&nbsp;mycode<br /><br />为什么?
 楼主| zhbwgh 发表于 2008-5-31 19:10 | 显示全部楼层

re

你可以改变地址试试,&nbsp;我一开始的时候也是提示&nbsp;这个错误,<br />我又重新建立个文件,然后编译的时候就过了,我想可能是跟设置的地址有关。
richardvip 发表于 2008-6-2 09:53 | 显示全部楼层

楼上的不行呀

我用的是PIC18F4520编译环境是mplab8+picc18&nbsp;9.5,编译后Error[450]&nbsp;&nbsp;&nbsp;:&nbsp;psect&nbsp;&quot;mycode&quot;&nbsp;was&nbsp;never&nbsp;defined,改了几个地址都不行呀<br />
yewuyi 发表于 2008-6-2 10:21 | 显示全部楼层

LS的问题很显然是在连接文件中无mycode定义造成的

请先学会看连接文件
richardvip 发表于 2008-6-2 10:47 | 显示全部楼层

谢谢斑竹帮助,

斑竹的意思是不是我要在链接文件中定义mycode呢,还请帮助,谢谢
yewuyi 发表于 2008-6-2 12:34 | 显示全部楼层

如果在连接文件中无定义,就需要你自己另外定义

另:使用PICC尽量不要自己对数据和代码进行定位,也尽量不要修改连接文件,按照默认的就行了。
yewuyi 发表于 2008-6-2 12:43 | 显示全部楼层

我只用过PICC16,没用过PICC18编译器

PICC16的连接处理基本都是不可见的,呵呵,我真没找到PICC16的连接文件*.prm<br /><br />套用张教主的一句话:我真不知道修改PRM文件有什么必要?!
richardvip 发表于 2008-6-2 12:46 | 显示全部楼层

那也就是说没办法对代码进行定位了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

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