硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5961|回复: 0
收起左侧

_ucpAscII[i] =  ucTemp; 指针形参 编译器优化问题

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2014-9-21 08:08:15 | 显示全部楼层 |阅读模式
        /* 如果这样访问 _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';
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 17:51 , Processed in 0.145183 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表