硬汉嵌入式论坛

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

[MDK] 今天又碰到一个怪事情 全局变量值读不出

[复制链接]

12

主题

63

回帖

99

积分

初级会员

积分
99
发表于 2024-7-11 17:32:20 | 显示全部楼层 |阅读模式

十分灵异的事件
RTX+EMWIN
使用了一劳永逸的boot+app玩法

编写了一个结构体 WriteUpdataError
然后申明了一个为全局变量 stWriteUpdataError

函数1:FucCleanWriteUpdataError里面把stWriteUpdataError的成员都初始化为0
函数2:FucWrite里面更新数据,如果更新错误,就stWriteUpdataError成员为1
函数3:FucInit调用函数1和函数2

FucInit 先调用函数1清stWriteUpdataError,然后FucWrite,最后直接在FucInit里面读取stWriteUpdataError成员值

结果问题出现了,在FucWrite里面读到值已经为1,结果FucInit里面读取出来的值却为0

然后调试看了,发现stWriteUpdataError值一直是1的,但FucInit一直读不到,一直为0

我尝试把stWriteUpdataError成员,全部前面增加__IO来定义, 例如__IO uint8_t ucInput;

还是一样的结果;

这个是在初始化的时候运行了一次,当后面运行后,后面再同样调用则都能正确读取,只有在初始化的时候才会这么灵异

解决方法:
把函数1提出到FucInit外面先执行,则运行正常,无论加不加__IO定义;

编译使用了Os balanced模式,其他暂时没有测试

这个不知道是什么原因造成这样的结果,只能后面有空再用调试模式看看汇编怎么回事了

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-7-12 09:21:09 | 显示全部楼层
这种情况,不排除程序里面有其他隐含的bug没找到。
回复

使用道具 举报

12

主题

63

回帖

99

积分

初级会员

积分
99
 楼主| 发表于 2024-7-12 10:50:09 | 显示全部楼层
eric2013 发表于 2024-7-12 09:21
这种情况,不排除程序里面有其他隐含的bug没找到。

具体还不太清楚

之前是这样调用的

cleanflag()
{
  flag.a = 0;
flag.b = 0;
}

writflag()
{
   flag.a = 1;
   flag.b = 1;   

    // 这里能读取到值都为1
    rtt(flag.a);
    rtt(flag.b);
}

fucInit
{
    cleanflag();
    writeflag();   

    // 这里读取到值为0
   // 但调试watch的时候,他的值其实都为1
    rtt(flag.a);
    rtt(flag.b);
}

main()
{
   fucInit();
}

解决的方法
main()
{
  cleanflag();
  fucInit();
}

这样在fucInit里面就能读取到对应的值了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-7-13 08:54:22 | 显示全部楼层
flying1104 发表于 2024-7-12 10:50
具体还不太清楚

之前是这样调用的

或者可以弄个简单的helloworld工程试试,应该是没问题的。

不出意外应该是现在这个工程有地方影响了。
回复

使用道具 举报

8

主题

65

回帖

89

积分

初级会员

积分
89
发表于 2024-7-13 16:04:01 来自手机 | 显示全部楼层
建议在实际硬件上测试,标志清零,熄灭led,标志置位,点亮led。加个delay。仿真有时看到的现象,不能说明问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 20:44 , Processed in 0.050329 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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