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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ICS國際標(biāo)準(zhǔn)分類號

CCS中國標(biāo)準(zhǔn)文獻(xiàn)分類號

團(tuán)體標(biāo)準(zhǔn)

T/CESXXX-XXXX

電力智能終端硬件抽象層接口技術(shù)規(guī)范

Technicalspecificationforhardwareabstractionlayersoftwareandinterfaceof

smartelectricpowerterminalunit

XXXX-XX-XX發(fā)布XXXX-XX-XX實(shí)施

中國電工技術(shù)學(xué)會發(fā)布

T/CESXXX—XXXX

電力智能終端硬件抽象層接口技術(shù)規(guī)范

1范圍

本文件規(guī)定了電力智能終端硬件抽象層接口調(diào)用框架、設(shè)計(jì)要求及接口定義。

本文件適用于電力智能終端(以下簡稱“終端”)硬件抽象層的開發(fā)和使用。

2規(guī)范性引用文件

下列文件對于本文件的應(yīng)用是必不可少的。凡是注日期的引用文件,僅注日期的版本適用于本文

件。凡是不注日期的引用文件,其最新版本(包括所有的修改單)適用于本文件。

GB/T11457—2016信息技術(shù)軟件工程術(shù)語

GB/T16262.1—2006信息技術(shù)抽象語法記法(ASN.1)第1部分:基本記法規(guī)范

GB/T17626.30電磁兼容試驗(yàn)和測量技術(shù)電能質(zhì)量測試方法

GB/T17966—2000微處理器系統(tǒng)的二進(jìn)制浮點(diǎn)運(yùn)算

GB/T20272—2019信息安全技術(shù)操作系統(tǒng)安全技術(shù)要求

DL/T645—2007多功能電能表通信協(xié)議

DL/T790.6—2010采用配電線載波系統(tǒng)的配電自動化第6部分:A-XDR編碼規(guī)則

Q/GDW10376.2—2019電力用戶用電信息采集系統(tǒng)通信協(xié)議第2部分:集中器本地通信模塊接

口協(xié)議

Q/GDW11778—2017面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議

3術(shù)語和定義

下列術(shù)語和定義適用于本文件。

3.1

硬件抽象層hardwareabstractlayer

位于操作系統(tǒng)內(nèi)核與硬件電路之間的接口層,其目的在于將硬件抽象化。它隱藏了特定平臺的硬

件接口細(xì)節(jié),為操作系統(tǒng)提供虛擬硬件平臺,使其具有硬件無關(guān)性,可在多種平臺上進(jìn)行移植。

3.2

文件系統(tǒng)filesystem

操作系統(tǒng)用于明確磁盤或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu),既指磁盤上組織文件的方法,也指用

于存儲文件的磁盤或分區(qū)。

4符號、代號和縮略語

下列符號、代號和縮略語適用于本文件。

API:應(yīng)用程序編程接口(applicationprogramminginterface)

HAL:硬件抽象層(hardwareabstractlayer)

LED:發(fā)光二極管(lightemittingdiode)

RTC:實(shí)時(shí)時(shí)鐘(realtimeclock)

USB:通用串行總線(universalserialbus)

WDT:看門狗(watchdogtimer)

5HAL接口調(diào)用框架

HAL接口調(diào)用框架要求如下:

1

T/CESXXX—XXXX

a)應(yīng)作為設(shè)備驅(qū)動和系統(tǒng)調(diào)用的一個(gè)封裝;

b)應(yīng)由系統(tǒng)接口、設(shè)備操作接口組成;

c)應(yīng)在操作系統(tǒng)中以動態(tài)庫的形式為上層應(yīng)用軟件提供統(tǒng)一的調(diào)用接口,上層應(yīng)用軟件不必知道

下層的具體實(shí)現(xiàn),見圖1。

圖1HAL接口調(diào)用框架圖

6HAL設(shè)計(jì)要求

6.1HAL職責(zé)

HAL應(yīng)隱藏不同嵌入式操作系統(tǒng)和硬件設(shè)備的具體實(shí)現(xiàn)細(xì)節(jié),為各類應(yīng)用軟件提供標(biāo)準(zhǔn)化調(diào)用接

口。

6.2HAL設(shè)計(jì)原則

HAL具體設(shè)計(jì)原則如下:

a)應(yīng)向前兼容,可擴(kuò)增HAL的API,但不能減少;

