请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 4418|回复: 0
收起左侧

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

[复制链接]

398

主题

979

帖子

1780

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1780
发表于 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|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-2-19 13:05 , Processed in 0.156652 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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