主頁 > 前端設計 > 2020-10-24

2020-10-24

2020-10-25 13:21:47 前端設計

IPC通信

  1. IPC的基本概念
    處理器間通信(IPC)提供了一個與處理器無關的API,可用于多處理器環境中處理器之間的通信(內核間)、與同一處理器上的其他執行緒的通信(行程間)和與外圍設備(設備間)的通信,API支持訊息傳遞、流和鏈接串列,IPC可用于與以下方面進行通信:
    同一處理器上的其他執行緒
    運行SYS/BIOS的其他處理器上的執行緒
    運行HLOS的其他處理器上的執行緒(例如Linux、QNX、Android)
    在這里插入圖片描述

處理器間/處理器內部通信(IPC)是一種產品,用于在多處理器環境中實作處理器之間的通信,IPC的特點包括訊息傳遞、多處理器門、共享記憶體原語等.
IPC被設計用于與運行SYS/BIOS應用程式的處理器一起使用,這通常是ARM或DSP,IPC包括支持高級作業系統(HLOS),如Linux,以及SYS/BIOS RTOS,在HLOS環境中支持的IPC特征的寬度被減少,以便簡化產品,
IPC通常分布并安裝在更大的SDK中,在這些情況下,不需要安裝,
在SDK之外,IPC可以在這里下載,并作為zip檔案發布,要安裝,只需提取檔案即可…這將在目錄中提取IPC產品及其產品名稱和版本資訊(例如,c:/ti/ipc_),
IPC產品提供多個處理器之間的軟體連接,每個處理器可以運行HLOS(例如
Linux、QNX)或RTOS(例如,SYS/BIOS),IPC是一個開源的專案, 你可以在這里找到它http://git.ti.com/ipc/ipcdev.

處理器SDKInstaller(ti-processor-sdk-linux-[platformName]-evm-xx.xx-Linux-x86-Install.bin)將安裝必要的組件,以便在TI微處理器上啟動您的開發,SDK由MatrixAppLauncher起始點應用程式的源代碼、一個開發檔案系統、一個目標檔案系統、示例應用程式、工具鏈和板支持包、易用性腳本和檔案組成,處理器SDK現在包括ARM GCC工具鏈,處理器SDK是根據特定的Linux發行版名稱和版本Ubuntu16.04和18.04構建和測驗的,注意,這并不妨礙用戶在其他Linux發行版上安裝SDK,
最后一步是下載并安裝處理器-SDKRTOS,要獲取本軟體的最新版本,請參見設備的“軟體產品”頁,
示例的二進制影像位于主機和各個內核的相應目錄中,可以通過使用通過JTAG的CCS加載和運行二進制檔案來運行示例,
本文面向在Cortex A 15上運行Linux的AM57xx用戶,其目標是幫助用戶了解如何獲得AM57xx的DSP(C66x)和IPU (Cortex M4)子系統的權限,
AM572x設備有兩個IPU (IPUSS),每個子系統有兩個核心,IPU 2被用作多媒體應用程式中的控制器,所以如果您在運行處理器SDK Linux,那么IPU 2很可能已經加載了韌體,但是,IPU 1是開放的,用于通用編程來卸載ARM任務,
這個任務有很多方面:構建、加載、除錯、MMU、記憶體共享等等,本文打算采取漸進的步驟來理解所有這些部分,

  1. IPC for AM57xx
    AM57xxSOC“S”有多個處理器內核-CortexA15、C66xDSP和ARMM4內核,A15通常運行諸如Linux/QNX/Android之類的HLOS,而RemoteCore(DSP)S和M4)運行RTOS,在正常操作中,引導加載器(U-boot/SPL)引導并加載帶有HLOS的A15,A15啟動DSP和M4內核,
    在這里插入圖片描述

在這個序列中,電源復位與遠程設備(即DSP和M4)之間的間隔取決于HLOS初始化時間,

下圖說明ARMLinux內核的遠程proc/rpMsg驅動程式如何與運行RTOS的從處理器(如DSP、IPU等)上的IPC驅動程式通信,
在這里插入圖片描述