b)應(yīng)統(tǒng)一定義系統(tǒng)API,適配各種嵌入式操作系統(tǒng)基礎(chǔ)調(diào)用接口,滿足上層應(yīng)用軟件開發(fā)需求;

c)應(yīng)統(tǒng)一定義設(shè)備操作API,對應(yīng)的驅(qū)動程序負(fù)責(zé)將這些操作調(diào)用映射到實(shí)際的硬件;

d)應(yīng)保持API風(fēng)格一致;

e)設(shè)備節(jié)點(diǎn)是對設(shè)備的抽象,應(yīng)保證所有設(shè)備節(jié)點(diǎn)都以文件的形式存放在/dev目錄下,應(yīng)用軟件

通過設(shè)備節(jié)點(diǎn)名稱訪問設(shè)備。

6.3HAL約束條件

HAL具體約束條件如下:

2

T/CESXXX—XXXX

a)應(yīng)以動態(tài)庫的形式隨系統(tǒng)發(fā)布;

b)應(yīng)保證設(shè)備驅(qū)動至少實(shí)現(xiàn)open,close,read,write,ioctl操作;

c)設(shè)備節(jié)點(diǎn)所在路徑應(yīng)統(tǒng)一定義為:/dev/。

7HAL接口定義

7.1HAL對外接口定義

HAL框架對外提供接口如下:

a)應(yīng)具備系統(tǒng)函數(shù)調(diào)用接口;

b)應(yīng)具備設(shè)備節(jié)點(diǎn)操作接口。

7.2HAL系統(tǒng)函數(shù)調(diào)用接口

7.2.1內(nèi)存管理

系統(tǒng)內(nèi)存管理的接口見表1,定義詳情見附錄A.1。

表1系統(tǒng)內(nèi)存管理接口列表

序號接口名稱接口描述

1hal_malloc內(nèi)存分配

2hal_realloc內(nèi)存調(diào)整

3hal_free內(nèi)存釋放

7.2.2進(jìn)程管理

系統(tǒng)進(jìn)程管理的接口見表2,定義詳情見附錄A.2。

表2系統(tǒng)進(jìn)程管理接口列表

序號接口名稱接口描述

1hal_fork_create創(chuàng)建進(jìn)程

2hal_fork_exit終止進(jìn)程

3hal_fork_exec運(yùn)行可執(zhí)行文件

4hal_fork_getpid獲取進(jìn)程標(biāo)識

5hal_fork_waitpid等待進(jìn)程終止

7.2.3信號量

系統(tǒng)信號量的接口見表3,定義詳情見附錄A.3。

表3系統(tǒng)信號量接口列表

序號接口名稱接口描述

1hal_semaphore_create創(chuàng)建信號量

2hal_semaphore_destroy銷毀信號量

3hal_semaphore_post發(fā)送信號量

4hal_semaphore_wait等待信號量

7.2.4線程管理

3

T/CESXXX—XXXX

系統(tǒng)線程管理的接口見表4,定義詳情見附錄A.4。

表4系統(tǒng)線程管理接口列表

序號接口名稱接口描述

1hal_thread_create創(chuàng)建線程

2hal_thread_detach設(shè)置線程分離

3hal_thread_delete刪除線程

7.2.5互斥鎖

系統(tǒng)互斥鎖的接口見表5,定義詳情見附錄A.5。

表5系統(tǒng)互斥鎖接口列表

序號接口名稱接口描述

1hal_mutex_create創(chuàng)建互斥鎖

2hal_mutex_destroy銷毀互斥鎖

3hal_mutex_lock鎖上互斥鎖

4hal_mutex_unlock解鎖互斥鎖

7.2.6文件管理

系統(tǒng)文件管理的接口見表6,定義詳情見附錄A.6。

表6系統(tǒng)文件管理接口列表

序號接口名稱接口描述

1hal_file_open打開文件

2hal_file_close關(guān)閉文件

3hal_file_read讀文件

4hal_file_write寫文件

5hal_file_seek移動文件指針

7.2.7時(shí)間管理

系統(tǒng)時(shí)間管理的接口見表7,定義詳情見附錄A.7。

表7系統(tǒng)時(shí)間管理接口列表

序號接口名稱接口描述

1hal_timer_create創(chuàng)建計(jì)時(shí)器

2hal_timer_delete刪除計(jì)時(shí)器

3hal_timer_start啟動計(jì)時(shí)器

