如何在vscode中获得代码提示?

  • hhh wrote: 2024-03-19 12:11 我在ubuntu使用luckfox-pico的sdk进行开发,但当我尝试在vscode里from periphery import GPIO时,发现找不到这个库.
    请问python中的板级控制相关的库在哪里?c++对应的库又在哪里?如果我想在vscode中获得相关代码提示,我又该如何配置?
    如能解答,不胜感激
    您好,首先感谢您对 luckfox-pico 开发方式上的探索。
    python 使用的是解释器机制,在库存放完整的环境中可以直接运行代码,解释器会在运行阶段逐行运行调用机器环境的库。在 vscode 上使用 from periphery import GPIO 找不到库的原因是您所进行代码编辑的环境(PC)与 luckfox-pico 运行的环境不是同一个,在PC上没有安装periphery库所以找不到。在 PC 上编写 luckfox-pico 的 python 代码主要利用IDE的易用性,运行还是在 luckfox-pico 上运行,在PC上运行没有对应的硬件可能会报错。
    当然你可以尝试在PC端下载 periphery 库来让系统可以索引到库从而实现补全(可能存在版本不一样用法不一样的问题)

    Code: Select all

    pip install python-periphery
    
    如果需要获取 python 中的板级控制的相关库可以在 <Luckfox-pico SDK> /sysdrv/source/buildroot/buildroot-2023.02.6/package/ 目录下对应库的地址找到相应源码的地址,比如 python-periphery 库就可以打开对应目录下的Config.in文件,其中 https://github.com/vsergeev/python-periphery 就是对应的源码地址
    peripherylib.jpg

    C/C++ 的运行机制与python不同,经过交叉编译后将可执行程序和对应的动态库文件移动到板端即可运行,所以在补全机制上也有所不同,正常情况下使用系统库需要让 vscode 知道对应的库的include位置,通过头文件的内容实现补全。
    如果仅使用系统库使用vscode 打开对应工程目录(仅存放和工程相关的文件),在生成的.vscode文件夹中添加c_cpp_properties.json文件
    vscodejson.jpg
    添加内容如下

    Code: Select all

    {
        "configurations": [
            {
                "name": "Your cross-compilation toolchain",
                "includePath": [
                    "${workspaceFolder}/**",
                    "<Luckfox-pico SDk>/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/arm-rockchip830-linux-uclibcgnueabihf/sysroot/usr/include/"
                ],
                "defines": [],
                "compilerPath": "<Luckfox-pico SDk>/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc",
                "cStandard": "c11",
                "cppStandard": "c++17",
                "intelliSenseMode": "clang-x64",
                "browse": {
                    "path": [
                        "${workspaceFolder}",
                        "<Luckfox-pico SDk>/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/arm-rockchip830-linux-uclibcgnueabihf/sysroot/usr/include/"
                    ],
                    "limitSymbolsToIncludedHeaders": true,
                    "databaseFilename": ""
                }
            }
        ],
        "version": 4
    }
    
    注意:那 luck-pico SDK 替换为您的 Sdk 绝对地址
    修改完成后再 C/C++ 插件正确安装的情况下就可以实现对系统库的补全了。

    希望这对您有所帮助
  • 非常感谢您的回答!上面的方法被测试为有效
    我现在想用官方例程里的opencv-mobile,那么又如何在vscode获得代码提示?我尝试在c_cpp_properties.json中直接加入 "/workspace/luckfox-pico/MyWorkspace/opencv-mobile/opencv-mobile-4.8.1-luckfox-pico/include"
    但是并没有成功,或许它的依赖关系较为复杂?
    再次感谢您的回复!
  • hhh wrote: 2024-03-20 9:02 非常感谢您的回答!上面的方法被测试为有效
    我现在想用官方例程里的opencv-mobile,那么又如何在vscode获得代码提示?我尝试在c_cpp_properties.json中直接加入 "/workspace/luckfox-pico/MyWorkspace/opencv-mobile/opencv-mobile-4.8.1-luckfox-pico/include"
    但是并没有成功,或许它的依赖关系较为复杂?
    再次感谢您的回复!
    如果使用的项目较大,一般都用 Makefile 或者 CMake 进行编译,您打算使用的例程 opencv-mobile 是通过 CMake 进行管理编译,vscode 有提供插件可以解析 CMake 或者 Makefile 来索引对应的库的头文件,从而达到获取补全符号的效果。简单的使用示例如下:
    1. 安装插件
    Cmake 和 CMake tools
    cmake.jpg
    2. 打开工程

    Code: Select all

    code  <Your Project>
    
    3. 配置工程
    点击 左边菜单栏中的 CMake 图标配置编辑器,选择luckfox-pico 的交叉编译器
    cmake02.jpg
    注意:用CMake配置不用配置 .vscode