word 数组 转 指针_C51单片机指针实例

#pragma src#include f(){}f1(){}f2(){}main(){{int x;int *px;//下面这些表示虽然很烦,但是生成的代码却及其简洁://将 xdata 型指针 0x4000 赋给 pxpx=(int xdata *)0x4000;//表示从 xdata 0x4000处取一个 char 给xx=*((char xdata *)0x4000);// 表示从 code 0x4000处取一个 word 作为 xdata 型的指针 给pxpx=*((int xdata * xdata *)0x4000);//表示从 code 0x4000处取一个 word 作为 xdata 型的指针,//再把这个指针指向的char数据赋给xx=**((char xdata * code *)0x4000);//表示把函数f()入口地址当作xdata型指针,再把指向的xdata//中的int型数据作为code型指针,把指向的code字节//赋给x(晕,这样有意义吗?)x=**(int code * xdata *)f;//把f()入口地址处的ROM中两个code型字节,//赋给堆栈指针SP指向的字节(想干什么?编操作系统?)*(unsigned int idata *)SP=*(unsigned int code *)&f;//表示把f()入口地址处的ROM中两个code型字节,//作为一个xdata指针寻址,//把指向的数据作为pdata指针寻址,//再把把指向的数据作为idata指针寻址,//把该地址处的一个字节赋给x (我靠,累死了)x= ****(unsigned int data * idata * pdata * xdata * code *)&f;//总之,一个括号里面外面的"*"一样多就表示指向的是数据。}{//数组函数code void (*ArrFn[])(void) ={ &f1,&f2,};//可以像引用数组一样调用函数啦:(*ArrFn[0])();(*ArrFn[1])();}{//这样将使函数调用0000H处:void (*reset) (void);reset=0x0;(*reset)();reset();//或者直接这样,仅仅生成一条指令LCALL 1234H((void (code *)(void))0x1234)(); }{//这样可以调用RETI指令:#define INT_NUM 30 //空闲中断号((void (code *)(void))(INT_NUM*8 3))();//当然需要在外面声明 int_rpt()interrupt INT_NUM {}}{//这样调用RETI指令太变态:code unsigned char ret_i=0x32;((void (code *)(void))(&ret_i))();}}int_rpt()interrupt INT_NUM {}
79bfaef26154fcdac9fca65bab46f875.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值