4hal_timer_stop停止計(jì)時(shí)器

5hal_get_time_ms獲取系統(tǒng)當(dāng)前時(shí)間,單位毫秒

6hal_sleep_ms休眠,單位毫秒

4

T/CESXXX—XXXX

7.2.8套接字(socket)

套接字(socket)操作接口見表8,定義詳情見附錄A.8。

表8套接字(socket)操作接口列表

序號接口名稱接口描述

1hal_socket_open建立套接字

2hal_socket_close關(guān)閉套接字

3hal_socket_write向socket寫數(shù)據(jù)

4hal_socket_read從socket讀數(shù)據(jù)

5hal_socket_connect連接遠(yuǎn)程主機(jī)

7.2.9系統(tǒng)應(yīng)用

系統(tǒng)應(yīng)用的接口見表9,定義詳情見附錄A.9。

表9系統(tǒng)應(yīng)用接口列表

序號接口名稱接口描述

1hal_snprintf格式化字符串

2hdl_printf打印信息

7.3HAL設(shè)備節(jié)點(diǎn)操作接口

7.3.1設(shè)備節(jié)點(diǎn)操作接口

設(shè)備節(jié)點(diǎn)操作接口見表10。

表10設(shè)備節(jié)點(diǎn)操作接口列表

序號接口名稱接口描述

1hal_device_open打開設(shè)備節(jié)點(diǎn)

2hal_device_close關(guān)閉設(shè)備節(jié)點(diǎn)

3hal_device_read設(shè)備節(jié)點(diǎn)讀數(shù)據(jù)

4hal_device_write設(shè)備節(jié)點(diǎn)寫數(shù)據(jù)

5hal_device_set設(shè)置設(shè)備節(jié)點(diǎn)參數(shù)

7.3.2設(shè)備節(jié)點(diǎn)命名和接口詳情

7.3.2.1RS485

設(shè)備節(jié)點(diǎn)名稱為:

485-n:“/dev/ttyRSn”,n為整數(shù)(0-255)。

接口定義詳情見附錄A.10。

7.3.2.2載波

設(shè)備節(jié)點(diǎn)名稱為:

“/dev/ttyPLCn”,n為整數(shù)(0-255)。

接口定義詳情見附錄A.11。

5

T/CESXXX—XXXX

7.3.2.34G

設(shè)備節(jié)點(diǎn)名稱為:

“/dev/ttyLTEn”,n為整數(shù)(0-255)。

接口定義詳情見附錄A.12。

7.3.2.4藍(lán)牙

設(shè)備節(jié)點(diǎn)名稱為:

“/dev/ttyBTn”,n為整數(shù)(0-255)。

接口定義詳情見附錄A.13。

7.3.2.5LED

設(shè)備節(jié)點(diǎn)名稱為:

“/dev/ledn”,n為整數(shù)(0-255)。

接口定義詳情見附錄A.14。

7.3.2.6WDT

設(shè)備節(jié)點(diǎn)名稱為:

“/dev/watchdog”。

接口定義詳情見附錄A.15。

6

T/CESXXX—XXXX

附錄A

(資料性附錄)

HAL對外接口定義

A.1內(nèi)存管理接口定義

內(nèi)存管理接口定義詳情見表A.1。

表A.1內(nèi)存管理接口定義詳情表

序號接口名稱接口定義

/**

*@brief內(nèi)存分配

*@param[in]size:分配大小

1內(nèi)存分配

*@return成功返回內(nèi)存首地址;失敗返回NULL

*/

void*hal_malloc(unsignedintsize);

/**

*@brief內(nèi)存調(diào)整

*@param[in]ptr:內(nèi)存地址

2內(nèi)存調(diào)整*@param[in]size:調(diào)整大小

*@return成功返回內(nèi)存首地址;失敗返回NULL

*/

void*hal_realloc(void*ptr,unsignedintsize);

/**

*@brief內(nèi)存釋放

*@param[in]ptr:內(nèi)存地址

3內(nèi)存調(diào)整

*@return無

*/

voidhal_free(void*ptr);

A.2進(jìn)程管理接口定義

進(jìn)程管理接口定義詳情見表A.2。

表A.2進(jìn)程管理接口定義詳情表

序號接口名稱接口定義

/**

*@brief創(chuàng)建進(jìn)程

*@param[in]:無

1創(chuàng)建進(jìn)程*@return成功返回0;失敗返回錯誤碼

*/

