一套基于增强型8051内核的应用裸机框架
8051-ELL 简介
8051-ELL,是根据新一代增强型8051为内核的MCU,基于keil开发的硬件抽象平台。ELL库充分考虑8051的特性,结合硬件条件,提供了大量标准的API函数,供开发者访问底层硬件细节。ELL的大小支持裁剪,在代码密度和执行效率上做到了很好的平衡。
ELL是efficient low-layer的缩写,意思是高效低封装,结合了HAL库和LL库的编程思想,既保证了通用性又降低了flash的过度占用。可谓是一举两得,高效、简洁、好用!
8051-ELL库支持Keil4和Keil5,支持Vscode协同开发,推荐使用EIDE插件。目前ELL库主要适配了STC公司的单片机型号,以STC8系列为主。后续计划增加STC12、STC15、STC16系列。
函数库遵循 Apache 许可证 2.0 版本,可免费在商业产品中使用,不需要公布应用程序源码,没有潜在商业风险。
新手如何入门
进入 8051-ELL文档中心 可查看 入门教程 。
ELL采用了一个裸机框架来组织库文件。框架包括两大部分:工程文件和库文件。
工程文件主要存放Keil工程、Vscode文件、用户代码。这里可以根据你的编程习惯进行安排,非常的自由!库文件才是我们的重头戏,它主要分为四个部分:核心文件夹、片内外设库、组件库、设备驱动库。其中组件库和设备驱动库单独发展,不放在本仓库内。
ELL仓库目录结构
一级目录 | 二级目录 | 描述 |
---|---|---|
doc | ... | 一些文档资料 |
examples | --- | 示例代码 |
STC8Ax | STC8A系列的示例代码 | |
STC8Cx | STC8C系列的示例代码 | |
... | 其他型号 | |
libraries | --- | ELL库文件 |
core | 寄存器和启动文件 | |
peripherals | 芯片的片内外设库 | |
project | --- | 模板工程 |
STC8Ax | STC8A系列的模板工程 | |
STC8Cx | STC8C系列的模板工程 | |
... | 其他型号 |
下面是ELL库的框架图:
整个固件库,充分利用了keil的一些特性,比如使用LX51扩展链接器/定位器,优化了BL51的功能,可以生成更小的目标文件等。
源代码阅读指导
一、基本架构
设计框架上,ELL分为三个组成部分,分别是片内外设库、组件库、设备驱动库。片内外外设库是核心库,包含MCU的片内外设驱动,是ELL的核心组成;组件库和设备驱动库,开放给开发者,可以编写自己的驱动和移植软件包。
文件细节上,ELL有lib文件夹和project文件夹组成。
lib文件夹包含startup文件夹、core文件夹、peripherals文件夹。startup文件夹存放启动代码,是汇编语言;core文件夹存放MCU的寄存器文件和ELL核心数据类型文件,同时它还负责管理MCU的中断(比如定义中断号);其他文件夹和设计框架一一对应。
project文件夹,存放Keil-C51工程,后续会支持IAR和SDCC。具体包含main文件夹、application文件夹、build文件夹。main文件夹存放系统的初始化文件和中断服务函数文件;application文件夹存放开发者自己的代码;build文件夹存放编译的烧录文件和汇编文件。
二、数据结构
ELL采用了面向对象的封装思想,但是考虑51的资源和性能,又做了一些调整和取舍。对于同类外设,且工作模式的外设,采用结构体+枚举体的方式封装;对于单个外设,且比较抽象的,采用函数传参完成封装,但是传参的参数,仍然采用枚举体或者格式统一的宏来封装。
结构体+枚举体的封装里,枚举体作为结构体成员,主要是负责某一个功能或参数的设置,而包含这些枚举体成员的结构体,往往代表一个外设的全部信息。
除此之外,ELL灵活运用了宏的特性,具体有宏函数、控制宏、宏传参。宏函数是对寄存器操作进行封装,以保证执行效率的同时,提高可读性;控制宏用来裁剪ELL的功能和做一些配置工作。
支持的型号及外设
√代表已经支持、空代表MCU没有这个外设、 X代表还没有适配
STC8系列
部分型号可能有所差异,详情可查看官方数据手册。
型号 | 定时器 | IO | 中断 | 系统时钟 | PCA | PWM | MPWM | HPWM | EEPROM | ADC | MDU16 | 比较器 | USB | LED | RTC | TKEY |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
STC8A系列 | √ | √ | √ | √ | √ | √ | X | X | √ | √ | √ | |||||
STC8C系列 | √ | √ | √ | √ | √ | √ | √ | |||||||||
STC8F系列 | √ | √ | √ | √ | √ | √ | ||||||||||
STC8G系列 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | X | X | ||||
STC8H系列 | √ | √ | √ | √ | X | √ | √ | √ | √ | X | X | X | X |
联合开发
一、代码编写准则
1.宏命名:全部采用字母大写;
宏函数:
#define NVIC_COMP_CTRL(run) do{CMPCR1 = (CMPCR1 & 0xCF)|(run << 4);}while(0)
普通宏:
#define PER_LIB_COMP_CTRL 1
2.变量命名:采用动宾结构,单词过长要缩写(保留三个字母),单词之间用_连接;
全局变量说明:要加前缀'G_'; 局部变量说明:首字母小写;
全局变量:
uint8_t G_Uart_Busy_Flg = 0; //Busy flag of receive
局部变量:
uint32_t sysClk_FRE;
5.函数命名:名字+动作形式,单词首字母大写,单词之间用_连接; 函数传参说明:首字母小写;
FSCSTATE MPWMn_Port_Init(MPWMPort_Type port, MPWMCLKSrc_Type clkSrc, uint16_t period)
{...
}
6.代码注释规范:采用Doxygen规范,具体细节可参考库源代码。
/*** @brief PWM端口初始化函数。Init PWM port function.* @details 初始化指定端口(0-5)。Init the specified PWM port. (from 0 to 5)* @param[in] port PWM端口枚举体。PWM port enumerator.* @param[in] clkSrc PWM时钟源。PWM clock source.* @param[in] period PWM周期值(计数器重装载值)。PWM period value (counter reload value)* @return FSC_SUCCESS 返回成功。Return to success.* @return FSC_FAIL 返回失败。Return to fail.
**/
7.利用代码注释,ELL对C文件和H文件做了区域划分,使得代码管理更加规范。
/*-----------------------------------------------------------------------
| FILE DESCRIPTION |
-----------------------------------------------------------------------*/
/*----------------------------------------------------------------------- File name : xxx.c- Author : zeweni- Update date : 2020.01.11- Copyright(C) : 2020-2021 zeweni. All rights reserved.
-----------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| COPYRIGHT NOTICE |
------------------------------------------------------------------------*/
/** Copyright (C) 2021, zeweni (17870070675@163.com)* This file is part of 8051 ELL low-layer libraries.* 8051 ELL low-layer libraries is free software: you can redistribute * it and/or modify it under the terms of the Apache-2.0 License.* 8051 ELL low-layer libraries is distributed in the hope that it will * be useful,but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Apache-2.0 License for more details.* You should have received a copy of the Apache-2.0 License.8051 ELL * low-layer libraries. If not, see <http://www.apache.org/licenses/>.
**/
/*-----------------------------------------------------------------------
| INCLUDES |
-----------------------------------------------------------------------*//*-----------------------------------------------------------------------
| DATA |
-----------------------------------------------------------------------*//*-----------------------------------------------------------------------
| FUNCTION |
-----------------------------------------------------------------------*//*-----------------------------------------------------------------------
| END OF FLIE. (C) COPYRIGHT zeweni |
-----------------------------------------------------------------------*/
二、模块开发指导
ELL使用git管理源代码,使用gitee作为主仓库,github作为备份仓库。如果想要成为ELL的开发者,请以gitee仓库为主。
一、Fork本仓库
首先fork本仓库当你的账户下,然后在此基础上做开发。
二、开发代码
1.寄存器
为了保持统一的风格,以及最大程度的灵活性,ELL的开发会细致到寄存器的开发。但是寄存器头文件仍然是沿用官方给出的命名规则,以保证兼容性,但是寄存器的编写和安排,以模块化放置。寄存器头文件存放的位置在libraries/core/register/xxx型号。
2.数据结构
可以参考上文的源代码阅读指导,核心内容就是结构体+枚举体+宏的形式,特点是对宏的封装。
3.API函数
可以参考任意一个模块来设计。
三、提交PR和Issue
再完成代码开发以后,你可以发布PR请求合并,同时在Issue里面做详细解释。管理员再审核过你的代码后,会将你的PR合并到主仓库。
8051-ELL官网:
https://open-ell.gitee.io/home/#/
API在线手册:
https://8051-ell-api.vercel.app/index.html
开源地址:
https://gitee.com/open-ell/code#https://open-ell.gitee.io/home/#/
B站教学视频:
https://www.bilibili.com/video/BV1i54y1J7Ap
作者:泽文,编辑:嵌入式应用研究院
一套基于增强型8051内核的应用裸机框架相关推荐
- 微机原理及应用->STC25F2K60S2单片机增强型8051内核
STC25F2K60S2单片机增强型8051内核 基本概念 增强型8051 本章英文符号 历史 功能概述 CPU结构 运算器 控制器 存储结构 程序存储器(程序Flash) 片内基本RAM 总结 并行 ...
- 编写基于DM3730 ARM-A8内核测试程序(裸机版)1---X-LOADER启动分析
以前的博文已经说明,基于DM3730单独开发DSP程序是不可行的,因为ARM是主控制器,DSP是协控制器. 因此尝试开发基于ARM的裸机测试程序,只完成对硬件外围电路的基本测试.创龙的开发板无此功能, ...
- 编写基于DM3730 ARM-A8内核测试程序(裸机版)3---X-LOADER/U-BOOT下载
开发板自带的SD启动卡可实现自己更改后X-LOADER/U-BOOT的下载与运行.但是在工控环境,一般不会外置SD卡,故尝试别的烧写方式. 在X-LOADER说明文档中有介绍X-LOADER的少些方法 ...
- RJM8L151S国产8051内核8位带加密算法MCU_替代STM8L151
RJM8L151S系列是一款8051增强型单片机,芯片内置256B内部数据存储器, 8KB的SRAM, 64KB的FLASH,具备快速中断响应,高效低功耗设计,多种休眠模式.片内集成多种安全密码模块, ...
- 51单片机(二)8051内核及STC89C52介绍
我们现在经常使用的STC89C52RC单片机就是基于8051内核的,它是深圳宏晶科技生产的一款单片机,它与MCS-51兼容,下面开始介绍STC89C52RC单片机. 1. STC89C52RC的兼容型 ...
- 首届中国eBPF大会分享---基于eBPF的内核漏洞检测实践
背景 随着智能化.数字化.云化的飞速发展,全球基于Linux系统的设备数以百亿计,而这些设备的安全保障主要取决于主线内核的安全性和健壮性.传统的内核安全存在周期长.效率低以及版本适配的问题,有没有实用 ...
- 基于Arm Cortex内核的32位MCU和MPU(M0、M0+、M3、M4、M33、M7、A7)
基于Arm Cortex内核的32位MCU和MPU ST意法半导体产品矩阵 M3典型--STM32 F1系列Cortex-M3基础型MCU M4典型--带有DSP和FPU指令的STM32F4系列高性能 ...
- shiro+php,一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器
一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...
- Linux内核--基于Netfilter的内核级包过滤防火墙实现
知识基础:本防火墙的开发基于对Linux内核网络栈有个良好的概念,本人对网络栈的分析是基于早期版本(Linux 1.2.13),在明确了网络栈架构的前提下,上升一步分析高级版本内核中的Netfilte ...
最新文章
- (转)Linux 下 查看以及修改文件权限
- 在ASP.NET应用程序中捕捉身份验证状态的变化
- POJ 3690 找星座(2D匹配)(未解答)
- gtx1660是什么级别的_GTX1660Ti到底属于什么系列?Nvidia一句话定性了
- 三、Python第三课——Python中数字的用法及编码原则(Python禅意)
- WEB服务器技术名词
- 5G对人体危害很大?张朝阳回应:并未做过深入研究
- debugfs查看文件块号,dd命令读指定块号的内容
- 手工安装hr表+oracle,[20200825]手工安装HR schema.txt
- Linux vim编辑器简单使用之二:vim操作快捷键、小技巧
- 计算机组成原理英文词汇,“计算机组成原理”课专业词汇英汉对照.pdf
- 开发笔记之数字证书(二):国内数字证书企业与行情介绍
- java 两个图片相似度_JAVA比较两张图相似度
- 【边学边记_10】——8 位7段数码管的动态显示
- php生成统计图类pchart---中文翻译手册
- 9.FLINK Sink\API\自定义sink
- read only status pyCharm
- ESC32 windows 环境搭建【Visual Studio Code】
- Hadoop官方文档翻译—— YARN ResourceManager High Availability 2.7.3
- 第1天:基础入门-概念名词
热门文章
- Jmeter运行后,查看结果树中的响应数据出现中文乱码。
- 互联网日报 | 5月21日 星期五 | 张一鸣卸任字节跳动CEO;腾讯一季度营收1353亿元;微软宣布明年停止支持IE浏览器...
- 项目准备和启动——软件项目合同条款评审
- Python中datetime.timedelta的应用
- Iviews视频搜索引擎
- 【墨子对战平台】还没连接上墨子推演服务器,再等1秒 解决办法
- 百度搜索框提示词下拉列表的制作方法
- 华军:坚持就是胜利(附图)
- OpenGL 实现 RGBA 转 I420
- Vue - 音频播放器插件(vue-aplayer)