我才开始定义了两个全局变量DDRdata_1_E和DDRdata,如下程序框架
volatile unsigned short*DDRdata_1_S,*DDRdata_1_E;
volatile unsigned short*DDRdata;
void main(void)
{
//初始化
DDRdata=0x01000000;
while(1)
{
EP2_start=0x01;
DDRdata_1_S= DDRdata + 22;
rece_act=rece_num>>1;
while(rece_usb<rece_act)//小于规定字节数目
{
//是否要加上若干的延时???以及所收字节数现时反馈
}
EP2_start=0x00;
DSP_rece=rece_usb;
rece_usb=0x00000000;
DDRdata_1_E=DDRdata;
DDRdata++;
process_rece_num(0x01, DSP_rece);
//反馈给上位机所收字节数
PC_Recive(send_rece_num,0x08);
}
}
EX_INTERRUPT_HANDLER(FlagA_ISR)
{
if((*pPORTFIO&PF2) == PF2) // 控制命令信息中断
{
}
else if((*pPORTFIO&PF4) == PF4)
{
if(EP2_start==0x01)
{
while((*pPORTFIO & PF4)==PF4)
{
*DDRdata=*READ_EP2;
DDRdata++;
rece_usb++;
}
}
}
*pPORTFIO_CLEAR = PF4|PF2;
}
可以看我所上传的附件中的图片,在图片一中运行到107行,DDRdata=0x0105dc5a,在运行完110行时,我觉的DDRdata_1_E=0x0105dc5a,但是程序运行完是0x01000000,再运行111行,DDRdata就是0x0100002(如图片三所示),这个是为什么?
后来我发现在第93行,DDRdata_1_S= DDRdata + 22;处执行完后,这个DDRdata_1_S指针值指向了0x0100002c处,后来我改了一下110行和111行,如下:
DDRdata_1_E = DDRdata_1_S - 22 + DSP_rece;
DDRdata = DDRdata_1_E + 1;
那这样就没问题了,我就是不明白为什么先前不行?
「该帖子被 笑溜溜 在 2013-07-18 14:22:40 编辑过」