<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>

          BabyOS為 MCU 項(xiàng)目開發(fā)提速的代碼框架

          聯(lián)合創(chuàng)作 · 2023-09-26 16:29

          BabyOS適用于MCU項(xiàng)目,她是一套管理功能模塊和外設(shè)驅(qū)動(dòng)的框架。

          對(duì)項(xiàng)目而言,縮短開發(fā)周期。項(xiàng)目開發(fā)時(shí)選擇適用的功能模塊及驅(qū)動(dòng)。直接進(jìn)入功能代碼編寫的階段。

          對(duì)工程師而言,減少重復(fù)工作。調(diào)試過的功能模塊和驅(qū)動(dòng)代碼放入BabyOS中管理,以后項(xiàng)目可以直接使用,去掉重復(fù)調(diào)試的工作。

          代碼結(jié)構(gòu)

          BabyOS代碼分為3部分:

          BabyOS倉庫:功能模塊和驅(qū)動(dòng) ,一般情況下用戶不需要改動(dòng),可以將此倉庫作為子模塊。

          BabyOS_Config:配置文件和設(shè)備注冊(cè)文件

          BabyOS_Hal:硬件抽象層, 不同分支對(duì)應(yīng)不同硬件平臺(tái),選擇對(duì)應(yīng)平臺(tái)下載,沒有合適的則選擇master分支

          frame

          適用項(xiàng)目

          使用裸機(jī)開發(fā)的項(xiàng)目推薦基于BabyOS進(jìn)行。

          使用操作系統(tǒng)開發(fā)的項(xiàng)目,BabyOS可作為功能庫及驅(qū)動(dòng)庫使用。

          使用方法

          基于STM32F107上使用SPIFLASH及KV功能模塊為例

          1.添加文件

          BabyOS							//可作git子模塊使用
          ├── bos
          │   ├── algorithm               //常用算法,無需添加其中文件
          │   ├── core					//核心文件,全部包含至工程
          │   ├── drivers					//驅(qū)動(dòng)文件,選擇spiflash驅(qū)動(dòng)添加至工程
          │   ├── modules					//功能模塊,全部添加至工程,由配置文件b_config.h配置
          │   ├── thirdparty				//第三方代碼,選擇SFUD第三方代碼添加至工程
          │   └── utils					//實(shí)用代碼,選擇delay部分代碼添加至工程
          ├── doc							//相關(guān)文檔
          ├── LICENSE						//開源協(xié)議
          └── README.md
          BabyOS_Config					//克隆后放入工程目錄,全部添加至工程
          BabyOS_Hal						//克隆后放入工程目錄,添加hal、gpio、uart、spi部分
          //進(jìn)入用戶工程目錄執(zhí)行
          git submodule add https://gitee.com/notrynohigh/BabyOS.git
          git clone https://gitee.com/notrynohigh/BabyOS_Config.git    //克隆配置文件及設(shè)備注冊(cè)文件
          git clone https://gitee.com/notrynohigh/BabyOS_Hal.git		 //克隆后切換到對(duì)應(yīng)平臺(tái)的分支,如果沒有則采用master分支作為模板

          2.增加系統(tǒng)定時(shí)器

          //例如使用滴答定時(shí)器,中斷服務(wù)函數(shù)調(diào)用:void bHalIncSysTick(void);
          
          //注:定時(shí)器的周期與b_config.h里_TICK_FRQ_HZ要匹配

          3.選擇功能模塊

          b_config.h進(jìn)行配置,勾選其中的KV Enable/Disable項(xiàng)

          config

          4.注冊(cè)設(shè)備

          //b_device_list.h,在里面添加使用的外設(shè)。例如項(xiàng)目只需要使用SPIFlash,那么添加如下代碼: 
          //           設(shè)備        驅(qū)動(dòng)          描述
          B_DEVICE_REG(SPIFLASH, bSPIFLASH_Driver[0], "flash")
          
          //如果沒有注冊(cè)任何設(shè)備,取消B_DEVICE_REG(null, bNullDriver, "null")的注釋    
          //B_DEVICE_REG(null, bNullDriver, "null")   

          5.修改硬件接口

          b_hal.h中根據(jù)實(shí)際連接圖修改GPIO和SPI號(hào)

          #define HAL_SPIFLASH_QSPI_EN            0
          #define HAL_SPIFLASH_TOTAL_NUMBER       1 
          #define HAL_SPIFLASH_IF                 {{B_HAL_QSPI_INVALID, B_HAL_SPI_1, {B_HAL_GPIOB, B_HAL_PIN12}},}   

          6.修改硬件抽象層SPI部分

          (依賴硬件平臺(tái),使用STM32 HAL庫為例)

          //b_hal_spi.c
          int bHalSPI_Send(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
          {
              if(pbuf == NULL)
              {
                  return -1;
              }
              switch(spi)
              {
                  case B_HAL_SPI_1:
                      HAL_SPI_Transmit(&hspi1, pbuf, len, 0xfff);
                      break;        
                  default:
                      break;
              }
              return 0;
          }
          
          int bHalSPI_Receive(bHalSPINumber_t spi, uint8_t *pbuf, uint16_t len)
          {
              if(pbuf == NULL)
              {
                  return -1;
              }
              switch(spi)
              {
                  case B_HAL_SPI_1:
                      HAL_SPI_Receive(&hspi1, pbuf, len, 0xfff);
                      break;        
                  default:
                      break;
              }
              return 0;
          }

          7.修改硬件抽象層GPIO部分

          (依賴硬件平臺(tái),使用STM32 HAL庫為例)

          void bHalGPIO_WritePin(uint8_t port, uint8_t pin, uint8_t s)
          {
              GPIO_PinState sta = (s) ? GPIO_PIN_SET : GPIO_PIN_RESET;
              HAL_GPIO_WritePin(GPIO_PortTable[port], GPIO_PinTable[pin], sta);
          }

          8.基于SPIFLASH使用KV功能

          #include "b_os.h"    //頭文件
          //b_config.h配置文件中使能KV存儲(chǔ)
          int main()
          {
              uint8_t buf[128]; 
              bInit();    //初始化,外設(shè)的初始化會(huì)在此處調(diào)用
              if(0 == bKV_Init(SPIFLASH, 0xA000, 4096 * 4, 4096)) //初始化KV存儲(chǔ),指定存儲(chǔ)設(shè)備SPIFLASH
              {
                  b_log("bKV_Init ok...\r\n");
              }
              //存儲(chǔ)鍵值對(duì)(可用于存儲(chǔ)系統(tǒng)配置信息)
              bKV_Set("name", (uint8_t *)"BabyOS", 7);
              bKV_Get("name", buf);
              b_log("name:%s\r\n", buf); 
              //......
              while(1)
              {
                  //.....
                  bExec();      //循環(huán)調(diào)用此函數(shù)
                  //.....
              }
          }
          
          

          如果不使用功能模塊,單獨(dú)對(duì)設(shè)備進(jìn)行操作,使用如下方式進(jìn)行:

          //舉例使用SPIFLASH讀取數(shù)據(jù),從0地址讀取128個(gè)字節(jié)數(shù)據(jù)至buf
          {
              int fd = -1;
              fd = bOpen(SPIFLASH, BCORE_FLAG_RW);
              if(fd == -1)
              {
                  return;
              }
              bLseek(fd, 0);
              bRead(fd, buf, 128);
              bClose(fd); 
          }

          更多使用介紹:

          https://gitee.com/notrynohigh/BabyOS/wikis

          https://github.com/notrynohigh/BabyOS/wiki

          瀏覽 25
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <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>
                  日本黄色A片免费看 | 国产69天堂 | 国产精品―色哟哟 | 久草亚洲电影 | 国产一区二区毛片 |