打印

求教:PICC中的函数定位

[复制链接]
5181|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhbwgh|  楼主 | 2008-5-28 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     用MPLAB8.0+HI_TECH PICC编译工具,怎么对一个子函数实现物理地址的定位呢?我用C编写的,发现编译后,程序超了范围,中间一段地址没有用,我用的PIC 16F873A 多谢。
沙发
cheungman| | 2008-5-28 19:33 | 只看该作者

re

使用特权

评论回复
板凳
cheungman| | 2008-5-28 19:35 | 只看该作者
地板
zhbwgh|  楼主 | 2008-5-28 22:01 | 只看该作者

re

请教一下 楼上 这应该怎么做呢?换编译器?搞不懂中间的地址没有用 怎么用的后面的地址 谢谢楼上了

使用特权

评论回复
5
zhaoyu2005| | 2008-5-29 09:47 | 只看该作者

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

好像在哪里见过PIC(或者是仿PIC的)单片机,子函数不能太大,好像与代码区域有关,也许记错了,LZ可以试一下

使用特权

评论回复
6
cheungman| | 2008-5-29 11:13 | 只看该作者

LZ试试LS说的

使用特权

评论回复
7
hongye7390| | 2008-5-29 12:39 | 只看该作者

可以的.

在PICC的参考手册里有详细介绍如何绝对定位的。

使用特权

评论回复
8
yewuyi| | 2008-5-29 12:41 | 只看该作者

看连接文件

使用特权

评论回复
9
zhbwgh|  楼主 | 2008-5-29 19:01 | 只看该作者

回楼上

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

使用特权

评论回复
10
yewuyi| | 2008-5-29 20:08 | 只看该作者

把你的连接文件发上来

使用特权

评论回复
11
hjh002| | 2008-5-29 21:33 | 只看该作者

我也想知道.

使用特权

评论回复
12
zhbwgh|  楼主 | 2008-5-31 09:36 | 只看该作者

回复:

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

使用特权

评论回复
13
cheungman| | 2008-5-31 11:18 | 只看该作者

怎么不行呢?

编译后提示说:
Error[000]   : unknown psect: mmycode

仔细看了zhbwgh的方法,发现
-L-pmmycode=0x100               ----(1)
#pragma psect text%%u=mycode    ____(2)

发现"mycode"中,(1)比(2)多了个"m",然后我删了个"m",再试仍然提示提示:
Error[000]   : unknown psect: mycode

为什么?

使用特权

评论回复
14
zhbwgh|  楼主 | 2008-5-31 19:10 | 只看该作者

re

你可以改变地址试试, 我一开始的时候也是提示 这个错误,
我又重新建立个文件,然后编译的时候就过了,我想可能是跟设置的地址有关。

使用特权

评论回复
15
richardvip| | 2008-6-2 09:53 | 只看该作者

楼上的不行呀

我用的是PIC18F4520编译环境是mplab8+picc18 9.5,编译后Error[450]   : psect "mycode" was never defined,改了几个地址都不行呀

使用特权

评论回复
16
yewuyi| | 2008-6-2 10:21 | 只看该作者

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

请先学会看连接文件

使用特权

评论回复
17
richardvip| | 2008-6-2 10:47 | 只看该作者

谢谢斑竹帮助,

斑竹的意思是不是我要在链接文件中定义mycode呢,还请帮助,谢谢

使用特权

评论回复
18
yewuyi| | 2008-6-2 12:34 | 只看该作者

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

另:使用PICC尽量不要自己对数据和代码进行定位,也尽量不要修改连接文件,按照默认的就行了。

使用特权

评论回复
19
yewuyi| | 2008-6-2 12:43 | 只看该作者

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

PICC16的连接处理基本都是不可见的,呵呵,我真没找到PICC16的连接文件*.prm

套用张教主的一句话:我真不知道修改PRM文件有什么必要?!

使用特权

评论回复
20
richardvip| | 2008-6-2 12:46 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

粉丝