51单片机也可以移植RTOS

news2025/1/21 1:04:10

说起RTOS移植,我们首先会想到32位单片机。

那么51单片机可以移植RTOS吗?

我的答案是,只要资源够用(ROM空间、RAM空间),可以移植。
前提是你对RTOS的实现原理非常清楚,并且可以自己完成移植工作。

不过,51单片机移植RTOS,已经有牛人做过这个工作,这位大佬移植的是 FreeRTOS操作系统。

今天主要分享一下这个项目(复制,在浏览器打开),如果有兴趣,可以参考学习一下。

https://gitee.com/open-ell/freertos.git

该作者将FreeRTOS移植到了STC32G系列单片机上。项目工程目录如下图

在这里插入图片描述

支持MCS-251(STC32G系列)的FreeRTOS。

使用说明

目前移植的 FreeRTOS 版本支持 STC32G 的 larg-ROM 和 huge-ROM 两个版本

切换larg-ROM的配置方法:

FreeRTOSConfig.h 里面配置configUSE_ROMHUGE 为 0

点击Keil工程配置按钮【Options for Target】

点击【Target】-> 【Code Rom Size】-> Larg模式

点击【Target】-> 【C251】 -> 【Define】 输入 configSUPPORT_MCS251

点击【Target】-> 【C251】 -> 【Level】 选择4级

点击【Target】-> 【C251】 勾选 Link Code

点击【Target】-> 【C251】 勾选 Generate reentrant

切换Huge-ROM的配置方式:

FreeRTOSConfig.h 里面配置configUSE_ROMHUGE 为 1

点击Keil工程配置按钮【Options for Target】

点击【Target】-> 【Code Rom Size】-> Huge模式

点击【Target】-> 【Exeternal Memory】-> 【ROM】 起始地址:0xFE2000 大小:0x1E000

点击【Target】-> 【C251】 -> 【Define】 输入 configSUPPORT_MCS251

点击【Target】-> 【C251】 -> 【Level】 选择4级

点击【Target】-> 【C251】 勾选 Link Code

点击【Target】-> 【C251】 勾选 Generate reentrant

port.c 为移植接口,注释用英文撰写,为了保持字体编码兼容。

为了方便阅读和学习,以C语言编写为主,但这不是最优方案,还可以使用汇编进行优化。

当前方案,在35M速度下:任务切换速度耗时在10us左右,使用汇编优化,可以到5~8us左右。

默认系统时钟24M,可以根据需要,自己调整。

如果要启动软件仿真,需要进行如下操作:

点击Keil工程配置按钮【Options for Target】-> 【Target】-> 【C251】 -> 【Define】 输入 SOFT_DEBUG (注意不要删除configSUPPORT_MCS251)

开启软件仿真以后,不能在真实硬件上跑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国内免费cdn汇总2023最新

内容分发网络简称CDN,其原理大概是将网站内容分发至加速节点,让用户从就近的服务器节点上获取内容,从而提高网站的访问加载速度。大部分服务商(如阿里云,腾讯云,京东云等)的CDN服务是按使用量收…

在Linux开发板上安装HomeAssistant

1. 什么是Home Assistant Home Assistant 使用 Python3 开发的,是一个完整的 UI 管理的家庭自动化生态系统,它运行 Home Assistant Core、Home Assistant Supervisor 和附加组件。它预装在 Home Assistant OS 上,当然也可以安装在任何 Linux…

Android ConstraintLayout 使用入门

ConstraintLayout是Android中一个非常强大的布局管理器,它可以帮助我们快速创建复杂的布局,并且具有很好的性能和可扩展性。在本文中,我将从面试的角度,详细讲解ConstraintLayout的概念、特点、使用方法和示例。 概念 Constraint…

力扣19删除链表的倒数第 N 个结点:思路分析+图文全解+方法总结(快慢指针法递归法)+深入思考

文章目录 第一部分:题目描述第二部分:代码实现2.1 快慢指针法2.2 递归 第一部分:题目描述 🏠 链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) ⭐ 难度:中等 第二部分&#…

Java【网络编程2】 详解基于 UDP 协议的 Socket API, 逐行代码解析如何网络编程

文章目录 前言一、认识 Socket(套接字), TCP 协议和 UDP 协议1, 什么是 Socket(套接字)2, 浅谈 TCP 协议和 UDP 协议的区别和特点 二、基于 UDP 协议的 Socket API1, DatagramSocket 类2, DatagramPacket 类 三、逐行代码解析网络编程1, 逐行解析客户端1.1, 核心成员方法 start…

(转载)从0开始学matlab(第2天)—MATLAB 变量的初始化

当变量初始化时,MATLAB 将会自动建立变量。有三种方式初始化 MATLAB 中的变量: 1 .用赋值语句初始化变量 2 .用 input 函数从键盘输入初始化变量 3 .从文件读取一个数据 前两种方法我们在这里讨论&#xff0c…

Linux -- 进阶 Web服务器 虚拟主机 -- 基于 域名

