色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于OpenHarmony標準接口的文件讀寫實現(xiàn)案例

福州市凌睿智捷電子有限公司 ? 2022-09-15 10:57 ? 次閱讀

一、簡介

嵌入式領域,F(xiàn)LASH是一種常用的存儲設備,F(xiàn)lash閃存作為嵌入式系統(tǒng)的主要存儲設備有其自身的特性。Fash的寫入操作只能把對應位置的1修改成0,而不能把0修改為1,而擦除Fash就是把對應存儲塊的內容恢復為1。因此,一般情況下向Fash寫入內容時,需要先擦除對應的存儲區(qū)間,這種擦除是以塊(Bock)為單位進行的。閃存主要有NOR和NAND兩種技術。因為Flash存儲器的擦寫次數(shù)是有限的,NAND閃存還有特殊的硬件接口和讀寫時序,于是就出現(xiàn)了專門針對FLASH的文件系統(tǒng)。比較常用的有jffs2,yaffs2,logfs,ubifs。本文基于小凌派-RK2206開發(fā)板 + OpenHarmony輕量級操作系統(tǒng) + LitteFS文件系統(tǒng),通過hal_file標準接口實現(xiàn)對Flash讀寫功能。

二、hal_file標準接口

頭文件://utils/native/lite/hals/file/hal_file.h

1、HalFileOpen()

打開/創(chuàng)建文件,類似于Linux的open函數(shù)。

int HalFileOpen(const char *path, int oflag, int mode);

參數(shù)說明:

名字

描述

path

文件路徑

oflag

參考///utils/native/lite/include/utils_file.hO_RDONLY_FS:只讀O_WRONLY_FS:只寫O_RDWR_FS:讀寫O_CREAT_FS:如果沒有則創(chuàng)建O_EXCL_FS:如果沒有則創(chuàng)建;如有則不能打開O_TRUNC_FS:如果文件存在,則清空文件內容O_APPEND_FS:如果文件存在,則標記位置移動到文件最后

mode

0

返回值為LOS_OK表示成功,其余為失敗。

2、HalFileClose()

關閉文件,類似于Linux的close函數(shù)。

int HalFileClose(int fd);

參數(shù)說明:

名字

描述

fd

文件句柄

返回值為LOS_OK表示成功,其余為失敗。

3、HalFileRead()

從文件中讀取一段內容,類似于Linux的read函數(shù)。

int HalFileRead(int fd, char* buf, unsigned int len);

參數(shù)說明:

名字

描述

fd

文件句柄

buf

從文件讀取內容的緩沖區(qū)

len

從文件讀取內容的大小

返回值為從文件讀取內容的大小,0或者小于0則為失敗。

4、HalFileWrite()

往文件寫入一段內容,類似于Linux的write函數(shù)。

int HalFileWrite(int fd, const char* buf, unsigned int len);

參數(shù)說明:

名字

描述

fd

文件句柄

buf

需要寫入到文件的內容緩沖區(qū)

len

需要寫入到文件的內容大小

返回值為成功寫入到文件的內容大小,0或者小于0則為失敗。

5、HalFileDelete()

刪除文件,類似于Linux的unlink函數(shù)。

int HalFileDelete(const char* path);

參數(shù)說明:

名字

描述

path

文件路徑

返回值為LOS_OK為成功,其余則為失敗。

6、HalFileStat()

獲取文件大小,類似于Linux的stat函數(shù)。

int HalFileStat(const char* path, unsigned int* fileSize);

參數(shù)說明:

名字

描述

path

文件路徑

fileSize

文件內容大小

返回值為LOS_OK為成功,其余則為失敗。

7、HalFileSeek()

文件所在位置移動,類似于Linux的lseek函數(shù)。

int HalFileSeek(int fd, int offset, unsigned int whence);

參數(shù)說明:

名字

描述

fd

文件句柄

offset

文件位置移動位數(shù)

whence

SEEK_SET_FS:從文件開頭移動

SEEK_CUR_FS:從文件當前位置移動

SEEK_END_FS:從文件結尾移動

返回值為LOS_OK為成功,其余則為失敗。

三、程序設計

本例程演示如何在小凌派-RK2206開發(fā)板上使用鴻蒙LiteOS-M內核接口,進行文件讀寫開發(fā)。例程流程如下所示:

