# MiniRTOS_1 **Repository Path**: jack998/mini-rtos2 ## Basic Information - **Project Name**: MiniRTOS_1 - **Description**: MiniRTOS基于汇编语言 - **Primary Language**: Assembly - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2023-03-06 - **Last Updated**: 2023-03-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### MiniRTOS #### 介绍 MiniRTOS简称MOS 学习并制作RTOS的成果,使用纯汇编打造基于Cortex-M0(亦可使用于M3、M4)内核的超轻量实时操作系统, 为了保证超轻量,只保留内核的必须功能,整个ROM占用将会控制在2KB以内,内核的RAM占用也会控制在128字节以内, 在此前提下会尽量完善内核稳定性及功能。 #### 软件架构 基于Keil 5编译器下Cortex-M0核心的THUMB模式,99%汇编(内核) + 1% C语言(main函数); 在Cortex-M0、M4模式下纯内核编译后占用 1.5K字节ROM+80字节RAM (基于HK32F0301M及AT32F425测得),足够轻量! 纯内核数据占用16字节+内核栈空间32字节+空闲任务栈空间32字节 = 80字节; 自定义任务功能:可选2、4或8个任务,每个任务数据占用16字节+自定义任务栈空间大小; 邮箱功能:每个任务数据中内嵌4字节邮箱供线程间通信; 互斥锁功能:7+1把互斥锁,0~6号锁供任务使用,7号锁内核堆内存分配专用; 堆内存管理功能:自定义堆内存大小; CPU占用率统计功能:统计内核运行中所有任务的CPU占用率; 任务休眠功能:自定义1~65535毫秒任务休眠时长 优先级轮转功能:当前任务号 + 1为每次调度选取的最高优先级任务(如有),在尽可能少的代码行中实现避免互斥锁死锁功能; 最新版本:**v0.8.0** #### 安装教程 下载示例,点击编译运行。 #### 使用说明 暂时只测试了航顺HK32F0301M(Cortex-M0 16KROM 4KRAM 48MHz)和雅特力AT32F425(Cortex-M4 64KROM 20KRAM 96MHz)MCU, 顺带提一下HK32F030M可以直接使用HK32F0301M代码运行。 利用Coremark每MHz得分作为比较参考,MiniRTOS与RT-Thread的得分相比,较RT-Thread性能下降1-(2.624/2.626)=0.0008即性能 下降万分之八(基于AT32F425测得),还有待优化空间,值得努力! #### 参与贡献 codeinmcu (项目发起人) #### 已知问题和待完善功能 **已知问题:** 1. 为了减少ROM占用,MOS基本上不对API调用予以输入参数检查,使用时一定注意各输入参数的正确性 2. 在调用有输出参数的API时候用一定做好检查判断工作,特别是一些指针形式的输出参数(万一变成野指针),一不注意就会HardFault_Handler **待完善功能:** 1. 完成API手册 2. 为了增强实时性(优先级轮转方式最差情况可能会导致本应优先执行的任务延后几毫秒才有机会执行),实现动态优先级调节(也可避免互斥锁死锁) 3. 评估添加多值信号量(如果ROM空间允许) 4. 评估添加各任务CPU占用率记录(如果ROM空间允许) 5. 评估添加任务栈占用率记录(如果ROM空间允许)