查看: 2117|回复: 3

[其他] 子程序的返回值没有赋值给我指定的变量,是否是编译器的BUG

[复制链接]

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
46
最后登录
1970-1-1
发表于 2013-9-5 20:19:50 | 显示全部楼层 |阅读模式
 - CodeWarrior for MCU
     Version: 10.4
     Build Id:130425
特别版
--------------------
// 这个子程序用来判断,输入的日期是否合法。合法返回0,非法返回错误码
uint8_t GoodRtc(uint8_t *p_rtc)
{
    uint8_t days;

    if(p_rtc[YEAR]==0 || p_rtc[YEAR]>99)
    {
        return 1;
    }

    if(p_rtc[MON]==0 || p_rtc[MON]>12)
    {
        return 2;
    }

    days=MonthDays(p_rtc[YEAR],p_rtc[MON]);
    if(p_rtc[DATE]==0 || p_rtc[DATE]>days)
    {
        return 3;
    }

    if(p_rtc[HOUR]>23)
    {
        return 4;
    }
    if(p_rtc[MIN]>59)
    {
        return 5;
    }
    if(p_rtc[SEC]>59)
    {
        return 6;
    }
    return 0;
}
 
 
// 调用
void ComSdt()
{
    uint8_t k;
    int i;
    int buf[7];
    char b[40];
    i=sscanf(&cli_buffer[13],"%d/%d/%d %d:%d:%d",&buf[DATE],&buf[MON],&buf[YEAR],&buf[HOUR],&buf[MIN],&buf[SEC]);

// 调试信息输出
    sprintf(b,"%d %d/%d/%d %d:%d:%d", i, buf[DATE], buf[MON], buf[YEAR], buf[HOUR], buf[MIN], buf[SEC]);
    SciPuts(b);
    if(i!=6)
    {
        SciPuts("Invalid Date or Time.\r\n");
    }
    else
    {
        if(buf[YEAR]>=2000)
        {
            buf[YEAR]-=2000;
        }
        for(i=0;i
我知道答案 目前已有2人回答
捕获1.GIF
捕获2.GIF
捕获3.GIF
回复

使用道具 举报

该用户从未签到

8

主题

299

帖子

0

高级会员

Rank: 4

积分
653
最后登录
2018-12-14
发表于 2013-9-6 13:48:06 | 显示全部楼层

RE:子程序的返回值没有赋值给我指定的变量,是否是编译器的BUG

试试把k 定义成volatile:
volatile uint8_t k;
如果还不行的话就把你的工程传上来 我来试下
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

17

帖子

0

新手上路

Rank: 1

积分
46
最后登录
1970-1-1
 楼主| 发表于 2013-9-9 11:50:41 | 显示全部楼层

RE:子程序的返回值没有赋值给我指定的变量,是否是编译器的BUG

定义成volatile也不行。这个应该和编译器的优化有关。在原来的程序添加了一些其他功能的代码之后,这个地方的错误消失了,但又有另一个子程序出现同样的现象。
这个子程序就是读FLASH中一个字节
uint8_t RdByte(uint16_t addr)
{
return (uint8_t)(*((uint8_t *)addr));
}
无奈改用宏代替了
#define RdByte(addr) (*((uint8_t *)addr))
回复 支持 反对

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-9-17 11:38:28 | 显示全部楼层

RE:子程序的返回值没有赋值给我指定的变量,是否是编译器的BUG

你好,问题解决了吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-9 16:42 , Processed in 0.099637 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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