61 Star 297 Fork 86

格维融创开源社区 / MCS51-ELL

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README
Apache-2.0

MCS51-ELL 简介

MCS51-ELL,是根据新一代增强型8051为内核的MCU,基于keil开发的硬件抽象平台。ELL库充分考虑8051的特性,结合硬件条件,提供了大量标准的API函数,供开发者访问底层硬件细节。ELL的大小支持裁剪,在代码密度和执行效率上做到了很好的平衡。

ELL是efficient low-layer的缩写,意思是高效低封装,结合了HAL库LL库的编程思想,既保证了通用性又降低了flash的过度占用。可谓是一举两得,高效、简洁、好用!

MCS51-ELL库支持Keil4和Keil5,支持Vscode协同开发,推荐使用EIDE插件。目前ELL库主要适配了STC公司的单片机型号,以STC8系列为主。后续计划增加STC12、STC15、STC16系列。

函数库遵循 Apache 许可证 2.0 版本,可免费在商业产品中使用,不需要公布应用程序源码,没有潜在商业风险。

大家觉得好用的话,记得给个Star,我想上自荐!!!!


当前版本为:1.1.6.0725

B站账号:zevorn

QQ技术支持群: 1001220381


新手如何入门

点击我跳转至B站教学视频

ELL采用了一个裸机框架来组织库文件。框架包括两大部分:工程文件库文件

工程文件主要存放Keil工程Vscode文件用户代码。这里可以根据你的编程习惯进行安排,非常的自由!库文件才是我们的重头戏,它主要分为四个部分:核心文件夹片内外设库组件库设备驱动库。其中组件库设备驱动库单独发展,不放在本仓库内。

ELL仓库目录结构

一级目录 二级目录 描述
doc ... 一些文档资料
examples --- 示例代码
STC8Ax STC8A系列的示例代码
STC8Cx STC8C系列的示例代码
... 其他型号
libraries --- ELL库文件
core 寄存器和启动文件
peripherals 芯片的片内外设库
project --- 模板工程
STC8Ax STC8A系列的模板工程
STC8Cx STC8C系列的模板工程
... 其他型号

下面是ELL库的框架图:

img

整个固件库,充分利用了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合并到主仓库。

技术交流群

欢迎加群,在这里可以帮你解决学习ELL库遇到的问题。

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

About

这是一个专门为增强型1T8051内核MCU设计的硬件抽象平台。 expand collapse
C and 3 more languages
Apache-2.0
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
1
https://gitee.com/gevico/code.git
git@gitee.com:gevico/code.git
gevico
code
MCS51-ELL
master

Search