pid_thal_fork_create(void);

/**

*@brief終止進(jìn)程

*@param[in]status:進(jìn)程狀態(tài)

2終止進(jìn)程*@return:無

*/

voidhal_fork_exit(intstatus);

7

T/CESXXX—XXXX

/**

*@brief運(yùn)行可執(zhí)行文件

*@param[in]path:可執(zhí)行文件路徑

*@param[in]arg:參數(shù)

3運(yùn)行可執(zhí)行文件*@param[in]...:參數(shù)

*@return成功返回0;失敗返回錯誤碼

*/

inthal_fork_exec(constchar*path,constchar*arg,...);

/**

*@brief獲取進(jìn)程標(biāo)識

*@param[in]:無

4獲取進(jìn)程標(biāo)識*@return成功返回當(dāng)前進(jìn)程標(biāo)識;失敗返回錯誤碼

*/

pid_thal_fork_getpid(void);

/**

*@brief等待進(jìn)程終止

*@param[in]pid:進(jìn)程標(biāo)識

*@param[in]status:進(jìn)程狀態(tài)

5等待進(jìn)程終止*@param[in]options:操作碼

*@return成功返回子進(jìn)程標(biāo)識;失敗返回錯誤碼

*/

pid_thal_fork_waitpid(pid_tpid,int*status,intoptions);

A.3信號量接口定義

信號量接口定義詳情見表A.3。

表A.3信號量接口定義詳情表

序號接口名稱接口定義

/**

*@brief創(chuàng)建信號量

*@param[in]無

1創(chuàng)建信號量*@return成功返回信號量對象地址;失敗返回NULL

*/

void*hal_semaphore_create(void);

/**

*@brief銷毀信號量

*@param[in]sem:信號量對象

2銷毀信號量*@return:成功返回0;失敗返回錯誤碼

*/

inthal_semaphore_destroy(void*sem);

/**

*@brief發(fā)送信號量

*@param[in]sem:信號量對象

3發(fā)送信號量*@return:成功返回0;失敗返回錯誤碼

*/

inthal_semaphore_post(void*sem);

8

T/CESXXX—XXXX

/**

*@brief等待信號量

*@param[in]sem:信號量對象

超時(shí)時(shí)間

4等待信號量*@param[in]timeout_ms:

*@return:成功返回0;失敗返回錯誤碼

*/

inthal_semaphore_wait(void*sem,unsignedinttimeout_ms);

A.4線程管理接口定義

線程管理接口定義詳情見表A.4。

表A.4線程管理接口定義詳情表

序號接口名稱接口定義

/**

*@brief創(chuàng)建線程

*@param[in]thread_handle:線程標(biāo)識

*@param[in]work_routine:線程調(diào)用函數(shù)

調(diào)用函數(shù)參數(shù)

1創(chuàng)建線程*@param[in]arg:

*@return:成功返回0;失敗返回錯誤碼

*/

inthal_thread_create(void**thread_handle,void

*(*work_routine)(void*),void*arg);

/**

*@brief設(shè)置線程分離

*@param[in]thread_handle:線程標(biāo)識

2設(shè)置線程分離*@return:成功返回0;失敗返回錯誤碼

*/

inthal_thread_detach(void*thread_handle);

/**

*@brief刪除線程

*@param[in]thread_handle:線程標(biāo)識

3刪除線程*@return:成功返回0;失敗返回錯誤碼

*/

inthal_thread_delete(void*thread_handle);

A.5互斥鎖接口定義

互斥鎖接口定義詳情見表A.5。

表A.5互斥鎖接口定義詳情表

序號接口名稱接口定義

/**

*@brief創(chuàng)建互斥鎖

*@param[in]:無

1創(chuàng)建互斥鎖*@return:成功返回互斥鎖句柄;失敗返回NULL

*/

void*hal_mutex_create(void);

9

T/CESXXX—XXXX

/**

*@brief銷毀互斥鎖

*@param[in]mutex:互斥鎖句柄

2銷毀互斥鎖*@return:成功返回0;失敗返回錯誤碼

*/

inthal_mutex_destroy(void*mutex);

/**

*@brief鎖上互斥鎖

*@param[in]mutex:互斥鎖句柄

3鎖上互斥鎖*@return:成功返回0;失敗返回錯誤碼

*/

inthal_mutex_lock(void*mutex);

