找回密码
 立即注册
查看: 552|回复: 15

一套基于增强型8051内核的应用裸机框架

[复制链接]
  • TA的每日心情

    2024-1-8 16:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10

    主题

    18

    回帖

    354

    积分

    中级会员

    积分
    354
    发表于 2024-1-18 14:10:22 | 显示全部楼层 |阅读模式
    本帖最后由 sbk100 于 2024-1-23 10:07 编辑

    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仓库目录结构

    [td]
    一级目录
    二级目录
    描述
    doc...一些文档资料
    examples---示例代码

    STC8AxSTC8A系列的示例代码

    STC8CxSTC8C系列的示例代码

    ...其他型号
    libraries---ELL库文件

    core寄存器和启动文件

    peripherals芯片的片内外设库
    project---模板工程

    STC8AxSTC8A系列的模板工程

    STC8CxSTC8C系列的模板工程

    ...其他型号

    下面是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系列

    部分型号可能有所差异,详情可查看官方数据手册。

    [td]
    型号
    定时器
    IO
    中断
    系统时钟
    PCA
    PWM
    MPWM
    HPWM
    EEPROM
    ADC
    MDU16
    比较器
    USB
    LED
    RTC
    TKEY
    STC8A系列XX




    STC8C系列








    STC8F系列









    STC8G系列

    XX

    STC8H系列


    XXXXX

    联合开发一、代码编写准则

    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

    点评

    此文是转载,非楼主原创。请各位读者注意,有问题请向原创提问。  发表于 2024-1-23 18:45
    回复 送花

    使用道具 举报

  • TA的每日心情

    2024-1-8 16:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10

    主题

    18

    回帖

    354

    积分

    中级会员

    积分
    354
     楼主| 发表于 2024-1-19 17:16:55 | 显示全部楼层
    代码放在这里了

    code-master.zip

    7.4 MB, 下载次数: 21

    源码

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-18 17:10:58 | 显示全部楼层
    本帖最后由 杨为民 于 2024-1-22 16:17 编辑


    注:1楼是转载,楼主非我认识的原创作者!下面的建议是对原创作者的,不是对楼主的。我收回这个建议。

    建议将你的RTOS也放上来

    点评

    裸机?  发表于 2024-1-18 17:39
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-19 23:42:02 | 显示全部楼层
    楼主,如果这些东西不是你的原创,你介绍别人的东西时应该说明一下,否则就涉嫌抄袭了!



    点评

    下面有源地址啊  发表于 2024-1-20 08:38
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-20 11:35:56 | 显示全部楼层
    楼主,你忘换马甲了!

    马甲.jpg


    点评

    要不你就问问老姚,,反正我们的注册信息都在他那里,,  发表于 2024-1-20 14:01
    什么玩意?你不会认为楼主和我是一个人么?  发表于 2024-1-20 14:00
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    19 小时前
  • 签到天数: 156 天

    [LV.7]常住居民III

    0

    主题

    403

    回帖

    478

    积分

    中级会员

    积分
    478
    发表于 2024-1-20 11:45:28 | 显示全部楼层
    什么情况这是
    靡不有初,鲜克有终
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    2024-1-8 16:35
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10

    主题

    18

    回帖

    354

    积分

    中级会员

    积分
    354
     楼主| 发表于 2024-1-22 13:58:54 | 显示全部楼层
    杨为民 发表于 2024-1-19 23:42
    楼主,如果这些东西不是你的原创,你介绍别人的东西时应该说明一下,否则就涉嫌抄袭了!

    本来就是转载啊 我下面不是贴出地址了吗 你想让我说明什么?

    点评

    “本来就是转载啊 我下面不是贴出地址了吗 你想让我说明什么?” (1)你应该在1楼注明转载两个字,贴出地址不算,因为原创作者也会贴出自己的“gitee”和B站地址。 (2)谢谢你的澄清,我帮你注明、  详情 回复 发表于 2024-1-22 16:10
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-22 16:10:18 | 显示全部楼层
    sbk100 发表于 2024-1-22 13:58
    本来就是转载啊 我下面不是贴出地址了吗 你想让我说明什么?

    “本来就是转载啊 我下面不是贴出地址了吗 你想让我说明什么?”
    (1)你应该在1楼注明转载两个字,贴出地址不算,因为原创作者也会贴出自己的“gitee”和B站地址。
    (2)谢谢你的澄清,我帮你注明、



    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-22 16:39:05 | 显示全部楼层
    说明:1楼是转载,楼主非我认识的原创作者!我在2楼的建议是对原创作者的,不是对楼主的。我收回这个建议。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10906
    发表于 2024-1-23 18:41:59 | 显示全部楼层
    本帖最后由 杨为民 于 2024-1-23 18:56 编辑

    (1)1楼的文章没有任何说明是转载,没有关于原创作者的介绍,在文末给出的gitee和B站链接时,也没有说明是原创的地址。
    (2)根据这些特色,1楼文章属于“抄袭”。
    (3)请大家以此为戒,在转载他人文章时请明确注明原创作者和来源。

    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 19:47 , Processed in 0.097418 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表