《电力智能终端硬件抽象层接口技术规范》_第1页
《电力智能终端硬件抽象层接口技术规范》_第2页
《电力智能终端硬件抽象层接口技术规范》_第3页
《电力智能终端硬件抽象层接口技术规范》_第4页
《电力智能终端硬件抽象层接口技术规范》_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ICS国际标准分类号

CCS中国标准文献分类号

团体标准

T/CESXXX­XXXX

电力智能终端硬件抽象层接口技术规范

Technicalspecificationforhardwareabstractionlayersoftwareandinterfaceof

smartelectricpowerterminalunit

XXXX-XX-XX发布XXXX-XX-XX实施

中国电工技术学会发布

T/CESXXX—XXXX

电力智能终端硬件抽象层接口技术规范

1范围

本文件规定了电力智能终端硬件抽象层接口调用框架、设计要求及接口定义。

本文件适用于电力智能终端(以下简称“终端”)硬件抽象层的开发和使用。

2规范性引用文件

下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文

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

GB/T11457—2016信息技术软件工程术语

GB/T16262.1—2006信息技术抽象语法记法(ASN.1)第1部分:基本记法规范

GB/T17626.30电磁兼容试验和测量技术电能质量测试方法

GB/T17966—2000微处理器系统的二进制浮点运算

GB/T20272—2019信息安全技术操作系统安全技术要求

DL/T645—2007多功能电能表通信协议

DL/T790.6—2010采用配电线载波系统的配电自动化第6部分:A-XDR编码规则

Q/GDW10376.2—2019电力用户用电信息采集系统通信协议第2部分:集中器本地通信模块接

口协议

Q/GDW11778—2017面向对象的用电信息数据交换协议

3术语和定义

下列术语和定义适用于本文件。

3.1

硬件抽象层hardwareabstractlayer

位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬

件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。

3.2

文件系统filesystem

操作系统用于明确磁盘或分区上的文件的方法和数据结构,既指磁盘上组织文件的方法,也指用

于存储文件的磁盘或分区。

4符号、代号和缩略语

下列符号、代号和缩略语适用于本文件。

API:应用程序编程接口(applicationprogramminginterface)

HAL:硬件抽象层(hardwareabstractlayer)

LED:发光二极管(lightemittingdiode)

RTC:实时时钟(realtimeclock)

USB:通用串行总线(universalserialbus)

WDT:看门狗(watchdogtimer)

5HAL接口调用框架

HAL接口调用框架要求如下:

1

T/CESXXX—XXXX

a)应作为设备驱动和系统调用的一个封装;

b)应由系统接口、设备操作接口组成;

c)应在操作系统中以动态库的形式为上层应用软件提供统一的调用接口,上层应用软件不必知道

下层的具体实现,见图1。

图1HAL接口调用框架图

6HAL设计要求

6.1HAL职责

HAL应隐藏不同嵌入式操作系统和硬件设备的具体实现细节,为各类应用软件提供标准化调用接

口。

6.2HAL设计原则

HAL具体设计原则如下:

a)应向前兼容,可扩增HAL的API,但不能减少;

b)应统一定义系统API,适配各种嵌入式操作系统基础调用接口,满足上层应用软件开发需求;

c)应统一定义设备操作API,对应的驱动程序负责将这些操作调用映射到实际的硬件;

d)应保持API风格一致;

e)设备节点是对设备的抽象,应保证所有设备节点都以文件的形式存放在/dev目录下,应用软件

通过设备节点名称访问设备。

6.3HAL约束条件

HAL具体约束条件如下:

2

T/CESXXX—XXXX

a)应以动态库的形式随系统发布;

b)应保证设备驱动至少实现open,close,read,write,ioctl操作;

c)设备节点所在路径应统一定义为:/dev/。

7HAL接口定义

7.1HAL对外接口定义

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

a)应具备系统函数调用接口;

b)应具备设备节点操作接口。

7.2HAL系统函数调用接口

7.2.1内存管理

系统内存管理的接口见表1,定义详情见附录A.1。

表1系统内存管理接口列表

序号接口名称接口描述

1hal_malloc内存分配

2hal_realloc内存调整

3hal_free内存释放

7.2.2进程管理

系统进程管理的接口见表2,定义详情见附录A.2。

表2系统进程管理接口列表

序号接口名称接口描述

1hal_fork_create创建进程

2hal_fork_exit终止进程

3hal_fork_exec运行可执行文件

4hal_fork_getpid获取进程标识

5hal_fork_waitpid等待进程终止

7.2.3信号量

系统信号量的接口见表3,定义详情见附录A.3。

表3系统信号量接口列表

序号接口名称接口描述

1hal_semaphore_create创建信号量

2hal_semaphore_destroy销毁信号量

3hal_semaphore_post发送信号量

4hal_semaphore_wait等待信号量

7.2.4线程管理

3

T/CESXXX—XXXX

