用keil uv4 编写LPC1114 程序时的优化问题
[复制链接]
keil uv4 一共有0~3四级优化
除0级外其余的1,2,3任何一级,程序在编译过程中只要选择了任何一级优化,下载进去之后就不运行了,仿真后发现是出不了其中的一个子函数,函数是这样的:
void JM_CS(uint32 relative_address)
{ uint32 address,temp; uint8 i; uint8 jm_data[22]; uint16 L ;
uint16 start_y ;
uint8 start_m ;
uint8 start_d ;
uint8 start_h ;
uint8 start_mi ;
uint16 end_y ;
uint8 end_m ;
uint8 end_d ;
uint8 end_h ;
uint8 end_mi ;
uint8 disenab_w ;
address=Save_Start+relative_address;
SSTF016B_RD(address,22,jm_data);
if((jm_data[0]==0xbb)&&(jm_data[1]==0xcc)&&(jm_data[2]==0xdd)&&(jm_data[3]==0x00)) { jm_play_m = jm_data[4]; jm_play_c = jm_data[5]; jm_end = jm_data[6]; JM_start_time[0]= jm_data[7]; JM_start_time[1]= jm_data[8]; JM_start_time[2]= jm_data[9]; JM_start_time[3]= jm_data[10]; JM_start_time[4]= jm_data[11]; JM_start_time[5]= jm_data[12]; JM_end_time[0] = jm_data[13]; JM_end_time[1] = jm_data[14]; JM_end_time[2] = jm_data[15]; JM_end_time[3] = jm_data[16]; JM_end_time[4] = jm_data[17]; JM_end_time[5] = jm_data[18]; disenab_w = jm_data[19]; temp = jm_data[20]; L = temp; temp = jm_data[21]; L |= temp<<8;
//--------------------------------------------------------------- if(L>0) { Flash_Ram(address+22);
} temp=address+22+L; SSTF016B_RD(temp,40,jm_data); S_COUNT= jm_data[0]; for(i=0;i<S_COUNT;i++) { temp=jm_data[1+3*i]; S_ADDR=temp; temp=jm_data[1+3*i+1]; S_ADDR|=temp<<8; temp=jm_data[1+3*i+2]; S_ADDR|=temp<<16; } } }
仿真发现程序没有死循环,数据也都是对的,不管如何执行只要一出这个函数就死了,我之前没遇到过这种问题,感觉应该不是keil的问题,但C程序本身我看不出哪里不严谨,汇编看不太懂,也不好妄加评论
把这高函数注释后程序可以运行,但这段程序是不能省掉的....
具体问题出在哪里还请大家讨论...
也给小弟指点一二
|