為了在從內核上設定IPC,我們在IPC包中提供了一些可從ARMLinux運行的預先構建的示例,接下來的章節描述了如何構建和運行此示例,并將其用作此作業的起點,

CMEM
To view the allocation at run-time:
root@am57xx-evm:~# cat /proc/cmem

這表明我們在0xA0000000的物理基地址上定義了一個CMEM塊,其總大小為0xc 000000(192 MB),此塊包含由1個緩沖區組成的緩沖池,池中的每個緩沖區(本例中只有一個)被定義為大小為0xc000000(192 MB),

更改DSP記憶體映射
首先,重要的是要理解,存在一對位于DSP子系統和L3互連之間的存盤器管理單元(MMUS),其中一個MMUUS用于DSP核心,另一個是針對其本地EDMA,它們都用于將虛擬地址(即,由DSP子系統觀看的地址)轉換為物理地址(即,從L3互連觀看的地址)的相同目的,

DSP物理地址DSP代碼/資料實際駐留的物理位置由CMA carveouts進行定義,要更改此位置,您必須更改香芹的定義,在LinuxDTS檔案中定義了DSP carveouts,例如對于AM57xxEVM:

您可以同時更改大小和位置,小心不要重疊任何其他carveouts!

此外,當您更改分出位置時,必須對資源表進行相應的更改,首先,如果您正在進行記憶體更改,則需要一個自定義資源表,資源表是一個大型結構,是物理記憶體和虛擬記憶體之間的“橋梁”,此結構用于配置位于DSP子系統前面的MMU,IPCResourceCustomTable一文中提供了詳細的資訊,
創建自定義資源表后,必須將phys_mem_IPC_VRING的地址更新為與相應的CMA相同的基址,

DSP虛擬地址
這些地址是DSP子系統看到的地址,也就是聯結器命令檔案中的地址,等等,您必須確保節的大小與資源表中的相應定義一致,您應該創建自己的資源表,以修改記憶體映射,這是在頁IPC資源自定義表中描述的,您可以查看IPC中的現有資源表:
換句話說,由于我們使用了身份映射,所以可以在它們的物理地址處訪問外圍設備,
運行時檢查DSPIOMMU頁面表
可以使用以下命令轉儲DSPIOMMU頁表:
一般來說,MMU 0和MMU 1的編程方式是相同的,所以您只需要查看其中一個或另一個就可以理解給定DSP的映射,
“da”(“設備地址”)列反映虛擬地址,它是從索引中派生的,即在頁表中不存在“da”暫存器或欄位,地址空間中的每個MB映射到表中的條目,顯示“da”,使其易于找到感興趣的虛擬地址,
“pte”(“頁表項”)列可以根據上述表20-4進行解碼,例如:

1: 0x4a000000 0x4a040002
0x4a040002向我們表明,它是一個基地址0x4A000000的超值,這給了我們一個16 MB的記憶體頁面,注意后面重復的條目,這是MMU的要求,
為了充分理解CortexM4IPU子系統的記憶體映射,認識到存在兩種不同/獨立的記憶體轉換級別很有幫助,以下是TRM中的片段以說明:

CortexM4 IPU物理地址
M4代碼/資料實際所在的物理位置由CMA carveout進行定義,要更改此位置,您必須更改香芹的定義,M4 carveout在LinuxDTS檔案中定義,例如對于AM57xxEVM:

此外,當您更改 carveout的位置時,必須對資源表進行相應的更改,首先,如果您正在進行記憶體更改,您需要自定義資源表,資源表是一個大型結構,是物理記憶體和虛擬記憶體之間的“橋”,此結構用于配置IPUxMMU(不是UniCacheMMU),在文章IPC資源定制表中提供了詳細資訊,創建自定義資源表時,必須將physmemIPCvring的地址更新為與相應CMA相同的基地址,

