关于U盘模块读写程序变量定义的问题

各位技术高手: 我现在在使用U盘读写模块,遇到问题是把U盘读写模块的读写程序的一些变量放到XDATA时,编译可以过关,但是运行不了,不知道怎么回事,各位可否帮帮忙啊 例如: CMD_PARAM mCmdParam; /* 默认情况下该结构将占用64字节的RAM,可以修改MAX_PATH_LEN常量,当修改为32时,只占用32字节的RAM */ 把变量定义在外部时如: CMD_PARAM xdata mCmdParam; 运行时出错; 这是什么问题请各位帮帮忙啊

这一块主要是地址指针的问题,这样定义本来是没有错误的,但是问题就出在这里,看一下ExecCommandBuf中变量的定义: unsigned char i, status; unsigned char data *buf; unsigned char xdata *CurrentBuf; 主要看一下buf的定义,我们定义在data区,而CMD_PARAM mCmdParam其实也是定义在data区,这样一来毫无疑问没有问题,但是现在把CMD_PARAM mCmdParam改成CMD_PARAM xdata mCmdParam,问题就来了,虽然编译没有问题,但是你可以去查看一下反汇编,就可以清楚的知道问题就出以下程序 buf = (unsigned char *)&mCmdParam; /* 指向输入参数的起始地址 */ do { CH375HM_DATA_WR( *buf ); /* 从索引地址PARA_BUFFER_ADDR开始,写入参数 */ buf ++; } while ( -- i ); 如果按照你的定义,其实参数参数真正没有写对,你主要还是看一下反汇编,这里我就不多说了. 不过还是有解决方法的,那就是定义buf的时候注意一下:定义为unsigned char *buf或者unsigned char xdata*buf;就能解决问题.


只有登录才能回复,可以选择微信账号登录