系统线程管理的接口见表4,定义详情见附录A.4。

表4系统线程管理接口列表

序号接口名称接口描述

1hal_thread_create创建线程

2hal_thread_detach设置线程分离

3hal_thread_delete删除线程

7.2.5互斥锁

系统互斥锁的接口见表5,定义详情见附录A.5。

表5系统互斥锁接口列表

序号接口名称接口描述

1hal_mutex_create创建互斥锁

2hal_mutex_destroy销毁互斥锁

3hal_mutex_lock锁上互斥锁

4hal_mutex_unlock解锁互斥锁

7.2.6文件管理

系统文件管理的接口见表6,定义详情见附录A.6。

表6系统文件管理接口列表

序号接口名称接口描述

1hal_file_open打开文件

2hal_file_close关闭文件

3hal_file_read读文件

4hal_file_write写文件

5hal_file_seek移动文件指针

7.2.7时间管理

系统时间管理的接口见表7,定义详情见附录A.7。

表7系统时间管理接口列表

序号接口名称接口描述

1hal_timer_create创建计时器

2hal_timer_delete删除计时器

3hal_timer_start启动计时器

4hal_timer_stop停止计时器

5hal_get_time_ms获取系统当前时间,单位毫秒

6hal_sleep_ms休眠,单位毫秒

4

T/CESXXX—XXXX

7.2.8套接字(socket)

套接字(socket)操作接口见表8,定义详情见附录A.8。

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

序号接口名称接口描述

1hal_socket_open建立套接字

2hal_socket_close关闭套接字

3hal_socket_write向socket写数据

4hal_socket_read从socket读数据

5hal_socket_connect连接远程主机

7.2.9系统应用

系统应用的接口见表9,定义详情见附录A.9。

表9系统应用接口列表

序号接口名称接口描述

1hal_snprintf格式化字符串

2hdl_printf打印信息

7.3HAL设备节点操作接口

7.3.1设备节点操作接口

设备节点操作接口见表10。

表10设备节点操作接口列表

序号接口名称接口描述

1hal_device_open打开设备节点

2hal_device_close关闭设备节点

3hal_device_read设备节点读数据

4hal_device_write设备节点写数据

5hal_device_set设置设备节点参数

7.3.2设备节点命名和接口详情

7.3.2.1RS485

设备节点名称为:

485-n:“/dev/ttyRSn”,n为整数(0-255)。

接口定义详情见附录A.10。

7.3.2.2载波

设备节点名称为:

“/dev/ttyPLCn”,n为整数(0-255)。

接口定义详情见附录A.11。

5

T/CESXXX—XXXX

7.3.2.34G

设备节点名称为:

“/dev/ttyLTEn”,n为整数(0-255)。

接口定义详情见附录A.12。

7.3.2.4蓝牙

设备节点名称为:

“/dev/ttyBTn”,n为整数(0-255)。

接口定义详情见附录A.13。

7.3.2.5LED

设备节点名称为:

“/dev/ledn”,n为整数(0-255)。

接口定义详情见附录A.14。

7.3.2.6WDT

设备节点名称为:

“/dev/watchdog”。

接口定义详情见附录A.15。

6

T/CESXXX—XXXX

附录A

(资料性附录)

HAL对外接口定义

A.1内存管理接口定义

内存管理接口定义详情见表A.1。

表A.1内存管理接口定义详情表

序号接口名称接口定义

/**

*@brief内存分配

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

1内存分配

*@return成功返回内存首地址;失败返回NULL

*/

void*hal_malloc(unsignedintsize);

/**

*@brief内存调整

*@param[in]ptr:内存地址

2内存调整*@param[in]size:调整大小

*@return成功返回内存首地址;失败返回NULL

*/

void*hal_realloc(void*ptr,unsignedintsize);

/**

*@brief内存释放

*@param[in]ptr:内存地址

3内存调整

*@return无

*/

voidhal_free(void*ptr);

A.2进程管理接口定义

进程管理接口定义详情见表A.2。

表A.2进程管理接口定义详情表

序号接口名称接口定义

/**

*@brief创建进程

*@param[in]:无

1创建进程*@return成功返回0;失败返回错误码

*/

pid_thal_fork_create(void);

/**

*@brief终止进程

*@param[in]status:进程状态

2终止进程*@return:无

*/

voidhal_fork_exit(intstatus);

7

T/CESXXX—XXXX

/**

*@brief运行可执行文件

*@param[in]path:可执行文件路径

*@param[in]arg:参数

3运行可执行文件*@param[in]...:参数

*@return成功返回0;失败返回错误码

*/

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

/**

*@brief获取进程标识

*@param[in]:无

4获取进程标识*@return成功返回当前进程标识;失败返回错误码

*/

pid_thal_fork_getpid(void);

/**

*@brief等待进程终止

*@param[in]pid:进程标识

*@param[in]status:进程状态

5等待进程终止*@param[in]options:操作码

*@return成功返回子进程标识;失败返回错误码

*/

