本帖最后由 16777216 于 2015-5-14 19:37 编辑
//字符打印十六进制数组
//buf 16进制数组,len 长度
#pragma optimize(0)
void Hex_to_str(uint8_t* ptr_dst,uint8_t * ptr_readbuf,uint8_t len)
{
uint8_t a;
uint8_t* ptr,*dst;
ptr=ptr_readbuf;
dst=ptr_dst;
while(len>=1)
{
a=(((*ptr)&0xf0) >>4); if(a>9) a+='A'-'9'-1;
*dst=a +'0';
dst++;
a=((*ptr) &0x0f); if(a>9) a+='A'-'9'-1;
*dst=a +'0';
dst++;
*dst=0x20;
dst++;
ptr++;
len--;
APP_NINGBO_SANXING_ELECTRIC_CO_LTD();
}
*dst='\0';
}
*dst=a +'0';
这句话,这个赋值。
后来发现汇编不会在这句话后立即给 *dst赋值,而是在dst+1后刷新 *dst
//后来发现莫名奇妙就好了 不知道为什么呢
//该函数在优化等级9的时候,dst不会被赋值,在无优化的情况下才能正常运行,问下高手如何避免优化导致的程序错误
|