(1)創(chuàng)建一個文件;

(2)每5秒進行1次文件讀寫操作;

(3)文件標識移動到文件起始處,讀文件內容,并打印;

(4)文件標識移動到文件起始處,寫文件內容;

(5)循環(huán)上述的第2~4步驟。

1、任務創(chuàng)建代碼分析

在file_example函數(shù)中通過LOS_TaskCreate函數(shù)創(chuàng)建一個線程:hal_file_thread。

void file_example()
{
    unsigned int thread_id;
    TSK_INIT_PARAM_S task = {0};
    unsigned int ret = LOS_OK;

    task.pfnTaskEntry = (TSK_ENTRY_FUNC)hal_file_thread;
    task.uwStackSize = 1024 * 10;
    task.pcName = "hal_file_thread";
    task.usTaskPrio = 25;
    ret = LOS_TaskCreate(&thread_id, &task);
    if (ret != LOS_OK)
    {
        printf("Falied to create hal_file_thread ret:0x%x\n", ret);
        return;
    }
}

APP_FEATURE_INIT(file_example);

2. 文件讀寫代碼分析

hal_file_thread函數(shù)負責打開文件,每5秒移動到文件頭讀取數(shù)據(jù),再移動到文件頭寫入一段內容,重復以上流程。

void hal_file_thread()
{
    int fd;
    char buffer[1024];
    int read_length, write_length;
    int current = 0;

    /* 打開文件,如果沒有該文件就創(chuàng)建,如有該文件則打開
     * O_TRUNC_FS => 清空文件內容
     */
    //fd = HalFileOpen(FILE_NAME, O_RDWR_FS | O_CREAT_FS, 0);
    fd = HalFileOpen(FILE_NAME, O_RDWR_FS | O_CREAT_FS | O_TRUNC_FS, 0);
    if (fd == -1)
    {
        printf("%s HalFileOpen failed!\n", FILE_NAME);
        return;
    }

    while (1)
    {
        /* 文件位置移動到文件開始位置 */
        HalFileSeek(fd, 0, SEEK_SET);
        memset(buffer, 0, sizeof(buffer));
        /* 讀取文件內容 */
        read_length = HalFileRead(fd, buffer, sizeof(buffer));
        printf("read: \n");
        printf("    length = %d\n", read_length);
        printf("    content = %s\n", buffer);

        /* 文件位置移動到文件開始位置 */
        HalFileSeek(fd, 0, SEEK_SET);
        memset(buffer, 0, sizeof(buffer));
        snprintf(buffer, sizeof(buffer), "Hello World(%d) => ", current);
        /* 寫入文件 */
        write_length = HalFileWrite(fd, buffer, strlen(buffer));

        current++;
        LOS_Msleep(5000);
    }

    HalFileClose(fd);
}

四、編譯過程

1、搭建和下載源代碼

我已將OpenHarmony源代碼上傳到Gitee社區(qū)中,大家可以根據(jù)以下網(wǎng)址下載。

https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts

注意:編譯環(huán)境可根據(jù)以下網(wǎng)址來操作:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/vendor/lockzhiner/rk2206/README_zh.md

2、修改編譯腳本

修改vendor/lockzhiner/rk2206/sample路徑下 BUILD.gn 文件,指定 a7_hal_file參與編譯。

"./a7_hal_file:hal_file_example",

修改 device/lockzhiner/rk2206/sdk_liteos路徑下 Makefile 文件,添加 -lhal_file_example參與編譯。

apps_LIBS = -lhal_file_example

3、編譯固件

hb set -root .

hb set

hb build -f

4、燒寫固件

請參考Gitee網(wǎng)址的說明手冊(“燒錄打印”章節(jié)):https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md

五、實驗結果

程序編譯燒寫到開發(fā)板后,按下開發(fā)板的RESET按鍵,通過串口軟件查看日志如下:

HalFileInit: Flash Init Successful!

read:

length = 0

content =

read:

length = 18

content = Hello World(0) =>

read:

length = 18

content = Hello World(1) =>

好了,今天的課程就到這里,我們下次再見!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • OpenHarmony
    +關注

    關注

    25

    文章

    3744

    瀏覽量

    16536