CortexM4IPU虛擬地址
UniCacheMMU,
UniCacheMMU最接近CortexM4,它提供了一級地址翻譯,UniCacheMMU實際上是由CortexM4“自行編程”的,UniCacheMMU也被稱為屬性MMU(AMMU),有固定數量的小、中和大頁面,以下是顯示一些關鍵映射的片段:

這3頁是“身份”映射,對關聯的地址范圍執行請求通過,這些中間地址在下一級翻譯(IOMMU)中被映射到它們的物理地址,用于代碼和資料的AMMU范圍需要是標識映射,因為否則RemoteProc加載器將無法與相關聯的IOMMU映射從ELF檔案中匹配這些部分,這些映射應足以滿足任何應用,即無需調整這些映射,修改的更可能區域是下一節中的資源表,AMMU映射主要用于理解關于CortexM4存盤器映射的完整影像,

IOMMU
IOMMU位于離L3互連最近的地方,它獲取來自AmMu的中間地址輸出,并將其轉換為L3互連所使用的物理地址,IOMMU是由ARM基于相關資源表撰寫的,如果您正在計劃任何記憶體更改,那么您將需要創建一個自定義資源表,如頁面IPC資源自定義表中所描述的那樣,

來自資源表的3個條目都來自相關聯的IPUCMA池(即,如由型別_CARSOUT所指示的),第二引數表示虛擬地址(即對IOMMU的輸入地址),這些地址必須與AMMU映射以及聯結器命令檔案一致,來自IPC的EX02_MessageQ示例在檔案示例/Dra7xx_Linux_ELF/EX02_MessageQ/共享/config.bld.中定義了這些記憶體部分您可以使用以下命令卸載IPUIOMMU頁面表:

示例:從IPU訪問UART5在本例中,假定引導加載程式中已經設定了PIN-MUXED,如果不是這樣,你就得在這做,UART5模塊需要通過CM_L4PER_UART5_CLKCTRL暫存器使能,這位于物理地址0x4A009870,因此,從M4,我們將在虛擬地址0x6A009870上對該暫存器進行編程,將值2寫入此暫存器將啟用外圍設備,在完成上一個步驟后,UART5暫存器將變為可訪問的,通常UART5可在物理基礎地址0x48066000處訪問,這將相應地從IPU在0x68066000處訪問,
默認情況下,IPU和DSP自動空閑,這可以防止您能夠使用JTAG連接到設備,也無法通過devme 2訪問本地記憶體,在sysfs中有一些選項是必要的,以強制這些子系統運行,有時這是開發和除錯目的所需要的,這些操作需要一些源自設備樹(dra7.dtsi)的硬編碼設備名稱:
在這里插入圖片描述

要將這些系統FS名稱映射到關聯的RemoteProc條目,您可以運行以下命令:
root@am57xx-evm:~# ls -l /sys/kernel/debug/remoteproc/
root@am57xx-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc*/name
命令的結果將是一對一的映射,例如,58820000.ipu對應于remoteproc0,
類似地,要查看每個核心的電源狀態:
root@am57xx-evm:~# cat /sys/class/remoteproc/remoteproc*/state
狀態可以掛起、運行、脫機等,只有當狀態“運行”時,才能附加JTAG,如果它顯示為“暫停”,則必須強制它運行,例如,假設DSP 0被“掛起”,可以運行以下命令強制執行:
root@am57xx-evm:~# echo on > /sys/bus/platform/devices/40800000.dsp/power/control
任何核心都是如此,但是用上面圖表中關聯的系統FS名稱替換40800000.dsp,

  1. 將IPC添加到從內核上的現有TI-RTOS
    應用程式將IPC添加到DSP上現有的TIRTOS應用程式上
    人們想要做的一個常見的事情是采用現有的DSP應用程式,并將IPC添加到它,當從DSP遷移到帶有ARM+DSP的異構SoC時,這很常見,這是本部分的重點,為了描述這個程序,我們需要一個示例測驗用例來處理,為此,我們將使用GPIO_LEDBLINK_EVMAM572X_C66XExample專案示例,該示例是PDK的一部分(作為處理器SDKRTOS的一部分安裝),您可以在C:TiPDK_AM57xx_1_0_4PackageMyExample_GPIO_LEDBLINK_EVMAM572X_C66XExample專案中找到它,此示例使用SYS/BIOS并將用戶0閃爍在AM572XGPEVM上,它在EVM絲印螢屏上標記為D4,恰好位于藍色重置按鈕的右側,

