|
/* 如果这样访问 _ucpAscII = ucTemp,则 1.41版本EWSTM8S 编译器 居然不编译, 直接优化掉整个{ } 循环体 */
*_ucpAscII++ = ucTemp; ----- 这样写就可以。
1.31 的编译器无此问题。
void HexToAscii(uint8_t *_ucpHex, uint8_t *_ucpAscII, uint8_t _ucLenasc)
{
uint8_t i;
uint8_t ucTemp; /* 奇怪,1.41 EWSTM8S ,不加 volatile 则 { }内代码不编译 */
for (i = 0; i < _ucLenasc; i++)
{
ucTemp = *_ucpHex;
if ((i & 0x01) == 0x00)
{
ucTemp = ucTemp >> 4;
}
else
{
ucTemp = ucTemp & 0x0f;
_ucpHex++;
}
if (ucTemp < 0x0a)
{
ucTemp += 0x30;
}
else
{
ucTemp += 0x37;
}
/* 如果这样访问 _ucpAscII ,则编译器居然不编译,直接优化掉 */
*_ucpAscII++ = ucTemp;
}
*_ucpAscII = '\0';
}
|
|