<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一套基于增強型8051內核的應用裸機框架

          共 1977字,需瀏覽 4分鐘

           ·

          2021-10-09 22:10

          8051-ELL 簡介

          8051-ELL,是根據新一代增強型8051為內核的MCU,基于keil開發(fā)的硬件抽象平臺。ELL庫充分考慮8051的特性,結合硬件條件,提供了大量標準的API函數,供開發(fā)者訪問底層硬件細節(jié)。ELL的大小支持裁剪,在代碼密度和執(zhí)行效率上做到了很好的平衡。

          ELL是efficient low-layer的縮寫,意思是高效低封裝,結合了HAL庫和LL庫的編程思想,既保證了通用性又降低了flash的過度占用??芍^是一舉兩得,高效、簡潔、好用!

          8051-ELL庫支持Keil4和Keil5,支持Vscode協(xié)同開發(fā),推薦使用EIDE插件。目前ELL庫主要適配了STC公司的單片機型號,以STC8系列為主。后續(xù)計劃增加STC12、STC15、STC16系列。

          函數庫遵循 Apache 許可證 2.0 版本,可免費在商業(yè)產品中使用,不需要公布應用程序源碼,沒有潛在商業(yè)風險。

          新手如何入門

          進入 8051-ELL文檔中心?可查看?入門教程?。

          ELL采用了一個裸機框架來組織庫文件??蚣馨▋纱蟛糠郑汗こ涛募蛶煳募?/p>

          工程文件主要存放Keil工程、Vscode文件、用戶代碼。這里可以根據你的編程習慣進行安排,非常的自由!庫文件才是我們的重頭戲,它主要分為四個部分:核心文件夾、片內外設庫、組件庫、設備驅動庫。其中組件庫和設備驅動庫單獨發(fā)展,不放在本倉庫內。

          ELL倉庫目錄結構

          一級目錄二級目錄描述
          doc...一些文檔資料
          examples---示例代碼

          STC8AxSTC8A系列的示例代碼

          STC8CxSTC8C系列的示例代碼

          ...其他型號
          libraries---ELL庫文件

          core寄存器和啟動文件

          peripherals芯片的片內外設庫
          project---模板工程

          STC8AxSTC8A系列的模板工程

          STC8CxSTC8C系列的模板工程

          ...其他型號

          下面是ELL庫的框架圖:

          整個固件庫,充分利用了keil的一些特性,比如使用LX51擴展鏈接器/定位器,優(yōu)化了BL51的功能,可以生成更小的目標文件等。

          源代碼閱讀指導

          一、基本架構

          設計框架上,ELL分為三個組成部分,分別是片內外設庫、組件庫、設備驅動庫。片內外外設庫是核心庫,包含MCU的片內外設驅動,是ELL的核心組成;組件庫和設備驅動庫,開放給開發(fā)者,可以編寫自己的驅動和移植軟件包。

          文件細節(jié)上,ELL有l(wèi)ib文件夾和project文件夾組成。

          lib文件夾包含startup文件夾、core文件夾、peripherals文件夾。startup文件夾存放啟動代碼,是匯編語言;core文件夾存放MCU的寄存器文件和ELL核心數據類型文件,同時它還負責管理MCU的中斷(比如定義中斷號);其他文件夾和設計框架一一對應。

          project文件夾,存放Keil-C51工程,后續(xù)會支持IAR和SDCC。具體包含main文件夾、application文件夾、build文件夾。main文件夾存放系統(tǒng)的初始化文件和中斷服務函數文件;application文件夾存放開發(fā)者自己的代碼;build文件夾存放編譯的燒錄文件和匯編文件。

          二、數據結構

          ELL采用了面向對象的封裝思想,但是考慮51的資源和性能,又做了一些調整和取舍。對于同類外設,且工作模式的外設,采用結構體+枚舉體的方式封裝;對于單個外設,且比較抽象的,采用函數傳參完成封裝,但是傳參的參數,仍然采用枚舉體或者格式統(tǒng)一的宏來封裝。

          結構體+枚舉體的封裝里,枚舉體作為結構體成員,主要是負責某一個功能或參數的設置,而包含這些枚舉體成員的結構體,往往代表一個外設的全部信息。

          除此之外,ELL靈活運用了宏的特性,具體有宏函數、控制宏、宏傳參。宏函數是對寄存器操作進行封裝,以保證執(zhí)行效率的同時,提高可讀性;控制宏用來裁剪ELL的功能和做一些配置工作。

          支持的型號及外設

          √代表已經支持、空代表MCU沒有這個外設、?X代表還沒有適配

          STC8系列

          部分型號可能有所差異,詳情可查看官方數據手冊。

          型號定時器IO中斷系統(tǒng)時鐘PCAPWMMPWMHPWMEEPROMADCMDU16比較器USBLEDRTCTKEY
          STC8A系列XX




          STC8C系列








          STC8F系列









          STC8G系列

          XX

          STC8H系列


          XXXXX

          聯(lián)合開發(fā)

          一、代碼編寫準則

          1.宏命名:全部采用字母大寫;

          宏函數:
          #define?NVIC_COMP_CTRL(run)????do{CMPCR1?=?(CMPCR1?&?0xCF)|(run?<
          普通宏:
          #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.代碼注釋規(guī)范:采用Doxygen規(guī)范,具體細節(jié)可參考庫源代碼。

          /**
          ?*?@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文件做了區(qū)域劃分,使得代碼管理更加規(guī)范。

          /*-----------------------------------------------------------------------
          |????????????????????????????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?([email protected])

          ?*?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?.
          **/
          /*-----------------------------------------------------------------------
          |???????????????????????????????INCLUDES????????????????????????????????|
          -----------------------------------------------------------------------*/

          /*-----------------------------------------------------------------------
          |?????????????????????????????????DATA??????????????????????????????????|
          -----------------------------------------------------------------------*/

          /*-----------------------------------------------------------------------
          |???????????????????????????????FUNCTION????????????????????????????????|
          -----------------------------------------------------------------------*/

          /*-----------------------------------------------------------------------
          |???????????????????END?OF?FLIE.??(C)?COPYRIGHT?zeweni??????????????????|
          -----------------------------------------------------------------------*/

          二、模塊開發(fā)指導

          ELL使用git管理源代碼,使用gitee作為主倉庫,github作為備份倉庫。如果想要成為ELL的開發(fā)者,請以gitee倉庫為主。

          一、Fork本倉庫

          首先fork本倉庫當你的賬戶下,然后在此基礎上做開發(fā)。

          二、開發(fā)代碼

          1.寄存器

          為了保持統(tǒng)一的風格,以及最大程度的靈活性,ELL的開發(fā)會細致到寄存器的開發(fā)。但是寄存器頭文件仍然是沿用官方給出的命名規(guī)則,以保證兼容性,但是寄存器的編寫和安排,以模塊化放置。寄存器頭文件存放的位置在libraries/core/register/xxx型號。

          2.數據結構

          可以參考上文的源代碼閱讀指導,核心內容就是結構體+枚舉體+宏的形式,特點是對宏的封裝。

          3.API函數

          可以參考任意一個模塊來設計。

          三、提交PR和Issue

          再完成代碼開發(fā)以后,你可以發(fā)布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

          作者:澤文,編輯:嵌入式應用研究院

          一個漂亮的電子鐘,紀念我們逝去的青春(含軟硬件資料)


          狀態(tài)機的三種騷操作,值得你了解


          絕妙!不用外部電路檢測芯片工作電壓!


          Keil Package常用芯片高速下載地址,含歷史版本,速速收藏!


          實用 | 一個簡單易用的菜單框架

          瀏覽 111
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉伊人手机在线 | 国产在线色吧视频 | 人人色综合 | 亚洲成人h | а√资源新版在线天堂 |