基于域名的虚拟主机 &#xff1a; 原理 &#xff1a; # 当服务器无法给每个网站都分配一个独立的 IP 地址时&#xff0c;可以通过用户请求的域 名实现不同域名传输不同的网页数据。 域名解析 &#xff1a; 功能 &#xff1a; 域名<>IP &#xff08; 就是 …

E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms

E4A影视APP源码电视盒子酷点TV版4.5 后端对接苹果cms 内带演示apk是为了方便大家调试&#xff0c;必应搜索醉里技术博客http://202271.xyz/?tv 此版带会员功能,对接的是 如意验证1.71版苹果cms后端APP 电视TV4.5版, 会员功能带注册邀请,绑定邮箱,邮箱找回密码,修改新密码,卡…

docker-compose 集成Jenkins部署,打包,发布

前言 需要提前准备的条件 1.git 2.Maven环境 3.Docker环境 4.JDK环境(Centos7.4自带JDK环境去除&#xff0c;重装的JDK) 5.Nodejs #前端发布使用一、 jenkins部署 下载镜像 #查询镜像 docker search jenkins#下载镜像 docker pull jenkins/jenkins编写docker-compose.yml …

【音视频开发】基础知识:视频封装格式和编码格式

文章目录 一、封装格式与编码格式的关系视频编码格式视频封装格式MP43GPRM、RMVBAVI、WMVVOBFLVMKVWebMMOVTS 封装格式与编码格式对应 一、封装格式与编码格式的关系 视频编码格式和视频封装格式的关系及区别 这两者的关系好比酒与酒瓶的关系&#xff0c;编码格式好比酒瓶里的…

Scala 从入门到精通

Scala 从入门到精通 scala风格与java风格 public class JavaDemo01 {public static void main(String[] args) {System.out.println("我爱你中国");} }object ScalaDemo01 {def main(args: Array[String]): Unit {println("我爱你中国")} }javac JavaDe…

24.JT-VUE课堂DEMO

<!DOCTYPE html> <html><head><meta charset"utf-8"><title>hello 入门案例</title></head><body><div id"app"><h1>双向数据绑定测试</h1><h3>{{ hello }}</h3></div&…

YOLO环境配置中一些常见的问题

在入门YOLO时&#xff0c;环境配置是绕不过的坎&#xff0c;本文希望通过列举一些常见的问题&#xff0c;帮大家解决一些疑难杂症。然而不同的电脑&#xff0c;环境配置是有差异的&#xff0c;本文不可能面面俱到&#xff0c;大家还是要掌握自己上网查问题、解决问题的能力。 …

easy X(C语言图形化界面)学习

easy X&#xff08;C语言图形化界面&#xff09;学习 易错&#xff1a;头文件创建窗口 图形填充文字创建输出图片鼠标消息函数(老版)鼠标操作&#xff08;新版&#xff09;键盘消息函数getch() 音乐播放修改窗口标题&#xff0c;弹出框框 易错&#xff1a; 1.文件为&#xff0…

DDP学习/PyTorch多GPU训练/查看模型在哪个GPU上

参考&#xff1a; pytorch如何查看tensor和model在哪个GPU上 https://blog.csdn.net/weixin_37889356/article/details/121792888Part 3: Multi-GPU training with DDP (code walkthrough) [pytorch官方教程&#xff0c;有股咖喱味的Inglish, 推荐] https://www.youtube.com/w…

5月14日第壹简报,星期日,农历三月廿五

5月14日第壹简报&#xff0c;星期日&#xff0c;农历三月廿五坚持阅读&#xff0c;静待花开1. 福布斯中国锂电产业链TOP100发布&#xff0c;宁德时代、赣锋锂业、比亚迪等入选。2. 平均降价84%&#xff01;山东、湖南、江西等多地骨科脊柱类耗材集采中选结果落地。3. 世界旅游组…

【CSS系列】第八章 · CSS浮动

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

anylabeling 自动标注 使用记录 (跑不起来你打我)

目录 一、anylabeling 二、Segment Anything模型ONNX导出 1、下载这个项目 2、环境配置 3、下载SAM预训练权重 4、导出ONNX格式 三、yaml文件编写 四、视频讲解 五、使用记录 六、其他 一、anylabeling anylabeling项目地址 我直接用的之前yolov5的conda虚拟环境 p…

vim编辑器常用命令 (Centos)

1 安装vim编辑器 sudo yum update sudo yum install vim2 设置vim 显示行号 (:set nu) 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步骤2&#xff1a;输入 :set number 或者 :set nu 步骤3&#xff1a;按回车 3 查找 / 步骤1&#xff1a;按 ESC 键 退出本机内容模式 步…

设计模式 - 工厂

文章参考来源 一、概念 创建简单的对象直接 new 一个就完事&#xff0c;但对于创建时需要各种配置的复杂对象例如手机&#xff0c;没有工厂的情况下&#xff0c;用户需要自己处理屏幕、摄像头、处理器等配置&#xff0c;这样用户和手机就耦合在一起了。 可以使代码结构清晰&a…