郁闷, 软件优化的问题!
本帖最后由 wangxj_nemo 于 2012-9-5 16:46 编辑STM32芯片,72M速度,RAM仿真方式在串口能出来想要的数据,但是RELEASE版本在//method 1 no works,why?
for(uint8_t k = 0; k < 4; k++)
DebugStringAppend(&__gDbgInfo, wuSlave24GRxBuffer.rxHu.rxBuffer); 的就出不来数据,在 //method 2 works,but no good for display
uint8_t k = 0;
for(; k < 4; k++)
__gDbgInfo.Ch = wuSlave24GRxBuffer.rxHu.rxBuffer;
__gDbgInfo.Ch = '\n';
__gDbgInfo.Ch = '\0';就可以,,貌似优化的问题,DBG_INFO_T __gDbgInfo加volatile也用过了就是不行,请教大牛这是为什么?
背景代码如下,DebugStringAppend是在中断中调用.用于转HEX数据为ASSIIC字符串,方便显示typedef enum DBG_TYPE_T{
DBG_IDLE = 0,
DBG_INITIALING = 1,
DBG_INIT_OVER = 2,
}DBG_TYPE_T;
static char hexString[] = "0123456789ABCDEF";
#pragma pack(1)
typedef struct DBG_INFO{
uint8_t Ch;
uint8_t len;
DBG_TYPE_T type;
}DBG_INFO_T;
DBG_INFO_T__gDbgInfo = { {'\0'}, 0, DBG_IDLE};
void DebugStringInit(DBG_INFO_T *str)
{
str->Ch = '\0';
str->len = 0;
}
void DebugStringAppend(DBG_INFO_T *dbg,char c)
{
if(dbg->len != 0)
{
dbg->len -= 2;
dbg->Ch = ' ';
}
dbg->Ch = hexString[(c & 0xF0) >> 4];
dbg->Ch = hexString[(c & 0x0F) >> 0];
dbg->Ch = '\n';
dbg->Ch = '\0';
}
if(__gDbgInfo.type != DBG_IDLE)
{
DebugInfoOut(__gDbgInfo.type);
__gDbgInfo.type = DBG_IDLE;
}
void DebugInfoOut(DBG_TYPE_T infoType)
{
switch( infoType )
{
case DBG_IDLE:
break;
case DBG_INITIALING:
DbgSysInitial();
break;
}
}
void DbgSysInitial(void)//1 初始化
{
const char *pstr = sysInitial;
while(*pstr){
while(USART_GetFlagStatus(SYS_DBG_UART,USART_FLAG_TXE)==RESET);
USART_SendData(SYS_DBG_UART, *pstr++);
}
}
页:
[1]