RT-Thread论坛
直播中

刘勇

8年用户 1420经验值
私信 关注
[问答]

K210bsp烧录后复位,运行的是main里面的代码吗?

https://github/RT-Thread/rt-thread/tree/master/bsp/k210

根据上面链接中教程,通过env编译bsp文件,得到bin文件(在...RT-Threadrt-threadbspk210目录下)烧录到板子上。
更新软件包后在...RT-Threadrt-threadbspk210packagesK210-SDK-latestsrchello_world下有个main文件,
同时...RT-Threadrt-threadbspk210applications下有个main文件。
这两个中哪一个我在按下复位键后可以运行其中代码?
我使用env编译是在...RT-Threadrt-threadbspk210目录下,这有问题吗,还是要在...RT-Threadrt-threadbspk210packagesK210-SDK-latest下面的某个位置



回帖(1)

杨万富

2025-9-19 17:36:44

根据你的描述和RT-Thread的BSP结构,烧录后复位运行时执行的代码是 .../rt-thread/bsp/k210/applications/main.c 中的代码。以下是详细分析:




1. 关键目录的作用




  • bsp/k210/applications/main.c

    这是 用户应用程序的标准入口。RT-Thread的BSP框架约定:  



    • 系统启动后会自动调用该文件中的 int main(void) 函数。  

    • 这是RT-Thread项目的标准结构,你的自定义代码应放在这里。




  • bsp/k210/packages/K210-SDK-latest/src/hello_world

    这是 K210 SDK软件包自带的示例代码(非主入口)。  



    • 它属于软件包(package)的一部分,通常需要主动调用或在配置中启用才会被编译。  

    • 默认不作为主程序入口,除非你在构建配置中替换了默认的 main()






2. 构建流程解析




  • 编译目录的正确性

    你在 .../rt-thread/bsp/k210 下使用 env 编译是正确的。  



    • RT-Thread的构建系统(scons + env)会读取该目录下的 rtconfig.hKconfig 文件,自动链接所有依赖(包括软件包)。  

    • 生成的固件(如 rtthread.bin默认以 applications/main.c 为入口




  • 软件包的作用

    K210-SDK-latest 是外挂的驱动/工具库(如摄像头、LCD驱动等)。  



    • 它的 hello_world/main.c 只是一个示例,不会覆盖 applications/main.c 的入口地位。  

    • 如需调用SDK功能,需在 applications/main.c#include 并调用相关API。






3. 烧录后执行流程



  1. 系统启动 → 执行硬件初始化(由 driverslibraries 目录的代码处理)。

  2. 初始化RT-Thread内核 → 创建主线程。

  3. 自动调用 applications/main.c 中的 main() 函数,执行你的逻辑。




4. 验证方法




  • applications/main.c 添加调试语句:  


    #include 

    int main(void)
    {
      rt_kprintf("Hello from applications/main.c!n");  // 串口将打印此消息
      while (1) {
          rt_thread_mdelay(1000);
      }
      return 0;
    }

    重新编译烧录后观察串口输出,即可确认入口位置。




  • 检查构建日志

    编译时输出的日志会显示链接了哪些文件。查找 applications/main.o,确保它是主程序的一部分。






5. 常见问题




  • 修改了代码但固件未更新?

    执行 scons -c 清理旧构建,再重新编译。




  • 软件包的示例如何运行?

    需要手动在 applications/main.c 中调用SDK函数(例如调用 hello_world_demo()),或通过 menuconfig 启用软件包的自带示例(但入口仍在 applications/main.c)。






结论


复位后执行的代码bsp/k210/applications/main.c

编译目录正确bsp/k210/ 是标准路径。

无需操作packages/K210-SDK-latest/ 下的代码默认不直接作为入口。


建议将你的代码放在 applications/main.c 中,并确保在 menuconfig 中启用了所需软件包功能。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分