0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ASN1CASN.1编译器概述

工程师邓生 来源:哲想软件 作者:哲想软件 2022-09-21 10:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

ASN1CASN.1编译器将ASN.1和/或XMLschema(XSD)源规范转换成C、C++C#Java源代码。

开发人员可以使用此代码将结构/对象转换为已完成的ASN.1消息,并使用任何ITU-T/ISO编码规则(BER、CER、DER、PER或XER),以及ISO/IEEE医疗设备编码规则(MDER)和NTCIP八隅体编码规则(OER)将其转换为或转换为已完成的ASN.1消息。

ASN1C还包括将XSD规范转换为ASN.1规范的工具,反之亦然。

d2fcd772-3161-11ed-ba43-dac502259ad0.png

生成的ASN1C代码由类型定义和编码/解码函数(或方法)组成,这些函数提供了一个完整的应用程序编程接口(API),用于处理ASN.1规范中包含的消息定义。

除了ASN.1编译器之外,程序包中还包含一个公共编码/解码函数的运行时库。此库包含用于编码和解码ASN.1基元(布尔值、整数等)的例程。ASN1CASN.1编译器汇编对这些函数的一系列调用,以完成对更复杂消息类型的编码或解码。

程序员要使编码器/解码器启动并运行所需要做的就是:

1、运行ASN1C为给定的ASN.1或XSD规格生成代码

2、开发一个应用程序来调用生成代码中的函数/方法

3、编译/连接应用程序、生成的代码和运行时库

为了帮助处理第2和第3项,编译器还能够生成示例阅读器和编写器程序,以及生成文件构建所有生成的代码。

ASN.1 to C/C++

C和C++版本都使用由一组低级基本C函数组成的公共基本运行时库,对基本类型进行编码和解码。代码生成主要在C语言中完成,并为所有定义的ASN.1类型提供了一套完整的CAPI函数。

C++代码生成功能添加了一组类“包装器”,用于隐藏调用编码/解码函数时的大部分细节。这些包装器提供了特定于C++的附加服务。其中包括通过构造函数自动初始化生成类型的变量,通过操作符重载更容易地分配和测试数据,以及通过事件处理机制的虚拟回调接口。

从ASN.1到JavaC#

生成的Java代码由一系列Java源文件组成——一个用于ASN.1规格中定义的每个产品(类型)。每个Java文件(至少)包含以下项目:

一个或多个公共成员数据变量,用于保存生成类型的数据。

初始化变量的构造函数。

一种编码方法。

一个解码方法。

将目标内容打印到给定输出流的打印方法。

还有一个用于Java的运行时库。它由一系列用于编码和解码ASN.1基本类型的类组成。例如,Asn1Integer类将对ASN.1INTEGER类型的变量进行编码或解码。编译器将扩展这些基类,以形成直接从基类型派生的更高级别的类型,或者组装一系列这些较低级别的对象来形成构造的类型(例如,序列)。

C#代码的生成与上面描述的Java生成非常相似。为ASN.1规范中定义的每个产品生成一个单独的C#类。它包含使用任何ASN.1编码规则对类实例进行编码和解码的构造函数和方法。

可以使用Java或C#嵌入式开发工具包来支持JavaMicroEdition (J2ME)或C#compact edition库。

Eclipse 插件

概述

ASN1C Eclipse插件允许在EclipseIDE环境中,使用ASN1C编辑、语法检查和生成Java、C#或C/C++代码。它与Java透视图集成的方式允许直接从ASN.1源代码创建Java项目。

请注意,这个插件在Eclipse4.6 (Neon)和更高版本中都是可用的。不支持早期版本的Eclipse。

下载和安装

推荐的插件安装方法是通过我们的插件更新站点:https://www.obj-sys.com/eclipse。请您遵循以下步骤:

1. 选择Help->安装新软件

2. 输入“Workwith”位置的更新站点:“https://www.obj.sys.com/eclipse”

3.可用的插件应该出现在列表中

4. 启用“ASN.1和XML解决方案”旁边的检查框,然后单击next

5. 单击下一页中的Next

