[PIC®/AVR®/dsPIC®产品] XC8 无法通过绝对地址调用函数?

[复制链接]
1175|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
估计定位失败了,然后你取函数地址看看,通过指针。


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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
antusheng 发表于 2020-5-31 19:53 | 显示全部楼层
那就是不支持吧,
CoolSilicon 发表于 2020-6-1 08:56 | 显示全部楼层
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么?
kavent 发表于 2020-6-1 13:23 | 显示全部楼层
没这样操作过,不过数量可以绝对定位!
 楼主| Kissn 发表于 2020-6-1 13:30 | 显示全部楼层
CoolSilicon 发表于 2020-6-1 08:56
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么? ...

永远在原地踏步的走,只能沦落为 职业搬砖人
 楼主| Kissn 发表于 2020-6-1 13:32 | 显示全部楼层
CoolSilicon 发表于 2020-6-1 08:56
一顿操作猛如虎,回头一看0提升....
写一些通俗易懂, 以后给接手的同事一个容易维护的环境不香么? ...

用途自然是有的,要不然我写这个干嘛,吃饱了撑的
不了解用途就不要瞎评论
CoolSilicon 发表于 2020-6-1 14:22 | 显示全部楼层
Kissn 发表于 2020-6-1 13:32
用途自然是有的,要不然我写这个干嘛,吃饱了撑的
不了解用途就不要瞎评论 ...

很好奇, 有什么用途需要用到绝对地址的调用?
要注意,操作绝对地址要特别小心,稍不留神就越界了之类,也会给后续的维护带来困扰, 总之,小心为妙.
善意的提醒而已..
asdsfgwsafd 发表于 2020-6-1 15:40 | 显示全部楼层
调用绝对地址是能省空间和运行速度吗
lcczg 发表于 2020-6-1 17:21 | 显示全部楼层
什么芯片
奔波儿熊 发表于 2020-6-3 16:58 | 显示全部楼层
楼主能分享一下这样做的好处吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

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