/**

*@brief解鎖互斥鎖

*@param[in]mutex:互斥鎖句柄

4解鎖互斥鎖*@return:成功返回0;失敗返回錯誤碼

*/

inthal_mutex_unlock(void*mutex);

A.6文件管理接口定義

文件管理接口定義詳情見表A.6。

表A.6文件管理接口定義詳情表

序號接口名稱接口定義

/**

*@brief字符串mode定義為文件打開形態(tài)

r打開只讀文件;

r+打開可讀寫的文件;

w打開只寫文件;

w+打開可讀寫文件;

a以附加的方式打開只寫文件;

a+以附加方式打開可讀寫的文件;

上述的形態(tài)字符串都可以再加一個(gè)b字符,如rb、w+b或ab+等

1打開文件

組合,加入b字符用來告訴函數(shù)庫打開的文件為二進(jìn)制文件,而非純文字

文件。

*@brief打開文件

*@param[in]path:文件路徑

*@param[in]mode:打開形態(tài)

*@return:成功返回文件指針;失敗返回NULL

*/

FILE*hal_file_open(constchar*path,constchar*mode);

/**

*@brief關(guān)閉文件

*@param[in]stream:文件指針

2關(guān)閉文件*@return:成功返回0;失敗返回錯誤碼

*/

inthal_file_close(FILE*stream);

10

T/CESXXX—XXXX

/**

*@brief讀文件

*@param[in]buff:讀緩存

*@param[in]len:讀最大字節(jié)數(shù)

3讀文件*@param[in]stream:文件指針

*@return:成功返回讀字節(jié)數(shù);失敗返回錯誤碼

*/

inthal_file_read(void*buff,intlen,FILE*stream);

/**

*@brief寫文件

*@param[in]buff:寫緩存

*@param[in]len:寫最大字節(jié)數(shù)

4寫文件*@param[in]stream:文件指針

*@return:成功返回寫字節(jié)數(shù);失敗返回錯誤碼

*/

inthal_file_write(void*buff,intlen,FILE*stream);

/**

*@brief參數(shù)whence定義為文件指針移動位置

SEEK_SET從距文件開頭offset位移量為新的讀寫位置;

SEEK_CUR以目前的讀寫位置往后增加offset個(gè)位移量;

SEEK_END將讀寫位置指向文件尾后再增加offset個(gè)位移量。

*@brief移動文件指針

5移動文件指針*@param[in]stream:文件指針

*@param[in]offset:移動數(shù)量

*@param[in]whence:移動位置

*@return:成功返回0;失敗返回錯誤碼

*/

inthal_file_seek(FILE*stream,intoffset,intwhence);

A.7時(shí)間管理接口定義

時(shí)間管理接口定義詳情見表A.7。

表A.7時(shí)間管理接口定義詳情表

序號接口名稱接口定義

/**

*@brief創(chuàng)建計(jì)時(shí)器

*@param[in]func:回調(diào)函數(shù)

回調(diào)函數(shù)參數(shù)

1創(chuàng)建計(jì)時(shí)器*@param[in]user_data:

*@return:成功返回定時(shí)器對象地址;失敗返回NULL

*/

void*hal_timer_create(void(*func)(void*),void*user_data);

/**

*@brief刪除計(jì)時(shí)器

*@param[in]timer:定時(shí)器對象

2刪除計(jì)時(shí)器*@return:成功返回0;失敗返回錯誤碼

*/

inthal_timer_delete(void*timer);

11

T/CESXXX—XXXX

/**

*@brief啟動計(jì)時(shí)器

*@param[in]timer:定時(shí)器對象

啟動計(jì)時(shí)器

3*@return:成功返回0;失敗返回錯誤碼

*/

inthal_timer_start(void*timer);

/**

*@brief停止計(jì)時(shí)器

*@param[in]timer:定時(shí)器對象

停止計(jì)時(shí)器

4*@return:成功返回0;失敗返回錯誤碼

*/

inthal_timer_stop(void*timer);

/**

*@brief獲取系統(tǒng)當(dāng)前時(shí)間,單位毫秒

*@param[in]:無

5獲取系統(tǒng)當(dāng)前時(shí)間*@return:成功返回當(dāng)前時(shí)間戳;失敗返回錯誤碼

*/

int64hal_get_time_ms(void);

/**

*@brief休眠,單位毫秒

溫馨提示

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

評論

0/150

提交評論