6. 选择许可条款的接受,并在下一页中单击Finish

7. 单击Yes重启Eclipse

或者,可以将插件下载为.zip文件,然后安装。单击下面的链接下载该文件:

ASN1C Eclipse插件.zip文件

下载插件后,请按照以下步骤安装:

1. 选择帮助->安装新软件

2. 单击Addbutto

3.单击弹出的pag中的Archive按钮

4. 找到下载的zip文件并选择O

5. 启用“ASN.1和XML解决方案”旁边的复选框,然后单击Nex

6. 在下一个pag中单击Next

7. 选择许可条款的接受,并在下一个pag中单击Finish

8. 单击Yes重启Eclipse

开始使用插件

安装之后,必须设置ASN1C编译器可执行文件的路径:

1. 选择Windows->首选项->ASN1C编译器

2.在“编译器路径”框中,输入ASN1C编译器可执行文件的完整路径(或使用Browse)

3.单击OK退出屏幕

现在可以创建一个新项目。我们将使用ASN1CJava Employee程序作为示例。

1. 选择Windows->首选项->ASN1C编译器

2. 点击“语言”下拉列表,选择“Java”作为应用程序语言

3.点击“选择编码规则”下拉列表,选择“BER”选项

4.点击“选择要生成的函数类型”下拉列表,检查“Encode”和“Decode”选项

5.点击“基本选项”下拉列表,选择“生成示例阅读器程序”和“生成示例编写程序”选项

6. 点击“Javaoptions”下拉列表,选择“Outputcode to module name dirs (-dirs)”选项

7. 单击OK退出preferences屏幕

8. 选择文件->新->项目…

9.在“ASN1编译工具”下,选择“ASN1C编译器项目”,然后单击“下一步”

10. 将项目名称设置为“Employee”,然后单击“Next”

11.ASN.1文件现在可以使用“添加文件”按钮添加到项目中。单击此按钮,导航到ASN1Cjava/sample_ber/Employee目录,并选择Employee.asn。然后单击“Next”

12. 在下一页中单击Next(Java设置)

13.在最后一页(ASN1C编译器命令),选中“在finish上启动ASN.1编译器”选项,然后单击“finish”。ASN1C编译器现在应该尝试生成Java文件





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    3013

    浏览量

    116982
  • API
    API
    +关注

    关注

    2

    文章

    2498

    浏览量

    67095
  • 编译器
    +关注

    关注

    1

    文章

    1673

    浏览量

    52052
  • 编程接口
    +关注

    关注

    1

    文章

    42

    浏览量

    8274

原文标题:Obj-sys:ASN1CASN.1 编译器

