OpenHarmony開發實戰:HDF驅動開發流程

概述

HDF(Hardware Driver Foundation)驅動框架,為驅動開發者提供驅動框架能力,包括驅動加載、驅動服務管理、驅動消息機制和配置管理。并以組件化驅動模型作為核心設計思路,讓驅動開發和部署更加規范,旨在構建統一的驅動架構平臺,為驅動開發者提供更精準、更高效的驅動管理的開發環境,力求做到一次開發,多系統部署。

驅動加載

HDF驅動框架提供把和配置的設備列表匹配成功的驅動程序加載起來的功能。

驅動服務管理

HDF框架可以集中管理驅動服務,開發者可直接通過HDF框架對外提供的能力接口獲取驅動相關的服務。

驅動消息機制

HDF框架提供統一的驅動消息機制,支持用戶態應用向內核態驅動發送消息,也支持內核態驅動向用戶態應用發送消息。

配置管理

HCS(HDF Configuration Source)是HDF驅動框架的配置描述源碼,內容以Key-Value為主要形式。它實現了配置代碼與驅動代碼解耦,便于開發者進行配置管理。

驅動模型

HDF框架將一類設備驅動放在同一個Host(設備容器)里面,用于管理一組設備的啟動加載等過程。在劃分Host時,驅動程序是部署在一個Host還是部署在不同的Host,主要考慮驅動程序之間是否存在耦合性,如果兩個驅動程序之間存在依賴,可以考慮將這部分驅動程序部署在一個Host里面,否則部署到獨立的Host中是更好的選擇。Device對應一個真實的物理設備。DeviceNode是設備的一個部件,Device至少有一個DeviceNode。每個DeviceNode可以發布一個設備服務。驅動即驅動程序,每個DevicdNode唯一對應一個驅動,實現和硬件的功能交互。HDF驅動模型如下圖所示:

圖1?HDF驅動模型

