编译黄山派bt/pan例程报错


如图所示,应该怎么修改,好像是冲突了

同问,也是很多redefinition报错。Halfsweet建议我升级sdk重试,我正在下载。如果你解决了这个问题,也请告诉我

这是环境变量PATH内容太长导致,可以看下build目录下生成的cconfig.h是不是下面这样的,如果不是就是因为PATH导致这个头文件没有生成对了。新版本做了些修改能缩短PATH,并且当gcc执行出错时会报错。

:grin:后面不知道是不是更新了sdk(2.4.0->2.4.1,不太清楚,反正重拉了一次),报错就不见了,变成了另一个DFU的,已经通过文档解决了

#ifdef BSP_BT_CONNECTION_MANAGER
    bt_cm_set_profile_target(BT_CM_HID, BT_LINK_PHONE, 1);
#endif // BSP_BT_CONNECTION_MANAGER

我这是 2.4.0 的版本,编译时就报错,找不到 BT_LINK_PHONE 定义

:hushed_face:在SiFli-SDK\middleware\bluetooth\include\bt_connection_manager.h里,这样是没配置好吧

https://github.com/OpenSiFli/SiFli-Bluetooth/blob/260c29a6d0e934ddde8670c5ef39b9779d790d57/include/ble_connection_manager.h

主分支的源码也一样没有定义,而且这里还有个子仓库,是不是没有及时同步?


不懂 :worried:

具体是哪个commit的报错呢,建议升级到release/v2.4最新节点再试试,之前的可能存在bluetooth还没更新的情况

切换之后重新 install ,再回到 bt/pan 的示例,就没有编译出错了。但是示例的 main 并没有 引入 wheather.c ,以至于readme的效果不一致。所以我连接设备之后,输入 weather 命令 并没有效果。

最后我是继续扩展它的 pan_cmd方法,才看到日志输出,整个 PAN 协议才算验证完成,建议补上:


    else if (strcmp(argv[1], "weather") == 0)
    {
        extern char *get_weather(void); // 声明 get_weather,如果已在头文件中引入可以省略

        char *data = get_weather();
        if (data)
        {
            rt_kprintf("[PAN] Weather data: %s\n", data);
            rt_free(data); // 如果 get_weather() 是 malloc 出来的
        }
        else
        {
            rt_kprintf("[PAN] Failed to get weather.\n");
        }
    }

可以详细说说解决方法吗

不太可能吧

src目录下的SConscript是glob所有文件的,weather.c会加入编译的,我们发布也是测试过天气功能的

SiFli-SDK/example/bt/pan/src/SConscript at v2.4.1 · OpenSiFli/SiFli-SDK

import os
from building import *

# Add source code
src = Glob('*.c')
group = DefineGroup('Applications', src, depend = [''])

Return('group')

当然是加入编译了,我说的是并没有执行入口,还有 doubao.c 也是一样没有触发,作为 PAN 的示例没有联网就没有意义

wheather.c里定义对了weather命令,如果参与了编译,照理就能执行命令了,可以help看下有哪些命令

__ROM_USED void doubao(int argc, char **argv)
{
webclient_post_request();

}
MSH_CMD_EXPORT(doubao, doubao AI application)

请参考doubao.c里面的扩展呢

MSH_CMD_EXPORT 是扩展的fish命令
”doubao“ 是关键字,注意编译的时候确认doubao.c 编译成功呢