文章出处:【微信号:哲想软件,微信公众号:哲想软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于RT-Thread的RA8P1 CoreMark 6300分优化配置指南 | 技术集结

    如何通过关键配置,将RA8P1(Cortex-M85内核)的CoreMark分数提升至官网登记的6300分。内容涵盖编译器优化选项、链接时优化(LTO)、以及关键的
    的头像 发表于 05-15 18:11 2754次阅读
    基于RT-Thread的RA8P<b class='flag-5'>1</b> CoreMark 6300分优化配置指南 | 技术集结

    C编译器错误与解决方法

    C语言keil编译器提示错误的解决方法,可以帮你解决程序编译中的烦恼!! C编译器错误与解决方法 1. Warning 280:’i’:unreferenced local var
    发表于 01-22 08:03

    性能突破 | SpacemiT-X60 在 LLVM 编译器上实现 16% 显著提升

    2025年10月,在北美RISC-V峰会上,Igalia编译器工程师Mikhail发表专题演讲《Unlocking15%MorePerformance
    的头像 发表于 11-21 18:04 9207次阅读
    性能突破 | SpacemiT-X60 在 LLVM <b class='flag-5'>编译器</b>上实现 16% 显著提升

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    在万物智联的时代背景下,操作系统底层能力的构建离不开编程语言与编译器的关键支撑。作为开源鸿蒙生态的核心技术,语言设计与编译器、虚拟机实现的进步直接关系到开发效率、运行性能与系统安全。本次分论坛聚焦
    的头像 发表于 11-20 17:24 1258次阅读
    开源鸿蒙技术大会2025丨<b class='flag-5'>编译器</b>与编程语言分论坛:语言驱动系统创新,<b class='flag-5'>编译</b>赋能生态繁荣

    CANoe与Simulink联合仿真编译失败

    问题描述:在使用VS作为编译器的情况下,Matlab编译后失败,如下图:解决方案:原因:安装VS时,Windows的SDK版本未安装或者安装选项没有选择正确。1.打开VS,可以看到VS中的错误提示:2.打开此项目的属性设置:3.
    的头像 发表于 11-14 12:13 2044次阅读
    CANoe与Simulink联合仿真<b class='flag-5'>编译</b>失败

    飞凌嵌入式ElfBoard-Vim编辑之GCC编译器的安装

    GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器,最初是作为GNU操作系统的编译器编写的。GCC是一个编译器套件,包含很多软件包,支持多种语言编译
    发表于 10-15 08:44

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译呢?

    GCC编译器,怎么才能实现c文件中未被调用的函数,不会被编译?有什么编译选项可以设置吗? 移植代码,有些函数没被调用的函数想留在代码里,但不想被编译
    发表于 09-28 12:25

    如何在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6?

    在Keil中将NuMicro BSP从Arm编译器5迁移到编译器6!
    发表于 08-20 06:29

    求助,关于NanoEdge AI Studio生成的库交叉编译器版本疑问求解

    我使用的是NanoEdge AI Studio v4.3.1,跟着官方交教程生成了库libneai.a,我通过metadata.json文件得知生成这个库的交叉编译器版本是\"
    发表于 08-08 07:25

    进迭时空同构融合RISC-V AI CPU的Triton算子编译器实践

    Triton是由OpenAI开发的一个开源编程语言和编译器,旨在简化高性能GPU内核的编写。它提供了类似Python的语法,并通过高级抽象降低了GPU编程的复杂性,同时保持了高性能。目前
    的头像 发表于 07-15 09:04 2331次阅读
    进迭时空同构融合RISC-V AI CPU的Triton算子<b class='flag-5'>编译器</b>实践

    边缘设备AI部署:编译器如何实现轻量化与高性能?

    电子发烧友网综合报道 AI编译器是专门为人工智能(AI)和机器学习(ML)模型设计的编译器,其核心目标是将高级的AI模型描述(如计算图、神经网络结构)转换为特定硬件平台(如CPU、GPU、FPGA
    的头像 发表于 07-06 05:49 7036次阅读

    编译器功能安全验证的关键要素

    在汽车、工业、医疗等安全关键型应用中,确保功能安全合规性需要严格的工具链验证。开发安全关键型软件的企业必须遵守ISO 26262、IEC 61508、ISO 62304等国际标准对编译器工具链进行全面的验证。
    的头像 发表于 07-05 13:37 1754次阅读

    兆松科技发布高性能RISC-V编译器ZCC 4.0.0版本

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能 RISC-V 编译器 ZCC 4.0.0 版本。新版本在性能优化、厂商自定义指令支持和软件库等方面实现全面升级,并同步推出
    的头像 发表于 06-27 14:48 4040次阅读
    兆松科技发布高性能RISC-V<b class='flag-5'>编译器</b>ZCC 4.0.0版本

    兆松科技ZCC编译器全面支持芯来科技NA系列处理

    近日,兆松科技(武汉)有限公司(以下简称“兆松科技”)宣布正式发布高性能RISC-V编译器ZCC 4.0.0版本。
    的头像 发表于 06-11 09:56 2080次阅读

    RISC-V架构下的编译器自动向量化

    进迭时空专注于研发基于RISC-V的高性能新AICPU,对于充分发挥CPU核的性能而言,编译器是不可或缺的一环,而在AI时代,毫无疑问向量算力将发挥越来越重要的作用。进迭时空非常重视RISC-V
    的头像 发表于 06-06 16:59 1531次阅读
    RISC-V架构下的<b class='flag-5'>编译器</b>自动向量化