有幾個步驟進行整個程序作業,每個步驟將在下面的章節中進行描述,并使用代碼撰寫器Studio(CCS)在EVM上運行“開箱即用”LED閃爍示例,從IPC軟體包獲取EX02_訊息示例,并將其轉換為CCS專案,建立它并修改Linux啟動代碼以使用此新映像,這只是一個明智的檢查步驟,以確保我們可以在CCS中構建IPC示例,并讓它們在EVM啟動時運行,在CCS中,進行開箱即用的LED示例的克隆,并將其重命名為“S”示例的IPC版本,然后,使用EX02_MessageQ示例作為參考,在IPC塊中添加到LED示例,從CCS構建然后將其添加到Linux韌體檔案夾中,

將IPC添加到LED閃爍示例第一步是克隆出開箱即用的LED閃爍CCS專案,并將其重命名為使用IPC表示它,執行此操作的最簡單方法是使用CCS,下面是步驟……在“編輯”(Edit)透視圖中,進入“專案瀏覽器”(ProjectExplorer)視窗,右鍵單擊GPIO_LEDBLINK_EVMAN572XC66XExampleProject專案,然后從彈出式選單中選擇“復制”(Copy),Maske確定專案不是關閉狀態,Rick單擊專案瀏覽器視窗的“In”和“空”區域,然后選擇“過去”,彈出對話框,修改名稱以表示它使用IPC,一個好的名稱是GPIO_LEDBLINK_EVMAM572XC66XExamplejec_with_IPC,

右鍵單擊GPIO_LedBlink_evmAM572x c66xExampleProjec_With_IPC專案并在左側窗格中選擇Properties,單擊CCS General,在右側,單擊RTSC選項卡上的XDCtools版本:在產品和存盤庫串列中選擇3.32.0.06_core,檢查以下.IPC 3.43.2.04 SYS/BIOS 6.45.1.29 am57xx PDK 1.0.4 for Target,選擇ti.Target ts.elf.C66作為平臺,選擇ti.platforms.evmDRA7XX,在平臺被選中后,編輯其名稱BueHand并追加:dsp 1到末尾,在此之后,應該是ti.platforms.evmDRA7XX:dsp 1,然后將構建組態檔設定為DEBUG,按下OK按鈕,現在,我們希望將EX02_MessageQIPC示例的配置和源檔案復制到我們的專案中,IPC示例位于C:TiIPC_3_43_02_04ExampleDra7xx_Linux_ELFEX02_MessageQ,要將檔案復制到CCS專案中,您可以簡單地選擇Windows資源管理器中所需的檔案,然后將它們拖放到CCS中的專案中,將這些檔案復制到CCS專案中……

人們想要做的一件常見的事情就是使用一個現有的IPU應用程式,它可以控制串行或控制介面,并將IPC添加到其中,這樣韌體就可以從ARM加載,當從唯一的IPU解決方案遷移到具有MPUSS(ARM)和IPUSS的異構SoC時,這種情況很常見,這是本節的重點,為了描述這個程序,我們需要一個TI RTOS測驗用例來處理,為此,我們將使用屬于PDK(安裝為處理器SDKRTOS的一部分)的UART_BasicExgrom_evmAM572x_m4ExampleProject示例,此示例使用TI RTOS并在AM572xGP EVM上使用UART 3埠執行串行IO操作,它在EVM螢屏上被標記為SerialDebug,

