打印
[PIC®/AVR®/dsPIC®产品]

XC8 无法通过绝对地址调用函数?

[复制链接]
910|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Kissn|  楼主 | 2020-5-29 09:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如下:在MPLAB X IDE开发环境中(XC8 编译器),将fuc1定位到0x400处,然后通过该地址调用函数,结果发现不能调用,

typedef unsigned char (* func_t)(unsigned char a,unsigned char b);
(1)loacte my fucntion at 0x400
unsigned char fuc1(unsigned char a,unsigned char b)__at(0x400)
{
// a+b;
NOP();
NOP();
NOP();
return a*b;
}
(2) fucntion pointer point to fuc1
func_t ptr = (func_t)(&fuc1);       //用取址符号可以调用
//func_t ptr = (func_t)(0x400)     //直接使用地址无法调用
mmm = ptr(3,9);

使用特权

评论回复
沙发
antusheng| | 2020-5-29 11:54 | 只看该作者
估计定位失败了,然后你取函数地址看看,通过指针。

使用特权

评论回复
板凳
Kissn|  楼主 | 2020-5-29 20:37 | 只看该作者
antusheng 发表于 2020-5-29 11:54
估计定位失败了,然后你取函数地址看看,通过指针。


函数定位和指针地址都对的,估计是编译器不支持这么操作



222.png (67.96 KB )

222.png

使用特权

评论回复
地板
antusheng| | 2020-5-31 19:53 | 只看该作者
那就是不支持吧,

使用特权

评论回复
5
CoolSilicon| | 2020-6-1 08:56 | 只看该作者
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么?

使用特权

评论回复
6
kavent| | 2020-6-1 13:23 | 只看该作者
没这样操作过,不过数量可以绝对定位!

使用特权

评论回复
7
Kissn|  楼主 | 2020-6-1 13:30 | 只看该作者
CoolSilicon 发表于 2020-6-1 08:56
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么? ...

永远在原地踏步的走,只能沦落为 职业搬砖人

使用特权

评论回复
8
Kissn|  楼主 | 2020-6-1 13:32 | 只看该作者
CoolSilicon 发表于 2020-6-1 08:56
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么? ...

用途自然是有的,要不然我写这个干嘛,吃饱了撑的
不了解用途就不要瞎评论

使用特权

评论回复
9
CoolSilicon| | 2020-6-1 14:22 | 只看该作者
Kissn 发表于 2020-6-1 13:32
用途自然是有的,要不然我写这个干嘛,吃饱了撑的
不了解用途就不要瞎评论 ...

很好奇, 有什么用途需要用到绝对地址的调用?
要注意,操作绝对地址要特别小心,稍不留神就越界了之类,也会给后续的维护带来困扰, 总之,小心为妙.
善意的提醒而已..

使用特权

评论回复
10
asdsfgwsafd| | 2020-6-1 15:40 | 只看该作者
调用绝对地址是能省空间和运行速度吗

使用特权

评论回复
11
lcczg| | 2020-6-1 17:21 | 只看该作者
什么芯片

使用特权

评论回复
12
奔波儿熊| | 2020-6-3 16:58 | 只看该作者
楼主能分享一下这样做的好处吗?

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