楼主: adamzhang414
48 0

[战略与规划] KEIL移植RT-Thread系统 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-8-6
最后登录
2018-8-6

楼主
adamzhang414 发表于 2025-11-27 14:33:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、前期准备

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芯片初始化失败,串口输出日志如下:

如您有相关移植经验,欢迎提供指导;若有兴趣共同探讨此技术问题,也可一起交流学习。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:thread READ keil EAD Directive

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 17:01