一、前期准备
1. 准备一个已有的完整工程。本文以硬石工业运动控制开发板YS-F4STD为例,使用其配套的学习资料中的LED+UART工程作为基础。程序运行效果为:LED灯每间隔1秒闪烁一次,同时串口也每隔1秒输出一次当前LED的状态信息。
2. 安装RT-THREAD Pack支持包:只需双击安装文件即可完成安装,无需额外配置。
3. 参考文档:
- MDK环境下移植指南
4. 使用xshell或其他串口调试工具进行通信测试。
二、内核移植步骤
1. 按照下图中标注的操作顺序依次点击,系统将自动完成RT-Thread Nano内核的集成。
2. 编译项目时,出现如下错误提示:
RTE\RTOS\board.c(47): error: ?#35: #error directive: "TODO 1: OS Tick Configuration."
解决方法:参考官方文档中关于系统时钟(OS Tick)的配置说明,将右侧框选区域的代码复制到左侧对应位置。
3. 将上述系统时钟相关代码剪切至board.c文件中,并在文件头部引入必要的头文件声明。
4. 再次编译后,出现三个新的报错信息,需定位到具体行并将其注释掉。
报错内容如下:
处理方式:在同一源文件中,对这些出错的代码段进行注释操作。
5. 编写LED闪烁功能代码,修改main.c文件,具体内容如下:
- a:在头文件部分添加RT-Thread核心头文件:
#include <rtthread.h> - b:于main()函数内部实现LED周期性闪烁逻辑
- c:注意原工程中使用的HAL_Delay()函数不可继续使用,必须替换为rt_thread_mdelay()函数。该函数具备线程调度能力,可触发任务切换,体现实时操作系统多线程调度特性
6. 现象验证:LED灯按预期每秒闪烁一次。
三、为RT-Thread Nano添加控制台与FinSH组件
1. 根据下图所示步骤,按标记顺序进行选项勾选操作。
2. 编译后出现一个报错,需定位该错误的具体位置。
3. 打开rtconfig.h文件,取消对以下语句的注释:
#include "finsh_config.h"
4. 继续编译,仍存在一个报错,需屏蔽对应函数,并补充以下内容:
char rt_hw_console_getchar(void)
{
int ch = -1;
if (__HAL_UART_GET_FLAG(&husart_debug, UART_FLAG_RXNE) != RESET)
{
ch = husart_debug.Instance->DR & 0xff;
}
else
{
if(__HAL_UART_GET_FLAG(&husart_debug, UART_FLAG_ORE) != RESET)
{
__HAL_UART_CLEAR_OREFLAG(&husart_debug);
}
rt_thread_mdelay(10);
}
return ch;
}
- a:加入串口相关的头文件
- b:更新串口句柄参数,确保与工程中实际定义的一致
此时编译通过,但尚未完全实现串口输入输出功能。
5. 在rtconfig.h中解除注释以下宏定义:
#define RT_USING_CONSOLE
6. 编译再次报错,需定位错误点并进行代码增删:
- a:错误位置如下图所示
- b:执行相应代码修改
7. 修改完成后重新编译,确认无任何错误提示。随后编写或更新main.c文件内容。
/* 包含头文件 ----------------------------------------------------------------*/
#include "main.h"
#include "stm32f4xx_hal.h"
#include "usart/bsp_debug_usart.h"
#include "string.h"
#include "led/bsp_led.h"
#include <rtthread.h>
int main(void)
{
// /* 初始化串口并配置串口中断优先级 */
// MX_DEBUG_USART_Init();
//***LED初始化****
LED_GPIO_Init();
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
rt_thread_mdelay(1000);
rt_kprintf("hello set\r\n");
//// printf("hello set\r\n");
//// HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
rt_thread_mdelay(1000);
rt_kprintf("hello reset\r\n");
//// printf("hello reset\r\n");
//// HAL_Delay(1000);
}
}
8. 编译成功且无警告,下载程序至目标板。运行现象:LED正常闪烁,串口持续打印相关信息。
9. 重新编写main.c主函数代码,用于进一步验证系统功能。
10. 使用xshell连接设备,实现主机与开发板之间的信息交互。
四、EtherCAT程序移植过程中遇到的问题
近期尝试将硬石提供的EtherCAT应用程序移植到RT-Thread实时操作系统环境中,但目前尚未成功。主要问题表现为PHY芯片初始化失败,串口输出日志如下:
如您有相关移植经验,欢迎提供指导;若有兴趣共同探讨此技术问题,也可一起交流学习。


雷达卡


京公网安备 11010802022788号







