国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

基于OpenHarmony標準接口的文件讀寫實現案例

福州市凌睿智捷電子有限公司 ? 2022-09-15 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、簡介

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

二、hal_file標準接口

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

1、HalFileOpen()

打開/創建文件,類似于Linux的open函數。

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

參數說明:

名字

描述

path

文件路徑

oflag

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

mode

0

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

2、HalFileClose()

關閉文件,類似于Linux的close函數。

int HalFileClose(int fd);

參數說明:

名字

描述

fd

文件句柄

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

3、HalFileRead()

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

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

參數說明:

名字

描述

fd

文件句柄

buf

從文件讀取內容的緩沖區

len

從文件讀取內容的大小

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

4、HalFileWrite()

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

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

參數說明:

名字

描述

fd

文件句柄

buf

需要寫入到文件的內容緩沖區

len

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

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

5、HalFileDelete()

刪除文件,類似于Linux的unlink函數。

int HalFileDelete(const char* path);

參數說明:

名字

描述

path

文件路徑

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

6、HalFileStat()

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

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

參數說明:

名字

描述

path

文件路徑

fileSize

文件內容大小

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

7、HalFileSeek()

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

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

參數說明:

名字

描述

fd

文件句柄

offset

文件位置移動位數

whence

SEEK_SET_FS:從文件開頭移動

SEEK_CUR_FS:從文件當前位置移動

SEEK_END_FS:從文件結尾移動

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

三、程序設計

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

(1)創建一個文件;

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

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

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

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

1、任務創建代碼分析

在file_example函數中通過LOS_TaskCreate函數創建一個線程: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函數負責打開文件,每5秒移動到文件頭讀取數據,再移動到文件頭寫入一段內容,重復以上流程。

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

    /* 打開文件,如果沒有該文件就創建,如有該文件則打開
     * 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社區中,大家可以根據以下網址下載。

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

注意:編譯環境可根據以下網址來操作: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網址的說明手冊(“燒錄打印”章節):https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts/blob/master/device/rockchip/README_zh.md

五、實驗結果

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

HalFileInit: Flash Init Successful!

read:

length = 0

content =

read:

length = 18

content = Hello World(0) =>

read:

length = 18

content = Hello World(1) =>

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

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

    關注

    33

    文章

    3952

    瀏覽量

    21102
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    #OpenHarmony HDC調試

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:46:28

    #OpenHarmony 開發環境準備

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:44:31

    #OpenHarmony 鏡像燒錄

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:42:36

    #OpenHarmony 系統概述

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:39:20

    #OpenHarmony Hello World應用以及部署

    OpenHarmony
    視美泰
    發布于 :2026年01月16日 09:32:52

    各智能化子系統為信息管理平臺預留接口要求

    /422/232、ModBus等)和非標準接口都能夠實現各子系統的信息(運行數據和命令)的轉換和實時傳送; 2、通信協議:服務器必須支持使用TCP/IP通信協議來通信,并有能力在同一網絡上通過通信接口
    的頭像 發表于 12-10 10:30 ?295次閱讀
    各智能化子系統為信息管理平臺預留<b class='flag-5'>接口</b>要求

    使用AXI4接口IP核進行DDR讀寫測試

    本章的實驗任務是在 PL 端自定義一個 AXI4 接口的 IP 核,通過 AXI_HP 接口對 PS 端 DDR3 進行讀寫測試,讀寫的內存大小是 4K 字節。
    的頭像 發表于 11-24 09:19 ?3733次閱讀
    使用AXI4<b class='flag-5'>接口</b>IP核進行DDR<b class='flag-5'>讀寫</b>測試

    飛凌嵌入式ElfBoard-系統應用編程之文件I/O

    的輸入輸出方法,即通過內核提供的系統調用函數來實現I/O操作,可以操作普通文件和驅動文件。1.1.2 標準IO標準IO帶有緩沖機制,是由
    發表于 10-24 08:57

    DMA硬件實現——讀寫實現

    址寄存器、長度寄存器回到初始狀態0,狀態寄存器回到初始狀態111。 此外,由于這里一次進行16個數據的讀寫,需要一個fifo模塊存放數據。這里例化了fifo。下一小部分具體闡述fifo的實現
    發表于 10-24 07:58

    如何利用Verilog HDL在FPGA上實現SRAM的讀寫測試

    本篇將詳細介紹如何利用Verilog HDL在FPGA上實現SRAM的讀寫測試。SRAM是一種非易失性存儲器,具有高速讀取和寫入的特點。在FPGA中實現SRAM讀寫測試,包括設計SRA
    的頭像 發表于 10-22 17:21 ?4345次閱讀
    如何利用Verilog HDL在FPGA上<b class='flag-5'>實現</b>SRAM的<b class='flag-5'>讀寫</b>測試

    PCB標準封裝庫文件

    PCB標準封裝庫文件
    發表于 05-22 17:43 ?10次下載

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介 本實驗將演示如何在小凌派-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發。 例程將創建一個任務,實現FLASH讀寫操作。 例程源代碼:https
    發表于 04-22 15:02

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小凌派-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發。例程將創建一個任務,實現FLASH讀寫操作。例程源代碼:https
    的頭像 發表于 04-22 14:49 ?919次閱讀
    基于小凌派RK2206開發板:<b class='flag-5'>OpenHarmony</b>如何使用IoT<b class='flag-5'>接口</b>控制FLASH外設

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介本實驗將演示如何在小凌派-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發。例程將創建一個任務,通過配置UART引腳,實現UART讀寫操作。例程源代碼:https
    的頭像 發表于 04-22 14:22 ?1073次閱讀
    基于小凌派RK2206開發板:<b class='flag-5'>OpenHarmony</b>如何使用IoT<b class='flag-5'>接口</b>控制UART外設

    基于小凌派RK2206開發板:OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小凌派-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發。例程將創建一個任務,通過配置GPIO引腳,實現GPIO讀寫操作。例程源代碼:https
    的頭像 發表于 04-11 15:36 ?2045次閱讀
    基于小凌派RK2206開發板:<b class='flag-5'>OpenHarmony</b>如何使用IoT<b class='flag-5'>接口</b>控制GPIO外設