IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【单片机笔记】基于Cotex-M3的RT-Thread的移植 -> 正文阅读

[嵌入式]【单片机笔记】基于Cotex-M3的RT-Thread的移植

1、下载官方github源码

? ? ? ? NANO版本

https://github.com/RT-Thread/rtthread-nano/archive/refs/heads/master.ziphttps://github.com/RT-Thread/rtthread-nano/archive/refs/heads/master.zip????????完整发行版

rt-thread 标签 - Gitee.comhttps://gitee.com/rtthread/rt-thread/tags这两个版本的区别顾名思义了,无非是芯片、组件等支持的多少,但是我认为对于内核一样应该是一样的。我这里下载nano版本的,小一点。

分析下源码的目录结构

2、准备一个基础的demo工程,我这里用的是apm32

3、在demo工程下创建一个RT-Thread文件夹用以存放文件

然后将RT-Thread相关文件全部拷贝过到里面去

?

删除不需要的文件以节省工程存储空间
? ? ? ?

????????1)?删除docs、删除其他RT-Thread目录下非目录文件

????????2)BSP下面只保留以下两个文件

? ? ? ? ?3)libcpu目录仅保留所使用的内核即可,我这里使用的是cortex-m3,其他不用的删掉即可?

?

4、打开Demo工程,并配置

? ? ? ? 1)为方便分层,新建3个目录,分别存放内核、接口、配置

? ? ? ? ?2)添加文件

内核添加src下面的文件,全部添加即可。

接口添加libcpu下面对应的文件

这里因为是keil工程,所以添加的是rvds.S,其他gcc/iar添加对应的即可。

配置文件,bsp下面的文件

? ? ? ? 3)配置头文件包含

?????????

? ? ? ? ?4)解决编译报错

定位这个错误,将其删除即可?再次编译

?解决重复定义问题

注释掉原工程对应的函数

?

再次编译

至此报错问题就算解决了。

5、修改时钟及滴答配置

在常用头文件中添加RT-Thread的常用头文件

?延时相关函数


/**  @fn u32 micros(void)
 *  @brief 获取系统运行时间
 *  @param none
 *  @return 系统运行时间:us单位
 *  @note rollover in 70minutes
 */
u32 micros(void)
{
    register u32 uiMs, uiCycleNnt;
    do
    {
        uiMs = millis();
        uiCycleNnt = SysTick->VAL;
    } while (uiMs != millis());
    return (uiMs * 1000) + (usTicks * 1000 - uiCycleNnt) / usTicks;
}

/**  @fn u32 millis(void)
 *  @brief 获取系统运行时间
 *  @param none
 *  @return 系统运行时间:ms单位
 *  @note rollover in 49 days
 */
u32 millis(void)
{
    return rt_tick_get();
}

/**  @fn void delay_us(u32 uiUs)
 *  @brief 微秒延时
 *  @param uiUs : n微秒
 *  @return none
 */
void delay_us(u32 uiUs)
{
    u32 uiNow = micros();
    while (micros() - uiNow < uiUs)
        ;
}

/**  @fn void delay_ms(u32 uiMs)
 *  @brief 毫秒延时
 *  @param uiUs : n毫秒
 *  @return none
 */

void delay_ms(u32 uiMs)
{
	rt_thread_mdelay(uiMs);
}

6、编写线程测试

#include "bsp_led.h"
#include "rthw.h"
#include <rtthread.h>
#include "bsp_systick.h"

static rt_thread_t thread_1;
static rt_thread_t thread_2;

void led1_thread(void *parameter)
{
	while(1)
	{
		LED1_TOG;
		delay_ms(200);
	}
}
void led2_thread(void *parameter)
{
	while(1)
	{
		LED2_TOG;
		delay_ms(200);
	}
}
int main(void)
{
	NVIC_ConfigPriorityGroup(NVIC_PRIORITY_GROUP_4);	/*全部配置为抢占式*/
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_AFIO);
	GPIO_ConfigPinRemap(GPIO_REMAP_SWJ_JTAGDISABLE); /* 关闭JTAG ,保留SWD */
	led_config();
	thread_1 = rt_thread_create("thread_1",led1_thread,0,128,0,30 );
	if(RT_NULL != thread_1)
	{
		rt_thread_startup(thread_1);
	}
	thread_2 = rt_thread_create("thread_2",led2_thread,0,128,0,30 );							
	if(RT_NULL != thread_2)
	{
		rt_thread_startup(thread_2);
	}	
	while(1)
	{
		LED3_TOG;
		delay_ms(1000);
	}
}

?编译发现rt_thread_create接口未定义,需要在rtconfg中把RT_USING_HEAP宏放开。

至此就完成基本的功能移植。

? By Urien 2022.04.05

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:22:24  更:2022-04-06 23:24:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:51:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码