2023電力智能終端硬件抽象層接口技術規(guī)范_第1頁
2023電力智能終端硬件抽象層接口技術規(guī)范_第2頁
2023電力智能終端硬件抽象層接口技術規(guī)范_第3頁
2023電力智能終端硬件抽象層接口技術規(guī)范_第4頁
2023電力智能終端硬件抽象層接口技術規(guī)范_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

電力智能終端硬件抽象層接口技術規(guī)范II目 次前言 II112范引文件 13語定義 14號代和略語 15HAL口用16HAL計26.1HAL職責 2HAL設原則 2HAL約條件 27HAL口3HAL對接定義 3HAL系函調(diào)3HAL設節(jié)操5附錄資性錄)HAL外口7附錄規(guī)性錄)接口誤定義 2011電力智能終端硬件抽象層接口技術規(guī)范下列文件對于本文件的應用是必不可少的。凡是注日期的引用文件,僅注日期的版本適用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改單)適用于本文件。GB/T11457—2016信息技術軟件工程術語GB/T16262.1—2006 息技術 象法法(ASN.1)第1部:記法GB/T17626.30電磁兼容試驗和測量技術電能質(zhì)量測試方法GB/T17966—2000 GB/T20272—2019DL/T790.6—2010 6A-XDRQ/GDW10376.2—2019電力用戶用電信息采集系統(tǒng)通信協(xié)議第2部分:集中器本地通信模塊接口協(xié)議Q/GDW11778—2017下列術語和定義適用于本文件。3.1硬件抽象層hardwareabstractlayer位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層,其目的在于將硬件抽象化。它隱藏了特定平臺的硬件接口細節(jié),為操作系統(tǒng)提供虛擬硬件平臺,使其具有硬件無關性,可在多種平臺上進行移植。3.2文件系統(tǒng)filesystem操作系統(tǒng)用于明確磁盤或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),既指磁盤上組織文件的方法,也指用于存儲文件的磁盤或分區(qū)。下列符號、代號和縮略語適用于本文件。API:應用程序編程接口(applicationprogramminginterface)HAL:硬件抽象層(hardwareabstractlayer)LED:發(fā)光二極管(lightemittingdiode)RTC:實時時鐘(realtimeclock)USB:通用串行總線(universalserialbus)WDT:看門狗(watchdogtimer)HALHAL接口調(diào)用框架要求如下:22。圖1 HAL接口調(diào)框圖HALHAL職責HAL設計原則HAL具體設計原則如下:的API HAL約束條件HAL具體約束條件如下:33。HALHALHAL框架對外提供接口如下:HAL系統(tǒng)內(nèi)存管理的接口見表1,定義詳情見附錄A.1。表1 系內(nèi)管接列表序號接口名稱接口描述1hal_malloc內(nèi)存分配2hal_realloc內(nèi)存調(diào)整3hal_free內(nèi)存釋放系統(tǒng)進程管理的接口見表2,定義詳情見附錄A.2。表2 系進管接列表序號接口名稱接口描述1hal_fork_create創(chuàng)建進程2hal_fork_exit終止進程3hal_fork_exec運行可執(zhí)行文件4hal_fork_getpid獲取進程標識5hal_fork_waitpid等待進程終止系統(tǒng)信號量的接口見表3,定義詳情見附錄A.3。表3 系信量口表序號接口名稱接口描述1hal_semaphore_create創(chuàng)建信號量2hal_semaphore_destroy銷毀信號量3hal_semaphore_post發(fā)送信號量4hal_semaphore_wait等待信號量44系統(tǒng)線程管理的接口見表4,定義詳情見附錄A.4。表4 系線管接列表序號接口名稱接口描述1hal_thread_create創(chuàng)建線程2hal_thread_detach設置線程分離3hal_thread_delete刪除線程系統(tǒng)互斥鎖的接口見表5,定義詳情見附錄A.5。表5 系互鎖口表序號接口名稱接口描述1hal_mutex_create創(chuàng)建互斥鎖2hal_mutex_destroy銷毀互斥鎖3hal_mutex_lock鎖上互斥鎖4hal_mutex_unlock解鎖互斥鎖系統(tǒng)文件管理的接口見表6,定義詳情見附錄A.6。表6 系文管接列表序號接口名稱接口描述1hal_file_open打開文件2hal_file_close關閉文件3hal_file_read讀文件4hal_file_write寫文件5hal_file_seek移動文件指針系統(tǒng)時間管理的接口見表7,定義詳情見附錄A.7。表7 系時管接列表序號接口名稱接口描述1hal_timer_create創(chuàng)建計時器2hal_timer_delete刪除計時器3hal_timer_start啟動計時器4hal_timer_stop停止計時器5hal_get_time_ms獲取系統(tǒng)當前時間,單位毫秒6hal_sleep_ms休眠,單位毫秒55(socket)套接字(socket)操作接口見表8,定義詳情見附錄A.8。表8 套字(socket)作接列表序號接口名稱接口描述1hal_socket_open建立套接字2hal_socket_close關閉套接字3hal_socket_write向socket寫數(shù)據(jù)4hal_socket_read從socket讀數(shù)據(jù)5hal_socket_connect連接遠程主機系統(tǒng)應用的接口見表9,定義詳情見附錄A.9。表9 系應接列表序號接口名稱接口描述1hal_snprintf格式化字符串2hdl_printf打印信息HAL設備節(jié)點操作接口見表10。表10 備點作列表序號接口名稱接口描述1hal_device_open打開設備節(jié)點2hal_device_close關閉設備節(jié)點3hal_device_read設備節(jié)點讀數(shù)據(jù)4hal_device_write設備節(jié)點寫數(shù)據(jù)5hal_device_set設置設備節(jié)點參數(shù)7.3.2.1 RS485設備節(jié)點名稱為:-。設備節(jié)點名稱為:-。664G-。設備節(jié)點名稱為:-。LED設備節(jié)點名稱為:-。WDT設備節(jié)點名稱為:“/dev/watchdog”。接口定義詳情見附錄A.15。77附 錄 A(資料性附錄)HAL對外接口定義內(nèi)存管理接口定義詳情見表A.1。表A.1 內(nèi)管接義詳序號接口名稱接口定義1內(nèi)存分配/**@brief內(nèi)存分配@param[in]size:分配大小@returnNULL*/void*hal_malloc(unsignedintsize);2內(nèi)存調(diào)整/**@brief內(nèi)存調(diào)整@param[inptr:內(nèi)存地址@param[in]size:調(diào)整大小@returnNULL*/void*hal_realloc(void*ptr,unsignedintsize);3內(nèi)存調(diào)整/**@brief內(nèi)存釋放@param[inptr:內(nèi)存地址@return無*/voidhal_free(void*ptr);進程管理接口定義詳情見表A.2。表A.2 進管接義詳序號接口名稱接口定義1創(chuàng)建進程/**@brief創(chuàng)建進程@param[in]:無@return0*/pid_thal_fork_create(void);2終止進程/**@brief終止進程@param[instatus:@return:無*/voidhal_fork_exit(intstatus);883運行可執(zhí)行文件/**@brief運行可執(zhí)行文件@param[inpath:@param[in]arg:參數(shù)@param[in]...:參數(shù)@return0*/inthal_fork_exec(constchar*path,constchar*arg,...);4獲取進程標識/**@brief獲取進程標識@param[in]:無@return*/pid_thal_fork_getpid(void);5等待進程終止/**@brief等待進程終止@param[inpid:進程標識@param[in]status:進程狀態(tài)@param[in]options:操作碼@return*/pid_thal_fork_waitpid(pid_tpid,int*status,intoptions);信號量接口定義詳情見表A.3。表A.3 信量口詳情表序號接口名稱接口定義1創(chuàng)建信號量/**@brief創(chuàng)建信號量@param[in]無@returnNULL*/void*hal_semaphore_create(void);2銷毀信號量/**@brief銷毀信號量@param[insem:@return0*/inthal_semaphore_destroy(void*sem);3發(fā)送信號量/**@brief發(fā)送信號量@param[insem:@return0*/inthal_semaphore_post(void*sem);994等待信號量/**@brief等待信號量@param[insem:@param[in]timeout_ms:@return:0*/inthal_semaphore_wait(void*sem,unsignedinttimeout_ms);線程管理接口定義詳情見表A.4。表A.4 線管接義詳序號接口名稱接口定義1創(chuàng)建線程/**@brief創(chuàng)建線程@param[inthread_handle:線程標識@param[in]work_routine:線程調(diào)用函數(shù)@param[in]arg:@return:0*/inthal_thread_create(void**thread_handle,void*(*work_routine)(void*),void*arg);2設置線程分離/**@brief設置線程分離@param[inthread_handle:線程標識@return:0*/inthal_thread_detach(void*thread_handle);3刪除線程/**@brief刪除線程@param[inthread_handle:線程標識@return:0*/inthal_thread_delete(void*thread_handle);互斥鎖接口定義詳情見表A.5。表A.5 互鎖口詳情表序號接口名稱接口定義1創(chuàng)建互斥鎖/**@brief創(chuàng)建互斥鎖@param[in無@return:NULL*/void*hal_mutex_create(void);10102銷毀互斥鎖/**@brief銷毀互斥鎖@param[inmutex:@return:0*/inthal_mutex_destroy(void*mutex);3鎖上互斥鎖/**@brief鎖上互斥鎖@param[inmutex:@return:0*/inthal_mutex_lock(void*mutex);4解鎖互斥鎖/**@brief解鎖互斥鎖@param[inmutex:@return:0*/inthal_mutex_unlock(void*mutex);文件管理接口定義詳情見表A.6。表A.6 文管接義詳序號接口名稱接口定義1打開文件/***@brief字符串mode定義為文件打開形態(tài)r打開只讀文件;r+打開可讀寫的文件;w打開只寫文件;w+打開可讀寫文件;a以附加的方式打開只寫文件;a+以附加方式打開可讀寫的文件;上述的形態(tài)字符串都可以再加一個b字符,如rb、w+b或ab+等組合,加入b字符用來告訴函數(shù)庫打開的文件為二進制文件,而非純文字文件。@brief打開文件@param[inpath:文件路徑@param[in]mode:打開形態(tài)@return:NULL*/FILE*hal_file_open(constchar*path,constchar*mode);2關閉文件/**@brief關閉文件@param[in]stream:@return:0*/inthal_file_close(FILE*stream);11113讀文件/**@brief讀文件@param[inbuff:讀緩存@param[in]len:@param[in]stream:@return:成功返回讀字節(jié)數(shù);失敗返回錯誤碼*/inthal_file_read(void*buff,intlen,FILE*stream);4寫文件/**@brief寫文件@param[inbuff:寫緩存@param[in]len:@param[in]stream:@return:成功返回寫字節(jié)數(shù);失敗返回錯誤碼*/inthal_file_write(void*buff,intlen,FILE*stream);5移動文件指針/***@brief參數(shù)whence定義為文件指針移動位置SEEK_SET從距文件開頭offset位移量為新的讀寫位置;SEEK_CUR以目前的讀寫位置往后增加offset個位移量;SEEK_END將讀寫位置指向文件尾后再增加offset個位移量。@brief移動文件指針@param[instream:@param[in]offset:移動數(shù)量@param[in]whence:@return:0*/inthal_file_seek(FILE*stream,intoffset,intwhence);時間管理接口定義詳情見表A.7。表A.7 時管接義詳序號接口名稱接口定義1創(chuàng)建計時器/**@brief創(chuàng)建計時器@param[infunc:回調(diào)函數(shù)@param[in]user_data:@return:NULL*/void*hal_timer_create(void(*func)(void*),void*user_data);2刪除計時器/**@brief刪除計時器@param[intimer:@return:0*/inthal_timer_delete(void*timer);12123啟動計時器/**@brief啟動計時器@param[intimer:@return:0*/inthal_timer_start(void*timer);4停止計時器/**@brief停止計時器@param[intimer:@return:0*/inthal_timer_stop(void*timer);5獲取系統(tǒng)當前時間/**@brief@param[in無@return:成功返回當前時間戳;失敗返回錯誤碼*/int64hal_get_time_ms(void);6休眠/**@brief休眠,單位毫秒@param[inms:休眠時間@return:無*/voidhal_sleep_ms(unsignedintms);socketsocket套接字接口定義詳情見表A.8。表A.8 socket接接定義情表序號接口名稱接口定義1建立套接字/**@brief建立套接字@param[in無@return:socket句柄;失敗返回錯誤碼*/inthal_socket_open(void);2關閉套接字/**@brief關閉套接字@param[insockfd:socket句柄@return:0*/inthal_socket_close(intsockfd);3向socket寫數(shù)據(jù)/**@briefsocket寫數(shù)據(jù)@param[insockfd:socket句柄@param[in]send_buff:@param[in]send_len:@return:成功返回寫數(shù)據(jù)長度;失敗返回錯誤碼13134從socket讀數(shù)據(jù)/**@briefsocket讀數(shù)據(jù)@param[insockfd:socket句柄@param[in]recv_buff:@param[in]recv_len:@return:成功返回讀數(shù)據(jù)長度;失敗返回錯誤碼*/inthal_socket_read(intsockfd,unsignedchar*recv_buff,unsignedintrecv_len);5連接遠程主機/**@brief連接遠程主機@param[insockfd:socket句柄@param[in]server:主機地址@param[in]port:主機端口@return:0*/inthal_socket_connect(intsockfd,constchar*server,constintport);系統(tǒng)應用接口定義詳情見表A.9。表A.9 系應接義詳序號接口名稱接口定義1格式化字符串/**@brief格式化字符串@param[instr:@param[in]len:@param[in]fmt:@param[in]格式化內(nèi)容@return:成功返回格式化字符串長度;失敗返回錯誤碼*/inthal_snprintf(char*str,constintlen,constchar*fmt,...);2打印信息/**@brief打印信息@param[infmt:字符串格式@param[in]打印內(nèi)容@return:無*/voidhal_printf(constchar*fmt,...);RS485RS485模塊接口定義詳情見表A.10。表A.10 RS485模接定義情表序號接口名稱接口定義14141打開設備節(jié)點/***@briefintflags,不能同時出現(xiàn)但是必須有一種出現(xiàn)O_RDWR:只讀模式只寫模式O_RDWR: 可讀可寫模@brief打開設備節(jié)點@param[indev_name:@param[inflags:@return*/inthal_device_open(char*dev_name,intflags);2關閉設備節(jié)點/**@brief關閉設備節(jié)點@param[in]fd:設備描述符@return:0*/inthal_device_close(intfd);3設備節(jié)點讀數(shù)據(jù)/**@brief讀設備數(shù)據(jù)@param[in]fd:@param[out]buf:@param[in]len:@return*/inthal_device_read(intfd,unsignedchar*buf,intlen);4設備節(jié)點寫數(shù)據(jù)/**@brief向設備節(jié)點寫數(shù)據(jù)@param[in]fd:設備描述符@param[in]buf:寫緩存區(qū)@param[in]len:@return*/inthal_device_write(intfd,unsignedchar*buf,intlen);5設置設備節(jié)點參數(shù)/**@brief設置設備參數(shù)@param[in]fd:設備描述@param[in]dev_type@param[in]devattr@return00值*/inthal_device_set(intfd,intdev_type,void*devattr);載波模塊接口定義詳情見表A.11。表A.11 波塊接義詳序號接口名稱接口定義15151打開設備節(jié)點/***@briefintflags,不能同時出現(xiàn)但是必須有一種出現(xiàn)O_RDWR:只讀模式只寫模式O_RDWR: 可讀可寫模@brief打開設備節(jié)點@param[indev_name:@param[inflags:@return*/inthal_device_open(char*dev_name,intflags);2關閉設備節(jié)點/**@brief關閉設備節(jié)點@param[in]fd:設備描述符@return:0*/inthal_device_close(intfd);3設備節(jié)點讀數(shù)據(jù)/**@brief讀設備數(shù)據(jù)@param[in]fd:@param[out]buf:@param[in]len:@return*/inthal_device_read(intfd,unsignedchar*buf,intlen);4設備節(jié)點寫數(shù)據(jù)/**@brief向設備節(jié)點寫數(shù)據(jù)@param[in]fd:設備描述符@param[in]buf:寫緩存區(qū)@param[in]len:@return*/inthal_device_write(intfd,unsignedchar*buf,intlen);5設置設備節(jié)點參數(shù)/**@brief設置設備參數(shù)@param[in]fd:設備描述@param[in]dev_type@param[in]devattr@return00值*/inthal_device_set(intfd,intdev_type,void*devattr);4G4G模塊接口定義詳情見表A.12。表A.12 4G塊口詳情表序號接口名稱接口定義16161打開設備節(jié)點/***@briefintflags,不能同時出現(xiàn)但是必須有一種出現(xiàn)O_RDWR:只讀模式只寫模式O_RDWR: 可讀可寫模@brief打開設備節(jié)點@param[indev_name:@param[inflags:@return*/inthal_device_open(char*dev_name,intflags);2關閉設備節(jié)點/**@brief關閉設備節(jié)點@param[in]fd:設備描述符@return:0*/inthal_device_close(intfd);3設備節(jié)點讀數(shù)據(jù)/**@brief讀設備數(shù)據(jù)@param[in]fd:@param[out]buf:@param[in]len:@return*/inthal_device_read(intfd,unsignedchar*buf,intlen);4設備節(jié)點寫數(shù)據(jù)/**@brief向設備節(jié)點寫數(shù)據(jù)@param[in]fd:設備描述符@param[in]buf:寫緩存區(qū)@param[in]len:@return*/inthal_device_write(intfd,unsignedchar*buf,intlen);5設置設備節(jié)點參數(shù)/**@brief設置設備參數(shù)@param[in]fd:設備描述@param[in]dev_type@param[in]devattr@return00值*/inthal_device_set(intfd,intdev_type,void*devattr);藍牙模塊接口定義詳情見表A.13。表A.13 牙塊接義詳序號接口名稱接口定義17171打開設備節(jié)點/***@briefintflags,不能同時出現(xiàn)但是必須有一種出現(xiàn)O_RDWR:只讀模式只寫模式O_RDWR: 可讀可寫模@brief打開設備節(jié)點@param[indev_name:@param[inflags:@return*/inthal_device_open(char*dev_name,intflags);2關閉設備節(jié)點/**@brief關閉設備節(jié)點@param[in]fd:設備描述符@return:0*/inthal_device_close(intfd);3設備節(jié)點讀數(shù)據(jù)/**@brief讀設備數(shù)據(jù)@param[in]fd:@param[out]buf:@param[in]len:@return*/inthal_device_read(intfd,unsignedchar*buf,intlen);4設備節(jié)點寫數(shù)據(jù)/**@brief向設備節(jié)點寫數(shù)據(jù)@param[in]fd:設備描述符@param[in]buf:寫緩存區(qū)@param[in]len:@return*/inthal_device_write(intfd,unsignedchar*buf,intlen);5設置設備節(jié)點參數(shù)/**@brief設置設備參數(shù)@param[in]fd:設備描述@param[in]dev_type@param[in]devattr@return00值*/inthal_device_set(intfd,intdev_type,void*devattr);LEDLED模塊接口定義詳情見表A.14。表A.14 LED塊口義詳序號接口名稱接口定義18181打開設備節(jié)點/***@briefintflags,不能同時出現(xiàn)但是必須有一種出現(xiàn)O_RDWR:只讀模式只寫模式O_RDWR: 可讀可寫模@brief打開設備節(jié)點@param[indev_name:@param[inflags:@return*/inthal_device_open(char*dev_name,intflags);2關閉設備節(jié)點/**@brief關閉設備節(jié)點@param[in]fd:設備描述符@return:0*/inthal_device_close(intfd);3設備節(jié)點讀數(shù)據(jù)/**@brief讀設備數(shù)據(jù)@param[in]fd:@param[out]buf:@param[in]len:@return*/inthal_device_read(intfd,unsignedchar*buf,intlen);4設備節(jié)點寫數(shù)據(jù)/**@brief向設備節(jié)點寫數(shù)據(jù)@param[in]fd:設備描述符@param[in]buf:寫緩存區(qū)@param[in]len:@return*/inthal_device_write(intfd,unsignedchar*buf,intlen);5設置設備節(jié)點參數(shù)/**@brief設置設備參數(shù)@param[in]fd:設備描述@param[in]dev_type@param[i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論