首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

高手请帮忙,宏的调用错在哪里?求救

高手请帮忙,宏的调用错在哪里?求救

我想调用监控ROM中的烧写FLASH的程序,来随时改变我flash的值。下面是与烧写代码相关的程序,用的jl8单片机。
SEGMENTS
U_RAM  = READ_WRITE 0x014e TO 0x015F;
END

PLACEMENT
FILE_PTR                        INTO U_RAM;                       
END
flash.h中我做了这样的宏定义
#pragma DATA_SEG  FILE_PTR
byte bus_spd=20;
byte datasize=17;
word startaddrs=0xfbed;
byte threshold;
byte lfid[4];
byte lrid[4];
byte rfid[4];
byte rrid[4];                               
#pragma DATA_SEG DEFAULT
#define wrflash(FILE_PTR) {asm ldhx #FILE_PTR;(*(void(*)(void))0xfc06)();}
在flash.h曾经我也做了这样的尝试,链接的时候出现非法地址的警告,
#define var #0x014e

#define wrflash(var) {asm ldhx var;(*(void(*)(void))0xfc06)();}
flash.c中我调用宏
void wr_flash(void)
{wrflash(FILE_PTR);
}
请指教应该怎么实现程序
自己顶一下,
看不出有什么错,不过我建议你写成这样:
#define wrflash(var) {asm ldhx var;asm jsr  0xfc06;}
感觉应该是c语言中的内建汇编不支持 #file_ptr, 而是@file_ptr

可以试一下
#define wrflash(FILE_PTR) {asm ldhx @FILE_PTR;(*(void(*)(void))0xfc06)();}
nothing is impossible
返回列表