鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

编译工具使用

编译工具hiasn1cli,位于“/usr/local/ksl/bin”下。用户可以使用它来解析ASN.1脚本,并将ASN.1脚本转换为C语言代码的中间文件(包含多个源文件和头文件)。

在本章节的示例中,将展示如何使用编译工具hiasn1cli将.asn文件转换为C语言源码文件。

获取帮助

执行以下命令获取命令相关帮助。

1
./hiasn1cli --help 

输出如下回显信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
ASN.1 Cpp Compiler hiasn1cli 2.1.0

USAGE:
    hiasn1cli [OPTIONS] --input <ASN.1 文件(列表)> --method <传输语法(aper|uper|ber|xer...)> [SUBCOMMAND]

OPTIONS:
    -h, --help
            输出工具的帮助信息

    -i, --input <ASN.1 文件(列表)>
            选择一个或多个 ASN.1 文本文件,如 -i s1.asn x2.asn; 也可利用通配,如 -i *.asn

        --merge <合并后的目录名,支持指定多级目录,如a/b/c,最终输出目录在exports/a/b/c>
            合并编译,未合并情况下每个ASN.1文件将独立进行编译和输出,存在该选项则将所有输入的ASN.1文件合并生成目标文件

    -m, --method <传输语法(aper|uper|ber|xer...)>
            选择一个编解码规则,选中的编解码规则会应用到当前命令行的所有输入文件中

SUBCOMMANDS:
    cc       [核心]  ASN.1 文件编译为 C 代码

子参数

该工具还有一系列子参数,例如cc子参数的帮助信息可执行以下命令查看。

1
./hiasn1cli cc --help

输出如下回显信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
hiasn1cli-cc
[核心]  ASN.1 文件编译为 C 代码

USAGE:
    hiasn1cli --input <ASN.1 文件(列表)> --method <传输语法(aper|uper|ber|xer...)> cc [FLAGS]

FLAGS:
    -h, --help                  输出子命令的帮助信息: hiasn1cli cc --help
        --testcases             围绕已经定义的值, 生成 testcase C文件和头文件, 依赖 --values
        --values                生成所有值的定义, 依赖 --mode full
        --enum-as-uint          设定ENUMERATED类型的C接口为u8, u16, u32数据类型,不使用C的enum类型

示例

将一个ASN.1脚本test.asn转换成BER模式的C代码文件。

  1. 新建测试目录“test_demo”后进入该目录。
    1
    2
    mkdir test_demo
    cd test_demo
    
  2. “test_demo”目录下新建一个test.asn文件。
    1
    vim test.asn
    
  3. 按“i”进入编辑模式, 填入如下脚本内容:
    MyModule DEFINITIONS AUTOMATIC TAGS ::= BEGIN 
    
    MyType ::= SEQUENCE { 
        boolType BOOLEAN, 
        intType INTEGER(0..128), 
        enumType ENUMERATED { a, b }, 
        bitStrType BIT STRING(SIZE(0..128)), 
        octStrType OCTET STRING(SIZE(0..64)), 
        seqOfType SEQUENCE OF INTEGER, 
        choiceType CHOICE { 
            a INTEGER(0..3), 
            b BOOLEAN 
        } 
    } 
    
    END
  4. 按“Esc”键,输入:wq,按“Enter”保存并退出编辑。
  5. 使用hiasn1cli命令进行转换。
    1
    ./hiasn1cli -i test.asn -m ber cc
    
    生成的代码文件位于“test_demo/exports”目录。
    1
    2
    3
    4
    5
    exports 
    └── test 
        ├── codec_index.h 
        ├── codec_interfaces.h 
        └── codec_tables.c
    
    • codec_index.h:定义了各个数据单元的唯一标识,在后续的编解码接口中需要使用到它们。
    • codec_interfaces.h:提供了抽象语法中数据描述的C程序接口。
    • codec_tables.c:定义了用于描述各个数据类型的静态变量。

    若指定了--values --testcases参数还会生成codec_testcases.h、codec_values.c、codec_values.h三个文件,用于定义和声明脚本中定义的值,并生成测试用例。