為使整個程序作業采取了若干步驟,每個步驟將在下面的章節中進行描述使用代碼ComposerStudio(CCS)構建并運行EVM上的開箱即用UARTM4示例從IPC軟體包構建并運行EX02_MessageQ示例,并將其轉換為CCS專案,建立它并修改Linux啟動代碼以使用此新映像,這只是一個明智的檢查步驟,以確保我們可以在CCS中構建IPC示例,并讓它們在EVM啟動時運行,在CCS中,進行開箱即用UARTM4示例的克隆,并將其重命名為該示例的IPC版本,然后使用EX02_MessageQ示例作為參考,在IPC塊中添加到UART示例代碼,從CCS構建然后將其添加到Linux韌體檔案夾中,

Linux內核啟用所有配置所需的SOCHW模塊,適當的驅動程式配置所需的時鐘并初始化HW暫存器,對于所有未使用的IP,沒有配置時鐘, 使用設備樹在內核中禁用uart3節點,此外,這限制了內核將這些IP放到睡眠模式,
在每個IPU 1和IPU 2子系統中都有兩個MMU,L1 MMU稱為IPU_UNICACHE_MMU或AmMu和L2 MMU,關于如何在IPC-Remoteproc中配置這一點的說明已在Changing_Cortex_M4_ IPU _Memory_Map一節中進行了描述,IPC處理L1和L2 MMU不同于PDK驅動程式示例如何使用這些MMU設定記憶體訪問,用戶在集成組件時需要管理這些MMU,這種差異突出如下:

PDK示例將地址(0x4X000000)用于外圍暫存器,并使用以下MMU設定L2 MMU使用默認1:1映射Ammu Configuration將物理0x4X000000訪問轉換為邏輯0x4X000000
IPC遠程proc ARM M4要求IPU使用邏輯地址(0x6X000000),并使用以下MMU設定L2 MMU,使MMU將0x6X000000訪問地址轉換為地址0x4X000000(配置為1:1映射和0x6X000000)

因此,在將IPC與PDK驅動程式集成之后,建議使用別名地址來訪問外圍設備和PRCM暫存器,這需要更改PDK驅動程式和應用程式代碼中使用的地址,然后對IPU應用程式源代碼進行以下更改:
將UART_SOC.C檔案添加到專案中,并修改UART_HATTRS中所有IPUUART暫存器實體的基本地址,以使用別名地址:

添加自定義SOC配置還意味著您應該使用通用的UART驅動程式,而不是內置在SOC設定中的驅動程式,要執行此注釋,請在.cfg中使用以下行:

在應用代碼中也有一個實體,在該實體中,我們將指標添加到需要改變如下的PRCM暫存器,現在,您已經準備好構建韌體,構建.out之后,將擴展名更改為.xem 4,并將其復制到用于加載M4韌體的檔案系統中的位置,

  1. IPC模塊的子系統
    IPC模塊初始化IPC的各個子系統,并同步多個處理器,
    MessageQ模塊支持可變長度訊息的結構化發送和接收,
    ListMP模塊是一個基于鏈表的模塊,旨在提供不同處理器之間的通信方式,它使用共享記憶體為多個處理器提供共享、傳遞或存盤資料緩沖區、訊息或狀態資訊的方法,
    HeapMP模塊提供3種型別的記憶體管理、固定大小的緩沖區、多個不同的固定大小緩沖區和可變大小的緩沖區.
    GateMP模塊通過其實體執行本地和遠程背景關系保護,通知模塊通過硬體中斷管理軟體中斷的復用/解復用,
    SharedRegion模塊設計用于多處理器環境中,其中存在跨不同處理器共享和訪問的記憶體區域,串列模塊支持創建雙鏈接的物件串列,MultiProc模塊在多處理器環境中將處理器ID管理集中到一個模塊中,
    NameServerModule管理本地名稱/值對,這使得應用程式和其他模塊能夠基于名稱來調整和檢索值,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/190225.html

標籤:其他

上一篇:Tomcat:第三章:Tomcat各組件

下一篇:2020年程式員節雜記:老驥明知桑榆晚,不用揚鞭自奮蹄

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more