本文介绍了我个人在野火H743开发板上移植RT-Thread Nano版操作系统的一些经验和过程,希望能够和大家一起学习,共同进步
准备工作
准备材料:
- H7开发板一块
- RTT源码一份
- H7裸机程序一份(带串口发送功能)
H743开发板
RTT-Nano源码一份,建议前往RTT官网下载https://www.rt-thread.org/document/site/tutorial/nano/an0038-nano-introduction/,点击箭头即可下载
裸机工程自行准备
将下载完成的RTT源码和裸机工程放入同一文件夹
第一步:RTT源码添加到工程目录
-
在裸机工程的首目录中新建RT-Thread文件夹,用于存放RTT源码
-
在User文件夹中新建board文件夹
-
将RTT源码中的src文件夹和include文件夹以及libcpu中arm文件夹下的cortex-M7文件架复制到原裸机工程的RT-Thread文件夹下
-
将rtt源码中bsp文件夹下的board.c和rtconfig.h文件分别复制到User的board文件夹和User文件夹根目录中。
第二部:keil中添加工程
- 打开keil5软件,在工程中新建KERNEL文件夹和CORTE-M7文件夹
- 在KERNEL文件夹中添加src文件夹中的所有c程序
- 在CORTE-M7文件夹中添加 context_rvds.S 和 cpuport.c文件
- 把新添加的RTT文件夹添加到keil目录中去
keil程序编写
完成上述步骤后,点击编译会出现缺少.h文件的错误,注释箭头所示头文件即可
注释后再度编译,会出现如下错误,这是由于引入操作系统过后,系统会接管部分系统中断,而导致的重复定义,我们需要把it.c中的对应中断函数注释即可。
再次编译,会提示缺少rt_hw_borad_init()函数,如图所示这是由于没有将之前的board.c和rtconfig.h文件添加到工程。
把board.c和rtconfig.h添加到工程中,即可解决问题。
接下去,我们需要将rt_kprintf()函数进行重定义,方便我们查看内核的调试信息。通过F12定位rt_kprintf()函数我们可以看到rt_kprintf()函数调用了
void rt_hw_console_output(const char *str);
这一函数,而该函数在操作系统中使用了weak关键字,即弱定义,我们只需要在程序里合适的地方再对该函数进行重定义即可使用rt_kprintf函数。
void rt_hw_console_output(const char *str)
{
Usart_SendString((uint8_t *)str);
}
我们将函数写在了野火提供的bsp库,usart文件中。然后我们只需要在board.c中的rt_hw_board_init()函数中添加串口初始化函数,rt_kprintf()函数即可正常使用
我们将程序下载到板子上进行测试,打开串口调试助手,可以看到串口成功打印出了RT-Thread的版本信息。
最后,我们需要把rtconfig.h当中的RT_USING_HEAP宏开启,该宏的作用是打开内存管理,rtt中main函数是作为线程的形式存在,所有要打开后才可以执行main函数里面的相关内容。
至此,RTT的移植已经完成,接下来就可以使用包括创建线程等RTOS的相关操作。