Releases: esa/asn1scc
ICD Generation improvement
Implements feature described in #343
Addition of a filter in a panel to simplify the navigation in the generated ICD documents
Bugfixes
Maintenance release - bugfix
Fix issue #332 - generation of duplicate macro definitions in C, causing compiler warnings
Code optimization and decoding bufix
-
Major bugfix (issue #330) Possible invalid memory access in BitStream_ReadByte (could point to an invalid memory address if buffer was larger than value set in the byte counter)
-
This version introduces a functionality to automatically detect and exclude unused generated functions, resulting in significantly smaller output code for both C and Ada backends.
Key Features
-
Unused Function Elimination via
-icdPdus
When using the-icdPdus
argument, ASN1SCC now performs a dependency analysis starting from the specified PDUs and their associated functions (isEqual()
,isValid()
,init()
,encode()
, anddecode()
).- Only the functions directly or indirectly required by these PDUs are generated.
- All unused functions are excluded from the output, reducing code size and improving maintainability.
-
New
-dpdus
Argument
A new command-line option,-dpdus
, was added to help identify Protocol Data Units (PDUs) in the input ASN.1 grammar.- PDUs are defined as top-level types that are not referenced by any other type.
- Detected PDUs are printed to the console to help users configure
-icdPdus
more easily.
Impact
- Reduces the size of generated code by omitting unused functions.
- Especially beneficial for resource-constrained systems or projects aiming to minimize binary size.
Bugfixes
- Fix missing Xer_EncodeNull and Xer_DecodeNull functions (#326)
- Fix erroneous variable name in XER encoders (#325)
- Removed warnings from latest GCC in compilation of autogenerated test cases (#323)
- Fix corner case with hyphens generated in place of underscores (#322)
- Detect and report REAL numbers that can't be represented in memory when used in bounds (#321)
v4.5.2.4 - Performance boost
This release is a maintenance release (no new features) addressing parsing performance (10x boost).
Parsing performance boost and Scala update
This release introduces
- a major performance improvement for the parser
- a major update of the Scala backend with new proofs and complete support
Documentation (ICD) Generation and Performance Improvements
This new release improves the ICD (Interface Control Document) generation as well as the parsing performance:
- A new command line flag allows to select which ASN.1 types you want to see in the ICD (by default: all of them)
e.g.asn1scc -icdAcn icd.html -icdPdus "TELECOMMAND,TELEMETRY" dataview.asn
will generate the ICD only for the types namedTELECOMMAND
andTELEMETRY
(and all their dependencies) - The hyperlinks to the ASN.1 and ACN grammars have been fixed
- Various cosmetics improvements to improve the clarity of the tables (e.g. comments for ACN-inserted fields)
- To smoothen the transition, the new ICDs are generated in a file with the
_new.html
suffix (the prefix being the ICD name given in the command line). - Major parsing performance boost
v4.5.2.1 maintenance release
C Backend optimizations
This release introduces a new mode in asn1scc that optimizes the generated C code for ASN.1 Enumerated types, especially when there are multiple enumerants in the type (e.g., 50 or more).
When the -eee
option is present, asn1scc generates more efficient and less verbose code. Instead of generating switch statements, asn1scc generates sorted arrays containing the possible values. Lookups, such as for validation or index retrieval in uPER
encoding, are performed using an optimized binary search.
This results in more efficient code generation for large Enumerated types, improving performance and readability.
To use this mode, pass the minimum number of enumerants in an enumerated type to enable this mode as an argument to the -eee
option. For example, -eee 50
will enable this mode for enumerated types with 50 or more enumerants.
In addition this release includes major improvements to the Scala backend (with Stainless proof/contracts).