RT-Thread论坛
直播中

bigbangboom

8年用户 1275经验值
擅长:电源/新能源
私信 关注
[问答]

GD32F427 bootloader添加rt-thread系统后,跳转到app没有执行main()函数是怎么回事?

MCU:GD32F427
bootloader是自己写的
裸机使用没问题,可以正常转跳到APP上,执行main()

在APP上移植了rt-thread操作系统
启动的时候可以打印出logo,但是没有执行APP上的main()

  \ | /
- RT -     Thread Operating System
  / | \     3.1.5 build Jul 10 2024
  2006 - 2020 Copyright by rt-thread team
GD32是通过

nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x8000); // 向量偏移
来修改中断向量偏移量的
因为没有执行到main()函数,所有这个向量表也就没执行

于是我将nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x8000);放到bootloader里面执行,发现可以转跳到APP,并且执行APP上的main()

这个方式感觉只是治标不治本,还是没搞懂为上面添加rtt之后,不执行APP上的main()了?

回帖(1)

杨平

2024-7-11 16:08:06
为了解决这个问题,请按照以下步骤操作:

1. 确保您的bootloader正确地将控制权传递给RT-Thread内核。在跳转到RT-Thread内核之前,确保已经完成了所有必要的硬件初始化和配置。

2. 检查您的RT-Thread内核配置。确保在rtconfig.h文件中正确设置了宏定义,例如:

   - `#define RT_USING_NEWLIB`
   - `#define RT_USING_MINILIBC`

3. 确保您的应用程序入口函数(例如main())已经正确地注册到RT-Thread内核。您可以通过在您的应用程序源文件中添加以下代码来实现这一点:

   ```c
   #include

   int main(void)
   {
       // 您的应用程序代码
   }

   MSH_CMD_EXPORT_ALIAS(main, "Start the main function of the application");
   ```

4. 确保您的应用程序已经正确地编译并链接到RT-Thread内核。检查您的Makefile文件,确保应用程序源文件已经被包含在编译过程中。

5. 如果您的应用程序依赖于特定的硬件驱动或外设,确保这些驱动和外设已经在RT-Thread内核中正确初始化和配置。

6. 使用RT-Thread的调试工具(例如RT-Thread Studio或Keil MDK)进行调试,以便更好地了解程序的执行流程和可能存在的问题。


举报

更多回帖

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