5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 3385|回复: 27
打印 上一主题 下一主题

Pixhawk 飞控代码中的一处BUG

[复制链接]
跳转到指定楼层
楼主
发表于 2014-5-9 00:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 src/modules/systemlib/param/param.c 文件的param_save_default函数

511行。res变量没有初始化 。导致后面的param_export函数可能不会执行


int
param_save_default(void)
{
        int res;
        int fd;

        const char *filename = param_get_default_file();

        /* write parameters to temp file */
        fd = open(filename, O_WRONLY | O_CREAT);

        if (fd < 0) {
                warn("failed to open param file: %s", filename);
                return ERROR;
        }

        if (res == OK) {
                res = param_export(fd, false);

                if (res != OK) {
                    warnx("failed to write parameters to file: %s", filename);
                }
        }
。。。。
}


这个判断逻辑究竟是什么 还不清楚,问题已经提交到px4项目, 暂时可以将511行的res 赋值为OK来规避


欢迎继续阅读楼主其他信息

沙发
 楼主| 发表于 2014-5-9 00:44 | 只看该作者
Px4那边确认了这是一个重要的问题,不过他们打算把那行判断给删除来解决。来不及等官方更新的同学自己编译下代码吧
3
发表于 2014-5-9 01:07 | 只看该作者
我最喜欢比我有文化的人了。
4
发表于 2014-5-9 05:33 | 只看该作者
顶顶高手
5
发表于 2014-5-9 08:37 | 只看该作者
必须顶
6
发表于 2014-5-9 08:43 | 只看该作者
本帖最后由 jujumao 于 2014-5-9 08:46 编辑

if (res == OK) {
                res = param_export(fd, false);


是有问题。看上下文res是判断能否成功写入的变量,
应该直接 res = param_export(fd, false);然后再判断res返回值就可以了

7
发表于 2014-5-9 09:15 | 只看该作者
就是不知道这行代码是做什么用的……
8
发表于 2014-5-9 09:30 | 只看该作者
写呲了应该是...
9
发表于 2014-5-9 09:46 | 只看该作者
展开OK的宏定义是多少,0?编译器在有些编译参数的情况下会自动把变量初始化成0的,所有那个param_export还是有可能执行的
10
发表于 2014-5-9 10:02 | 只看该作者
dawanpi 发表于 2014-5-9 09:46
展开OK的宏定义是多少,0?编译器在有些编译参数的情况下会自动把变量初始化成0的,所有那个param_export还 ...

局部变量不会自动初始化为0的

11
发表于 2014-5-9 10:13 | 只看该作者
jujumao 发表于 2014-5-9 10:02
局部变量不会自动初始化为0的

这个参数呢?-finit-local-zero,不过我没试过

12
发表于 2014-5-9 10:46 | 只看该作者
dawanpi 发表于 2014-5-9 10:13
这个参数呢?-finit-local-zero,不过我没试过

指定编译参数就另说了,不过还是初始化安全点。


13
发表于 2014-5-9 10:51 | 只看该作者
jujumao 发表于 2014-5-9 10:46
指定编译参数就另说了,不过还是初始化安全点。

对,而且最好加上-Wuninitialized来检查一下是不是有没初始化的变量

14
发表于 2014-5-18 01:13 | 只看该作者
代码还不成熟啊,影响飞行品质!
15
发表于 2014-5-18 09:57 | 只看该作者
崇拜。代码什么的最难了

来自苹果客户端
16
发表于 2014-5-18 11:57 | 只看该作者
主要是没完整研究代码,就这几句的来看,我觉得  if (res == OK) 里面的res可能写错了,应该是fd的,程序员不会逗比到随便没实体化的变量去判断的!
17
 楼主| 发表于 2014-5-19 00:41 | 只看该作者
zmin21 发表于 2014-5-18 11:57
主要是没完整研究代码,就这几句的来看,我觉得  if (res == OK) 里面的res可能写错了,应该是fd的,程序员 ...

fd在上面已经判断拉~
这个不是程序员的错, 一般在大量的分支合并和版本***迭代时代码的支线合入或合并补丁时容易发生这种错误
目前px4主线版本和稳定版都已经合入了这个BUG

18
发表于 2014-5-23 23:59 | 只看该作者
liio 发表于 2014-5-19 00:41
fd在上面已经判断拉~
这个不是程序员的错, 一般在大量的分支合并和版本***迭代时代码的支线合入或合并 ...


上面的是<0的判断,后面用==OK的判断,没矛盾....就好像前面是<0一种情况,然后==0一种情况,>0又是一种情况,所以不能直接用 if else,只能判断两次
19
发表于 2014-7-24 09:01 | 只看该作者
lili,请问 你的qq 多少啊,我是 研究生,我们组 几个小伙伴 正在研究 pixhawk 这套代码,编译的时候 也出现了问题,我qq 是2475870358,希望 能加你联系一下,谢谢!

20
发表于 2014-7-24 09:30 | 只看该作者
牛。。。。。。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

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