# ECBM_HAL **Repository Path**: jimtien/ecbm_hal ## Basic Information - **Project Name**: ECBM_HAL - **Description**: 基于HAL(Hardware Abstraction Layer,即硬件抽象层)的8051库函数。使用VScode强大的字符补充和KEIL的图形化配置,大大的降低了编程难度,加快了开发速度。并且在某一款型号缺货的时候可快移植到其他型号上,这也是硬件抽象的最大优点! - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 18 - **Created**: 2022-05-25 - **Last Updated**: 2022-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ECBM库的强大分支——ECBM_HAL库 ![IDE](https://img.shields.io/badge/IDE-KEIL|VScode-4AC41C)![云端支持](https://img.shields.io/badge/cloud-gitee|github-4AC41C) ![开源证书](https://img.shields.io/badge/license-MIT-0172B2)![库版本](https://img.shields.io/badge/Version-0.1.0-0172B2) ![支持型号](https://img.shields.io/badge/model-8051-e861a4) ## HAL库的由来 STC8真的是一款非常热门的芯片,各种基于STC8的函数库也雨后春笋般涌现出来。各路大神的积极推广让我意识到**项目分享的难易程度**也是开源项目的一个重要属性。如果可以通过分享一个main.c就能让另外一个人编译并跑起来,那么分享属性绝对会大增。要做到这一点,就需要把外设的设置分离出来全集中到main.c中。说白了就是将外设的信息打包成结构体,然后在main.c中补充结构体的内容就实现了咱们的目的。 ## HAL库的基础 HAL是**H**ardware **A**bstraction **L**ayer的简称,即*硬件抽象层*。这是主库**ECBM库V3.0版**和旧型号分支**ECBM_TINY库**都采用的一个结构,通过宏定义把底层的寄存器操作进行包装。包装之后,原来的对寄存器操作就变成了对抽象层的操作,这就消除了不同型号之间的操作区别,同时也让外设与外设之间分离得更加清楚。除了包装寄存器操作外,还将寄存器设置从直接写入变成结构体写入。这大大的提高了外设的**属性可复制性**和**功能可复用性**。 ## KEIL与VScode的强强联手 KEIL,学过51单片机的人基本都知道它。keil的图形化配置界面在一定程度上降低了单片机的使用难度,但是keil for c51不支持函数补全和结构体补全,这就让结构体的应用变得十分困难,因此ECBM主库都会尽量避免出现结构体。 VScode,是微软推出的一款免费的跨平台源代码编辑器。它的代码补全,定义查看等功能十分强大,反正我用了就爱不释手了。 那么两者能强强联手吗?当然是可以!只要在VScode里安装Keil Assistant插件就可以了,安装、使用教程在这里。 ## HAL库的目标 鉴于ECBM_TINY目前并没有多大的起色,所以ECBM_HAL的目标就是直接取代TINY库,从通用8051开始向STC8靠拢。最终和ECBM库合并!实现8位机的大统一。 ## 项目详情 ### 适配情况 #### 标准8051 点击外设库函数名字可以进入到相应的库文档。 - [x] HAL层 - [x] [EXTI库](https://gitee.com/ecbm/ecbm_hal/blob/master/docs/docs_8051/exti.md) - [x] [TIMER库](https://gitee.com/ecbm/ecbm_hal/blob/master/docs/docs_8051/timer.md) - [x] [UART库](https://gitee.com/ecbm/ecbm_hal/blob/master/docs/docs_8051/uart.md) #### 资源消耗 以下数据在KEIL的9级优化下统计得出,不同的编译器版本出来的结果多多少少会不一样,仅供参考。 所谓最低占用就是关闭了当前库的所有使能之后,剩下的一些错误判断代码所占用的空间。 而最高占用就是打开了当前库的所有使能之后,该库全部代码的占用空间。 无论是最低占用还是最高占用,都是单独使能该库之后计算得到,因此会将一些通用计算库(比如地址转换库、浮点计算库等)也包含在内。 如果单片机空间非常紧张,可以不加载那些没有使用过的库来将占用空间变成0 Byte。 | 外设库 | SRAM最低占用 | SRAM最高占用 | Flash最低占用 | Flash最高占用 | | ------ | ------------ | ------------ | ------------- | ------------- | | EXTI | 0 Byte | 9 Byte | 49 Byte | 371 Byte | | TIMER | 0 Byte | 12 Byte | 49 Byte | 1670 Byte | | UART | 8 Byte | 41 Byte | 220 Byte | 1841 Byte | ## 版本号格式 采用gitee提供的语义化版本标准,即: 【主版本号】.【次版本号】.【修订号】,版本号递增规则如下: - 主版本号:做了不兼容的 API 修改, - 次版本号:做了向下兼容的功能性新增, - 修订号:做了向下兼容的问题修正。 主版本号递增的时候,次版本号和修订号清零。 ## 如何学习/提供建议 本库提供了细致的文档在docs文件夹内,按外设分类独立成单个文件存放。可以根据需要查阅。 若对本库有什么建议或者有模块驱动的需求,可以通过新建issues来提供。