设备:dsPIC33FJ128GP802绝对地址
我有一些* .S文件如下
.global _D1
.section .speex, code
_D1:
.pword 0x66C821, 0x1B0090, 0xD96C36, 0x9B60B0, 0xDD4E36, 0xBF4E53
.pword 0xD1098B, 0x719BD9, 0x873989, 0x003B69, 0x279035, 0xED4244
.pword 0xE1403C, 0x54D439, 0x826550, 0xC59627, 0xDD0432, 0x88FA29
我已经宣布的的* .h相同
extern void D1(void);
现在我将D1传递给一个表读功能
nowPlaying.file1 = (unsigned long) D1;
function(nowPlaying.file1);
我的问题是,如果D1的地址高于0x8000,则该例程不正确。我试过大大小小的代码模型,但结果是一样的。我认为这是由于指针的16位限制。是否有任何方法直接从代码访问D1的绝对地址?也许像内置函数或宏一样。
请注意,编译器手册说:
的MPLAB XC16 C编译器完全支持函数指针,它 允许函数间接调用。函数指针始终是16位宽的 。
我已经发布了同样的问题在
请澄清,因为你已经多次被问过,.s文件中的东西是真的代码还是数据;请定义'功能不正确';并请继续在这里的整个对话而不是回到electronics.stackexchange.com它来自哪里。否则,我根本看不到你在这里发布的观点。 – EJP