成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

系統 OpenHarmony
本文基于小凌派-RK2206開發板 + OpenHarmony輕量級操作系統 + LitteFS文件系統,通過Hal_file標準接口實現對Flash讀寫功能。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、簡介

在嵌入式領域,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);

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

2、HalFileClose()

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

int HalFileClose(int fd);

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

3、HalFileRead()

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

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

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

4、HalFileWrite()

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

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

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

5、HalFileDelete()

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

int HalFileDelete(const char* path);

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

6、HalFileStat()

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

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

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

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

7、HalFileSeek()

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

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

參數說明:

基于OpenHarmony標準接口的文件讀寫實現案例-開源基礎軟件社區

返回值為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) =>

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

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: ??51CTO開源基礎軟件社區
相關推薦

2023-11-10 09:32:23

Python文件操作

2022-07-25 14:17:04

JS應用開發

2022-07-19 20:33:38

MQTT阿里云IoT服務

2022-05-27 14:55:34

canvas畫布鴻蒙

2023-05-08 15:48:13

智能音箱鴻蒙

2019-11-19 11:20:25

Python數據結構Windows

2024-01-11 15:54:55

eTS語言TypeScript應用開發

2022-07-26 14:40:42

ArkUIJS

2022-06-28 14:42:26

ETS購物車應用

2009-11-02 10:53:34

VB.NET INI文

2024-03-04 15:06:38

鴻蒙智能教室應用開發

2023-01-13 16:54:38

2022-03-21 15:42:36

智能家居物聯網MQTT

2023-08-18 14:28:18

UART異步通信

2023-07-26 09:41:57

內核編程接口線程管理

2024-06-19 10:31:48

2023-03-08 15:51:10

2022-06-16 15:07:06

布局結構app

2009-12-30 15:26:02

Silverlight

2022-09-15 15:04:16

ArkUI鴻蒙
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久精品网站 | 欧美videosex性极品hd | 欧美久久久电影 | 亚洲精品一区在线 | 色偷偷噜噜噜亚洲男人 | 黄色日批视频 | 国产高清视频在线观看 | 91国内在线观看 | 亚洲精品播放 | 国产传媒视频在线观看 | 一区二区三区四区在线视频 | 亚洲精品久久久久久久久久久久久 | 欧美另类视频 | 色在线免费视频 | 欧美在线观看一区二区 | 亚洲精品91| 免费一区| 玖玖爱365 | 日本免费一区二区三区视频 | 99视频| 国产高清免费在线 | 天天干狠狠干 | 毛片免费看的 | 久久精品国产一区二区电影 | 亚洲一区二区三区四区五区中文 | 久久精品亚洲欧美日韩久久 | 欧美成人影院 | 国产精品久久久久一区二区三区 | 中文字幕在线免费观看 | 国产区精品视频 | 亚洲视频在线看 | 亚洲国产精品成人久久久 | 国产精品久久亚洲7777 | 久久久久久av | 一区二区三区四区不卡视频 | 日本天天操 | 久久88 | 成人免费视频网站在线看 | 国产精品久久久久久久久免费桃花 | 欧美日本一区二区 | 午夜在线观看视频 |