?點擊領取→純血鴻蒙Next全套最新學習資料(安全鏈接,放心點擊希望這一份鴻蒙學習資料能夠給大家帶來幫助,有需要的小伙伴自行領取~

功能描述

驅動加載

HDF驅動框架提供把和配置的設備列表匹配成功的驅動程序加載起來的功能,支持按需加載和按序加載兩種策略,具體設備的加載策略由配置文件中的preload字段來控制,配置值參考如下:

typedef enum {DEVICE_PRELOAD_ENABLE = 0,DEVICE_PRELOAD_ENABLE_STEP2 = 1,DEVICE_PRELOAD_DISABLE = 2,DEVICE_PRELOAD_INVALID
} DevicePreload;
按需加載
  • preload字段配置為0(DEVICE_PRELOAD_ENABLE),則系統啟動過程中默認加載。
  • preload字段配置為1(DEVICE_PRELOAD_ENABLE_STEP2),當系統支持快速啟動的時候,則在系統完成之后再加載這一類驅動,否則和DEVICE_PRELOAD_ENABLE含義相同。
  • preload字段配置為2(DEVICE_PRELOAD_DISABLE),則系統啟動過程中默認不加載,支持后續動態加載,當用戶態獲取驅動服務消息機制時,如果驅動服務不存在,HDF框架會嘗試動態加載該驅動。
按序加載(默認加載策略)

配置文件中的priority(取值范圍為整數0到200)是用來表示host(驅動容器)和驅動的優先級的。不同的host內的驅動,host的priority值越小,驅動加載優先級越高;同一個host內驅動的priority值越小,加載優先級越高。

異常恢復(用戶態驅動)

當驅動服務異常退出時,恢復策略如下:

  • preload字段配置為0(DEVICE_PRELOAD_ENABLE)或1(DEVICE_PRELOAD_ENABLE_STEP2)的驅動服務,由啟動模塊拉起host并重新加載服務。
  • preload字段配置為2(DEVICE_PRELOAD_DISABLE)的驅動服務,需業務模塊注冊HDF的服務狀態監聽器,當收到服務退出消息時,業務模塊調用LoadDevice重新加載服務。

驅動服務管理

驅動服務是HDF驅動設備對外提供能力的對象,由HDF框架統一管理。驅動服務管理主要包含驅動服務的發布和獲取。HDF框架定義了驅動對外發布服務的策略,由配置文件中的policy字段來控制,policy字段的取值范圍以及含義如下:

typedef enum {/* 驅動不提供服務 */SERVICE_POLICY_NONE = 0,/* 驅動對內核態發布服務 */SERVICE_POLICY_PUBLIC = 1,/* 驅動對內核態和用戶態都發布服務 */SERVICE_POLICY_CAPACITY = 2,/* 驅動服務不對外發布服務,但可以被訂閱 */SERVICE_POLICY_FRIENDLY = 3,/* 驅動私有服務不對外發布服務,也不能被訂閱 */SERVICE_POLICY_PRIVATE = 4,/* 錯誤的服務策略 */SERVICE_POLICY_INVALID
} ServicePolicy;
使用場景

當驅動需要以接口的形式對外提供能力時,可以使用HDF框架的驅動服務管理能力。

接口說明

針對驅動服務管理功能,HDF框架開放了以下接口供開發者調用,如下表所示:

表1?服務管理接口

方法描述
int32_t (*Bind)(struct HdfDeviceObject *deviceObject)需要驅動開發者實現Bind函數,將自己的服務接口綁定到HDF框架中。
const struct HdfObject *DevSvcManagerClntGetService(const char *svcName)獲取驅動的服務。
int HdfDeviceSubscribeService( struct HdfDeviceObject *deviceObject, const char *serviceName, struct SubscriberCallback callback)訂閱驅動的服務。

驅動消息機制管理

使用場景

當用戶態應用和內核態驅動需要交互時,可以使用HDF框架的消息機制來實現。

接口說明

消息機制的功能主要有以下兩種:

  • 用戶態應用發送消息到驅動。
  • 用戶態應用接收驅動主動上報事件。

表2?消息機制接口

方法描述
struct HdfIoService *HdfIoServiceBind(const char *serviceName);用戶態獲取驅動的服務,獲取該服務之后通過服務中的Dispatch方法向驅動發送消息。
void HdfIoServiceRecycle(struct HdfIoService *service);釋放驅動服務。
int HdfDeviceRegisterEventListener(struct HdfIoService *target, struct HdfDevEventlistener *listener);用戶態程序注冊接收驅動上報事件的操作方法。
int32_t HdfDeviceSendEvent(const struct HdfDeviceObject *deviceObject, uint32_t id, const struct HdfSBuf *data)驅動主動上報事件接口。

配置管理

配置概述

HCS(HDF Configuration Source)是HDF驅動框架的配置描述源碼,內容以Key-Value為主要形式。它實現了配置代碼與驅動代碼解耦,便于開發者進行配置管理。HC-GEN(HDF Configuration Generator)是HCS配置轉換工具,可以將HDF配置文件轉換為軟件可讀取的文件格式:

  • 在弱性能環境中,轉換為配置樹源碼或配置樹宏定義,驅動可直接調用C代碼或宏式APIs獲取配置。
  • 在高性能環境中,轉換為HCB(HDF Configuration Binary)二進制文件,驅動可使用HDF框架提供的配置解析接口獲取配置。

以下是使用HCB模式的典型應用場景:

圖2?配置使用流程圖

HCS經過HC-GEN編譯生成HCB文件,HDF驅動框架中的HCS Parser模塊會從HCB文件中重建配置樹,HDF驅動模塊使用HCS Parser提供的配置讀取接口獲取配置內容。

配置語法

HCS的語法介紹如下:

關鍵字

HCS配置語法保留了以下關鍵字。

表3?HCS配置語法保留關鍵字

關鍵字用途說明
root配置根節點-
include引用其他HCS配置文件-
delete刪除節點或屬性只能用于操作include導入的配置樹
template定義模板節點-
match_attr用于標記節點的匹配查找屬性解析配置時可以使用該屬性的值查找到對應節點
基本結構

HCS主要分為屬性(Attribute)和節點(Node)兩種結構。

屬性

屬性即最小的配置單元,是一個獨立的配置項。語法如下:

  attribute_name = value;
  • attribute_name是字母、數字、下劃線的組合且必須以字母或下劃線開頭,字母區分大小寫。
  • value的可用格式如下:
    • 數字常量,支持二進制、八進制、十進制、十六進制數,具體數據類型章節。
    • 字符串,內容使用雙引號("")引用。
    • 節點引用。
  • attribute必須以分號(;)結束且必須屬于一個node。

節點

節點是一組屬性的集合,語法如下:

  node_name {module = "sample";...}
  • node_name是字母、數字、下劃線的組合且必須以字母或下劃線開頭,字母區分大小寫。
  • 大括號后無需添加結束符“;”。
  • root為保留關鍵字,用于聲明配置表的根節點。每個配置表必須以root節點開始。
  • root節點中必須包含module屬性,其值應該為一個字符串,用于表征該配置所屬模塊。
  • 節點中可以增加match_attr屬性,其值為一個全局唯一的字符串。當驅動程序在解析配置時可以以該屬性的值為參數調用查找接口查找到包含該屬性的節點。
數據類型

在屬性定義中使用自動數據類型,不顯式指定類型,屬性支持的數據類型如下:

整型

整型長度自動推斷,根據實際數據長度給與最小空間占用的類型。

  • 二進制,0b前綴,示例:0b1010。
  • 八進制,0前綴,示例:0664。
  • 十進制 ,無前綴,且支持有符號與無符號,示例:1024,+1024均合法。驅動程序在讀取負值時注意使用有符號數讀取接口。
  • 十六進制,0x前綴,示例:0xff00、0xFF。

字符串

字符串使用雙引號("")表示。

數組

數組元素支持整型、字符串,不支持混合類型。整型數組中uint32_t uint64_t混用會向上轉型為uint64_t數組。整型數組與字符串數組示例如下:

attr_foo = [0x01, 0x02, 0x03, 0x04];
attr_bar = ["hello", "world"];

bool類型

bool類型中true表示真,false表示假。

預處理

include

用于導入其他HCS文件。語法示例如下:

#include "foo.hcs"
#include "../bar.hcs"
  • 文件名必須使用雙引號(""),不在同一目錄使用相對路徑引用。被include文件也必須是合法的HCS文件。
  • 多個include,如果存在相同的節點,后者覆蓋前者,其余的節點依次展開。
注釋

支持兩種注釋風格。

  • 單行注釋。

    // comment
  • 多行注釋。

    /*
    comment
    */

    說明:?多行注釋不支持嵌套。

引用修改

引用修改的作用是在當前節點中修改另外任意一個節點的內容,語法為:

 node :& source_node

上述語句表示node中的內容是對source_node節點內容的修改。示例如下:

root {module = "sample";foo {foo_ :& root.bar{attr = "foo";}foo1 :& foo2 {attr = 0x2;}foo2 {attr = 0x1;}}bar {attr = "bar";}
}

最終生成配置樹為:

root {module = "sample";foo {foo2 {attr = 0x2;}}bar {attr = "foo";}
}

在以上示例中,可以看到foo.foo_節點通過引用將bar.attr屬性的值修改為了"foo",foo.foo1節點通過引用將foo.foo2.attr屬性的值修改為了0x2。foo.foo_以及foo.foo1節點表示對目標節點內容的修改,其自身并不會存在最終生成的配置樹中。

  • 引用同級node,可以直接使用node名稱,否則被引用的節點必須使用絕對路徑,節點間使用“.”分隔,root表示根節點,格式為root開始的節點路徑序列,例如root.foo.bar即為一個合法的絕對路徑。
  • 如果出現修改沖突(即多處修改同一個屬性),編譯器將提示warning,因為這種情況下只會生效某一個修改而導致最終結果不確定。
節點復制

節點復制可以實現在節點定義時從另一個節點先復制內容,用于定義內容相似的節點。語法為:

 node : source_node

上述語句表示在定義"node"節點時將另一個節點"source_node"的屬性復制過來。示例如下:

root {module = "sample";foo {attr_0 = 0x0;}bar:foo {attr_1 = 0x1;}
}

上述代碼的最終生成配置樹為:

root {module = "sample";foo {attr_0 = 0x0;}bar {attr_1 = 0x1;attr_0 = 0x0;}
}

在上述示例中,編譯后bar節點既包含attr_0屬性又包含attr_1屬性,在bar中對attr_0的修改不會影響到foo。

當foo和bar在同級node中時可不指定foo的路徑,否則需要使用絕對路徑引用,絕對路徑的介紹請參考引用修改。

刪除

要對include導入的base配置樹中不需要的節點或屬性進行刪除,可以使用delete關鍵字。下面的舉例中sample1.hcs通過include導入了sample2.hcs中的配置內容,并使用delete刪除了sample2.hcs中的attribute2屬性和foo_2節點,示例如下:

// sample2.hcs
root {attr_1 = 0x1;attr_2 = 0x2;foo_2 {t = 0x1;}
}// sample1.hcs
#include "sample2.hcs"
root {attr_2 = delete;foo_2 : delete {}
}

上述代碼在生成過程中將會刪除root.foo_2節點與attr_2,最終生成配置樹為:

root {attr_1 = 0x1;
}

說明:?在同一個HCS文件中不允許使用delete,建議直接刪除不需要的屬性。

屬性引用

為了在解析配置時快速定位到關聯的節點,可以把節點作為屬性的右值,通過讀取屬性查找到對應節點。語法為:

 attribute = &node;

上述語句表示attribute的值是一個節點node的引用,在解析時可以用這個attribute快速定位到node,便于關聯和查詢其他node。示例如下:

node1 {attributes;
}
node2 {attr_1 = &root.node1;
}

node2 {node1 {attributes;}attr_1 = &node1;
}
模板

模板的用途在于生成嚴格一致的node結構,以便對同類型node進行遍歷和管理。使用template關鍵字定義模板node,子node通過雙冒號“::”聲明繼承關系。子節點可以改寫或新增但不能刪除template中的屬性,子節點中沒有定義的屬性將使用template中的定義作為默認值。示例如下:

root {module = "sample";template foo {attr_1 = 0x1;attr_2 = 0x2;}bar :: foo {}bar_1 :: foo {attr_1 = 0x2;}
}

? 生成配置樹如下:

root {module = "sample";bar {attr_1 = 0x1;attr_2 = 0x2;}bar_1 {attr_1 = 0x2;attr_2 = 0x2;}
}

在上述示例中,bar和bar_1節點繼承了foo節點,生成配置樹節點結構與foo保持了完全一致,只是屬性的值不同。

配置生成

? hc-gen是配置生成的工具,可以對HCS配置語法進行檢查并把HCS源文件轉化成HCB二進制文件。

hc-gen介紹

? hc-gen參數說明:

Usage: hc-gen [Options] [File]
options:-o <file>   output file name, default same as input-a          hcb align with four bytes-b          output binary output, default enable-t          output config in C language source file style-m          output config in macro source file style-i          output binary hex dump in C language source file style-p <prefix> prefix of generated symbol name-d          decompile hcb to hcs-V          show verbose info-v          show version-h          show this help message

生成.c/.h配置文件方法:

hc-gen -o [OutputCFileName] -t [SourceHcsFileName]

生成HCB配置文件方法:

hc-gen -o [OutputHcbFileName] -b [SourceHcsFileName]

生成宏定義配置文件方法:

hc-gen -o [OutputMacroFileName] -m [SourceHcsFileName]

反編譯HCB文件為HCS方法:

hc-gen -o [OutputHcsFileName] -d [SourceHcbFileName]


最后

有很多小伙伴不知道學習哪些鴻蒙開發技術?不知道需要重點掌握哪些鴻蒙應用開發知識點?但是又不知道從哪里下手,而且學習時頻繁踩坑,最終浪費大量時間。所以本人整理了一些比較合適的鴻蒙(HarmonyOS NEXT)學習路徑和一些資料的整理供小伙伴學習

點擊領取→純血鴻蒙Next全套最新學習資料(安全鏈接,放心點擊

希望這一份鴻蒙學習資料能夠給大家帶來幫助,有需要的小伙伴自行領取,限時開源,先到先得~無套路領取!!

一、鴻蒙(HarmonyOS NEXT)最新學習路線

?

有了路線圖,怎么能沒有學習資料呢,小編也準備了一份聯合鴻蒙官方發布筆記整理收納的一套系統性的鴻蒙(OpenHarmony )學習手冊(共計1236頁)與鴻蒙(OpenHarmony )開發入門教學視頻,內容包含:(ArkTS、ArkUI開發組件、Stage模型、多端部署、分布式應用開發、音頻、視頻、WebGL、OpenHarmony多媒體技術、Napi組件、OpenHarmony內核、Harmony南向開發、鴻蒙項目實戰等等)鴻蒙(HarmonyOS NEXT)…等技術知識點。

獲取以上完整版高清學習路線,請點擊→純血版全套鴻蒙HarmonyOS學習資料

二、HarmonyOS?Next 最新全套視頻教程

?

三、《鴻蒙 (OpenHarmony)開發基礎到實戰手冊》

OpenHarmony北向、南向開發環境搭建

?

《鴻蒙開發基礎》

  • ArkTS語言
  • 安裝DevEco Studio
  • 運用你的第一個ArkTS應用
  • ArkUI聲明式UI開發
  • .……?

《鴻蒙開發進階》

  • Stage模型入門
  • 網絡管理
  • 數據管理
  • 電話服務
  • 分布式應用開發
  • 通知與窗口管理
  • 多媒體技術
  • 安全技能
  • 任務管理
  • WebGL
  • 國際化開發
  • 應用測試
  • DFX面向未來設計
  • 鴻蒙系統移植和裁剪定制
  • ……

?

《鴻蒙進階實戰》

  • ArkTS實踐
  • UIAbility應用
  • 網絡案例
  • ……

?

四、大廠面試必問面試題

?

五、鴻蒙南向開發技術

?

六、鴻蒙APP開發必備

?

七、鴻蒙生態應用開發白皮書V2.0PDF

?


完整鴻蒙HarmonyOS學習資料,請點擊→純血版全套鴻蒙HarmonyOS學習資料

總結
總的來說,華為鴻蒙不再兼容安卓,對中年程序員來說是一個挑戰,也是一個機會。只有積極應對變化,不斷學習和提升自己,他們才能在這個變革的時代中立于不敗之地。?

? ? ? ? ? ? ? ? ? ? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36955.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity3D Excel表格數據處理模塊詳解

一、引言 在Unity3D開發中&#xff0c;我們經常需要處理大量的數據&#xff0c;這些數據可能是游戲配置、角色屬性、道具信息等。Excel表格作為一種常見的數據存儲方式&#xff0c;具有結構清晰、易于編輯的特點&#xff0c;因此被廣泛應用于游戲開發中。本文將詳細介紹如何在…

四川赤橙宏海商務信息咨詢有限公司抖音開店靠譜嗎?

在數字化浪潮席卷全球的今天&#xff0c;電商行業正以前所未有的速度發展。而在這個大潮中&#xff0c;四川赤橙宏海商務信息咨詢有限公司憑借其專業的團隊和前瞻性的戰略眼光&#xff0c;專注于抖音電商服務&#xff0c;為廣大商家提供了一站式解決方案&#xff0c;成為了行業…

面經-常用框架

1.Spring 1.1什么是Spring框架&#xff1f; Spring 是?種輕量級開發框架&#xff0c;旨在提?開發?員的開發效率以及系統的可維護性。 Spring 的 6 個特征:核?技術&#xff0c;測試&#xff0c;數據訪問&#xff0c;Web?持&#xff0c;集成&#xff0c;語? 1.2列舉?些重…

Ubuntu20.04安裝LibTorch并完成高斯濺射環境搭建

0. 簡介 最近受到優刻得的使用邀請&#xff0c;正好解決了我在大模型和自動駕駛行業對GPU的使用需求。UCloud云計算旗下的Compshare的GPU算力云平臺。他們提供高性價比的4090 GPU&#xff0c;按時收費每卡2.6元&#xff0c;月卡只需要1.7元每小時&#xff0c;并附帶200G的免費…

接口自動化測試-項目實戰

什么是接口自動化測試&#xff1a;使用工具或代碼代替人對接口進行測試 測試項目結構&#xff08;python包&#xff09; 1、接口api包 2、script:業務腳本 3、data:數據 4、config.py :配置文件 5、reporter:報告 錯誤問題&#xff1a; 1、未打印任何東西。添加pip ins…

走馬燈封裝

走馬燈功能需求&#xff1a; 支持定時切換&#xff1b;支持左右按鈕切換&#xff08;根據鼠標是否在切換組件內展示和隱藏左右切換按鈕&#xff09;&#xff1b;支持底部標識切換&#xff1b; 走馬燈 完整代碼如下&#xff1a; /*** class 走馬燈*/import react, { Compone…

C語言 指針——緩沖區溢出與緩沖區溢出攻擊

目錄 緩沖區溢出攻擊 緩沖區溢出攻擊實例 字符串的安全輸入方法?編輯 防止緩沖區溢出的兩個要點 緩沖區溢出攻擊 網絡黑客常針對系統和程序自身存在的漏洞&#xff0c;編寫相應的攻擊程序 ? 對緩沖區溢出漏洞的攻擊 —— 最常見 ? 幾乎占到了網絡攻擊次數的一半以上…

Android (已解決)Gradle 編譯失敗 Unsupported class file major version 61

文章目錄 一、報錯原因二、解決方法 一、報錯原因 新版本的 Android Studio 默認使用的是 Java 17 LTS&#xff0c;而這個歷史項目的 Gradle 版本很低&#xff0c;不支持高版本的 Java。 具體原因&#xff1a;Java 17 (major version 61) 編譯的 class 文件&#xff0c;如果在…

逆向學習匯編篇:指令的操作

本節課在線學習視頻&#xff08;網盤地址&#xff0c;保存后即可免費觀看&#xff09;&#xff1a; ??https://pan.quark.cn/s/660c759dea95?? 在逆向工程中&#xff0c;深入理解匯編語言的指令操作是至關重要的。匯編指令是計算機硬件與軟件之間的橋梁&#xff0c;它們直…

DevEco Studio有時會多出來.js和.map文件,導致項目不能運行

1、問題 在使用DevEco的時候有時候會出現啥都沒干&#xff0c;但是在項目的目錄下會自動生成和文件同名的.js和.js.map文件&#xff0c;至于為什么會生成目前我也不知道&#xff0c;如果想要更深了解可以到論壇討論&#xff1a;華為開發者論壇。生成.js和.js.map文件優…

Terraform基礎概念一

Terraform基礎概念一 1.Infrastructure-as-Code(IaC)概念1.1 IaC優勢1.2 IaC工具1.3 IaC的兩種方式 2.Terraform基礎概念2.1 Terraform工作原理2.2 Terraform 工作流 3.總結 1.Infrastructure-as-Code(IaC)概念 基礎設施即代碼&#xff08;Infrastructure-as-Code&#xff0c;…

SVN 的忽略(Ignore)和遞歸(Recursively)以及忽略部分

SVN中忽略大家經常用到&#xff0c;但總是似懂非懂&#xff0c;下面就詳細展開說明一下忽略如何設置。 兩個忽略 通常設置忽略都是文件夾和里面的文件都忽略&#xff0c;通常只需要鼠標右鍵點擊忽略就可以了&#xff0c;如圖&#xff1a; 第一個忽略用的最多&#xff0c;就是…

關于GPIO的上拉、下拉,無上下拉

1.GPIO_PULLUP&#xff08;上拉&#xff09; 作用和原理 作用&#xff1a;上拉模式會在GPIO引腳和電源電壓&#xff08;Vcc&#xff09;之間連接一個內部上拉電阻。原理&#xff1a;當引腳配置為輸入模式時&#xff0c;如果引腳沒有連接到其他外部電路&#xff0c;內部上拉電…

排序算法(C語言版)

前言 排序作為生產環境中常見的需求之一&#xff0c;對整個產品有舉足輕重的影響&#xff0c;可以說使用一個合適的排序算法是業務邏輯中比較重要的一部分。今天我們就來介紹常見的排序算法以及實現 排序 所謂排序無非就是按照特定的規則對一組數據就行順序化。 常見的排序有…

Spring項目報錯解讀與全部報錯詳解

你好,我是Qiuner. 為幫助別人少走彎路和記錄自己編程學習過程而寫博客 這是我的 github https://github.com/Qiuner ?? ? gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章幫到了你 不妨點個贊吧~ 我會很高興的 &#x1f604; (^ ~ ^) 想看更多 那就點個關注吧 我…

圖像大模型中的注意力和因果掩碼

AIM — 圖像領域中 LLM 的對應物。盡管 iGPT 已經存在 2 年多了&#xff0c;但自回歸尚未得到充分探索。在本文中&#xff0c;作者表明&#xff0c;當使用 AIM 對網絡進行預訓練時&#xff0c;一組圖像數據集上的下游任務的平均準確率會隨著數據和參數的增加而線性增加。 要運…

uniApp獲取實時定位

通過你獲取的key放到項目manifest.json里面&#xff0c;對應填寫你所需要的key值&#xff0c;還有高德用戶名 用戶名&#xff1a; key值的位置&#xff1a; 代碼&#xff1a; html: <view class"intList pdNone"><view class"label">詳細地…

[Cocos Creator] v3.8開發知識點記錄(持續更新)

問題&#xff1a;從 cc 里找不到宏定義 CC_PREVIEW 等。 解決方案&#xff1a;找不到就自己定義&#xff0c;將 declare const CC_PREVIEW; 添加到需要的ts文件里。參考&#xff1a;creator3d 找不到宏定義如 CC_EDITOR&#xff0c;CC_PREVIEW&#xff0c;CC_JSB - Creator 3.x…

爬蟲:爬取知乎熱榜一級評論及回答2024不包含翻頁

一、先上結果&#xff08;注:本文僅為興趣愛好探究&#xff0c;請勿進行商業利用或非法研究&#xff0c;負責后果自負&#xff0c;與作者無關&#xff09; 1、爬標題及其具體內容 2、抓標題下的對應回答 3、爬取對應一級評論 二、上流程 1、獲取cookies&#xff08;相信哥哥姐姐…

靜心冥想訓練入門|流靜

在喧囂的都市中&#xff0c;我們時常被瑣事所困&#xff0c;心靈難以得到片刻的寧靜。然而&#xff0c;靜心冥想訓練如同一扇通往內心寧靜的門戶&#xff0c;引領我們踏上一段靜謐的旅程。 靜心冥想&#xff0c;并非遙不可及的高深技藝&#xff0c;而是每個人都能掌握的心靈修煉…