pid_thal_fork_waitpid(pid_tpid,int*status,intoptions);

A.3信号量接口定义

信号量接口定义详情见表A.3。

表A.3信号量接口定义详情表

序号接口名称接口定义

/**

*@brief创建信号量

*@param[in]无

1创建信号量*@return成功返回信号量对象地址;失败返回NULL

*/

void*hal_semaphore_create(void);

/**

*@brief销毁信号量

*@param[in]sem:信号量对象

2销毁信号量*@return:成功返回0;失败返回错误码

*/

inthal_semaphore_destroy(void*sem);

/**

*@brief发送信号量

*@param[in]sem:信号量对象

3发送信号量*@return:成功返回0;失败返回错误码

*/

inthal_semaphore_post(void*sem);

8

T/CESXXX—XXXX

/**

*@brief等待信号量

*@param[in]sem:信号量对象

超时时间

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

*@return:成功返回0;失败返回错误码

*/

inthal_semaphore_wait(void*sem,unsignedinttimeout_ms);

A.4线程管理接口定义

线程管理接口定义详情见表A.4。

表A.4线程管理接口定义详情表

序号接口名称接口定义

/**

*@brief创建线程

*@param[in]thread_handle:线程标识

*@param[in]work_routine:线程调用函数

调用函数参数

1创建线程*@param[in]arg:

*@return:成功返回0;失败返回错误码

*/

inthal_thread_create(void**thread_handle,void

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

/**

*@brief设置线程分离

*@param[in]thread_handle:线程标识

2设置线程分离*@return:成功返回0;失败返回错误码

*/

inthal_thread_detach(void*thread_handle);

/**

*@brief删除线程

*@param[in]thread_handle:线程标识

3删除线程*@return:成功返回0;失败返回错误码

*/

inthal_thread_delete(void*thread_handle);

A.5互斥锁接口定义

互斥锁接口定义详情见表A.5。

表A.5互斥锁接口定义详情表

序号接口名称接口定义

/**

*@brief创建互斥锁

*@param[in]:无

1创建互斥锁*@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定义为文件打开形态

r打开只读文件;

r+打开可读写的文件;

w打开只写文件;

w+打开可读写文件;

a以附加的方式打开只写文件;

a+以附加方式打开可读写的文件;

上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等

1打开文件

组合,加入b字符用来告诉函数库打开的文件为二进制文件,而非纯文字

文件。

*@brief打开文件

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

*@param[in]mode:打开形态

*@return:成功返回文件指针;失败返回NULL

*/

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

/**

*@brief关闭文件

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

2关闭文件*@return:成功返回0;失败返回错误码

*/

inthal_file_close(FILE*stream);

10

T/CESXXX—XXXX

/**

*@brief读文件

*@param[in]buff:读缓存

*@param[in]len:读最大字节数

3读文件*@param[in]stream:文件指针

*@return:成功返回读字节数;失败返回错误码

*/

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

/**

*@brief写文件

*@param[in]buff:写缓存

*@param[in]len:写最大字节数

4写文件*@param[in]stream:文件指针

*@return:成功返回写字节数;失败返回错误码

*/

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

/**

*@brief参数whence定义为文件指针移动位置

SEEK_SET从距文件开头offset位移量为新的读写位置;

SEEK_CUR以目前的读写位置往后增加offset个位移量;

SEEK_END将读写位置指向文件尾后再增加offset个位移量。

*@brief移动文件指针

5移动文件指针*@param[in]stream:文件指针

*@param[in]offset:移动数量

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

*@return:成功返回0;失败返回错误码

*/

inthal_file_seek(FILE*stream,intoffset,intwhence);

A.7时间管理接口定义

时间管理接口定义详情见表A.7。

表A.7时间管理接口定义详情表

序号接口名称接口定义

/**

*@brief创建计时器

*@param[in]func:回调函数

回调函数参数

1创建计时器*@param[in]user_data:

*@return:成功返回定时器对象地址;失败返回NULL

*/

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

/**

*@brief删除计时器

*@param[in]timer:定时器对象

2删除计时器*@return:成功返回0;失败返回错误码

*/

inthal_timer_delete(void*timer);

11

T/CESXXX—XXXX

/**

*@brief启动计时器

*@param[in]timer:定时器对象

启动计时器

3*@return:成功返回0;失败返回错误码

*/

inthal_timer_start(void*timer);

/**

*@brief停止计时器

*@param[in]timer:定时器对象

停止计时器

4*@return:成功返回0;失败返回错误码

*/

inthal_timer_stop(void*timer);

/**

*@brief获取系统当前时间,单位毫秒

*@param[in]:无

5获取系统当前时间*@return:成功返回当前时间戳;失败返回错误码

*/

int64hal_get_time_ms(void);

/**

*@brief休眠,单位毫秒

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论