收藏 人收藏

    評論

    相關推薦

    F3系列連接器應用于標準接口及斷線測試面板

    F3系列高密連接器應用于測試設備標準接口及斷線測試面板,在NIPXI開關/負載/信號調節(jié)測試系統(tǒng)中,為被測單元和資源之間構建了一個簡單、高度靈活的連接方案。該測試面板采用騰方中科F3連接器,可將
    的頭像 發(fā)表于 12-09 16:58 ?126次閱讀
    F3系列連接器應用于<b class='flag-5'>標準接口</b>及斷線測試面板

    F3 系列連接器在標準接口與斷線測試面板的應用

    F3 系列高密連接器應用于測試設備標準接口及斷線測試面板,在NI PXI開關/負載/信號調節(jié)測試系統(tǒng)中,為被測單元和資源之間構建了一個簡單、高度靈活的連接方案。 該測試面板采用國產品牌F3 連接器
    的頭像 發(fā)表于 12-09 16:22 ?134次閱讀

    EEPROM輕量級的簡易類文件的數(shù)據(jù)讀寫庫:EEPROMFS

    雖然 EEPROM 相對 Flash 讀寫速度更慢,但 EEPROM 一些獨有特性是 Flash 無法實現(xiàn)的,比如字節(jié)讀寫操作。 所以,EEPROM至今依然應用在很多電子設備上,而且市場還不
    的頭像 發(fā)表于 11-15 16:31 ?611次閱讀
    EEPROM輕量級的簡易類<b class='flag-5'>文件</b>的數(shù)據(jù)<b class='flag-5'>讀寫</b>庫:EEPROMFS

    寫實用程序-mflash

    電子發(fā)燒友網(wǎng)站提供《刷寫實用程序-mflash.pdf》資料免費下載
    發(fā)表于 10-10 09:19 ?0次下載
    刷<b class='flag-5'>寫實</b>用程序-mflash

    接口芯片的讀寫信號與系統(tǒng)的關系

    接口芯片在現(xiàn)代電子系統(tǒng)中扮演著至關重要的角色,它們負責在不同設備或系統(tǒng)之間傳輸數(shù)據(jù)。接口芯片的讀寫信號是數(shù)據(jù)傳輸?shù)幕A,它們確保數(shù)據(jù)能夠正確、高效地在系統(tǒng)中流動。 1. 接口芯片的基本
    的頭像 發(fā)表于 09-30 14:05 ?511次閱讀

    如何在標準接口電路中將光耦合器替換為數(shù)字隔離器

    電子發(fā)燒友網(wǎng)站提供《如何在標準接口電路中將光耦合器替換為數(shù)字隔離器.pdf》資料免費下載
    發(fā)表于 09-27 09:45 ?0次下載
    如何在<b class='flag-5'>標準接口</b>電路中將光耦合器替換為數(shù)字隔離器

    基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在O
    的頭像 發(fā)表于 09-15 08:09 ?474次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用開發(fā):Hello<b class='flag-5'>Openharmony</b>

    基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介 該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。 本案例是基于API 9接口開發(fā)。 本案例已在
    發(fā)表于 09-14 12:47

    基于OpenHarmony標準系統(tǒng)的C++公共基礎類庫案例:SafeBlockQueue

    1、程序簡介該程序是基于OpenHarmony的C++公共基礎類庫的讀寫鎖:SafeBlockQueue。線程安全阻塞隊列SafeBlockQueue類,提供阻塞和非阻塞版的入隊入隊和出隊接口,并提
    的頭像 發(fā)表于 08-30 12:41 ?346次閱讀
    基于<b class='flag-5'>OpenHarmony</b><b class='flag-5'>標準</b>系統(tǒng)的C++公共基礎類庫案例:SafeBlockQueue

    電源芯片研發(fā)生產測試系統(tǒng)開發(fā)API接口實現(xiàn)與ERP的數(shù)據(jù)共享

    為了實現(xiàn)電源芯片測試系統(tǒng)的測試數(shù)據(jù)可以傳輸至客戶的ERP系統(tǒng)中,納米軟件開發(fā)了API接口。作為標準接口,既保證了數(shù)據(jù)傳輸?shù)姆€(wěn)定性,同時也確保了數(shù)據(jù)的安全性。
    的頭像 發(fā)表于 08-13 16:49 ?351次閱讀
    電源芯片研發(fā)生產測試系統(tǒng)開發(fā)API<b class='flag-5'>接口</b>,<b class='flag-5'>實現(xiàn)</b>與ERP的數(shù)據(jù)共享

    基于Openharmony輕量級操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例

    ,一個負責讀取KvStore存儲;(2)每1秒進行1次讀寫操作;程序設計在本章節(jié)中,我們將了解OpenHarmonyKvStore存儲接口,如文件如何獲取數(shù)據(jù)、設置
    的頭像 發(fā)表于 08-07 08:23 ?1049次閱讀
    基于<b class='flag-5'>Openharmony</b>輕量級操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例

    【GD32F303紅楓派開發(fā)板使用手冊】第二十三講 SDIO-SD卡讀寫實

    通過本實驗主要學習以下內容: ?SDIO操作原理 ?SD卡讀寫實現(xiàn)
    的頭像 發(fā)表于 06-23 10:49 ?712次閱讀
    【GD32F303紅楓派開發(fā)板使用手冊】第二十三講 SDIO-SD卡<b class='flag-5'>讀寫實</b>驗

    如何在Openharmony實現(xiàn)USB復合設備

    如何讓Openharmony設備HDC接口(OTG接口)作為一個復合設備,實現(xiàn)HDC(HDC:鴻蒙設備連接器) + CDC ACM(USB 虛擬串口),而設備本身支持HDC。所以需要增
    的頭像 發(fā)表于 06-13 15:03 ?1832次閱讀
    如何在<b class='flag-5'>Openharmony</b>中<b class='flag-5'>實現(xiàn)</b>USB復合設備

    【GD32F470紫藤派開發(fā)板使用手冊】第十二講 SDIO-SD卡讀寫實

    通過本實驗主要學習以下內容: ?SDIO操作原理 ?SD卡讀寫實現(xiàn)
    的頭像 發(fā)表于 05-18 09:36 ?1472次閱讀
    【GD32F470紫藤派開發(fā)板使用手冊】第十二講 SDIO-SD卡<b class='flag-5'>讀寫實</b>驗

    【鴻蒙】OpenHarmony 4.0藍牙代碼結構簡析

    /master/api當前所有應用層接口統(tǒng)一歸并到interface倉;api 10中藍牙接口按照profile拆分了多個d.ts文件 框架層https://gitee.com/openhar
    的頭像 發(fā)表于 02-26 16:08 ?1683次閱讀
    【鴻蒙】<b class='flag-5'>OpenHarmony</b> 4.0藍牙代碼結構簡析
    主站蜘蛛池模板: 中文字幕视频在线观看 | 桃花论坛POWERED2019 | 嫩草亚洲国产精品 | 男人J放进女人P全黄网站 | 午夜免费小视频 | 99RE久久精品国产 | 欧美手机在线 | 亚洲一卡久久4卡5卡6卡7卡 | SORA是什么意思 | 亚洲成色WWW久久网站夜月 | 97国内精品久久久久久久影视 | 中文字幕一区二区三区在线观看 | 日本黄色www | 丰满大屁俄罗斯肥女 | 日韩欧美视频一区二区在线观看 | 4399亚洲AV无码V无码网站 | 午夜福到在线2019 | 26uuu老色哥| 娇妻在床上迎合男人 | 日本韩国欧美一区 | 熟女强奷系列中文字幕 | 亚洲精品国偷拍自产在线 | 国产色青青视频在线观看 | 叮当成人社区 | 亚洲免费观看 | 97视频视频人人碰视频 | 门鱼电影完整版免费版 | 亚洲春色AV无码专区456 | www.av一区| 六度影院最新 | 国产高清超清在线播放 | 久久一级视频 | 在线视频一区二区三区在线播放 | 四虎国产精品永久一区高清 | 久久中文字幕综合不卡一二区 | 鲁大师影院在线视频在线观看 | 97人妻久久久精品系列A片 | 成人在线观看国产 | 国产精品国产三级国产专区53 | 午夜视频无码国产在线观看 | 成人在免费视频手机观看网站 |