1.[UVM源代码研究] 如何定制一款个性化的源码打印格式
2.推荐5款开源报表工具!
3.强大、源码灵活的源码报表生成工具——JasperReport
4.location report enablerå¯ä»¥å¸è½½å
[UVM源代码研究] 如何定制一款个性化的打印格式
使用默认的打印格式时,执行如下代码:
实际打印结果格式如下:
查看UVM源代码,源码我们首先定位`uvm_info宏定义的源码位置:
这段代码对uvm_info/uvm_warning/uvm_error/uvm_fatal等宏进行了描述,实际上是源码okcc有源码吗对uvm_report_*函数的封装。以`uvm_info为例,源码分析其执行过程,源码其中使用了全局函数uvm_report_enabled。源码
这里又调用了uvm_root中定义的源码uvm_report_enabled函数。需要注意的源码是,在uvm_root中并未找到这个函数的源码定义。经过查找源代码,源码发现uvm_report_object中定义了uvm_report_enabled。源码
为什么要通过uvm_root实例调用这个函数呢?这需要了解uvm类库的源码继承关系。通过分析,我们发现通过调用uvm_root中uvm_report_enabled的函数,是真人 源码出售因为uvm_root支持单例模式,可以获取uvm_root的单例句柄执行uvm_report_object中定义的自动继承的函数,避免了创建额外的实例。
接下来分析函数执行过程,原本简单的获取severity对应的verbosity阈值设置,却涉及了severity的override问题。我们可以通过调用函数或运行时传入参数来对severity进行override。
所有severity的override都记录在uvm_pool键值对severity_id_verbosities中。
severity和verbosity枚举类型定义如下:
回到uvm_report_object中行的代码,可以认为调用`uvm宏传入的verbosity值如果大于设置的verbosity阈值,则uvm_report_enabled返回0。另外行还有一种函数返回0的情况。
关于uvm_action和verbosity的设置类似,不再展开。执行`uvm_info系列宏时,不仅需要考虑severity对应的verbosity_level的设置是否大于阈值,还需要考虑对severity设置的行为是否为UVM_NO_ACTION来判断uvm_report_enabled的返回值。
本质上,源码时代黑马执行的是uvm_report_server中的compose_message函数,该函数规定了uvm_info系列宏的打印格式。
这个函数的参数filename和line是我们调用uvm_report_info传入的`uvm_file和`uvm_line。
`__FILE__和`__LINE__是systemverilog的编译指令,在编译阶段被替换:`__FILE__被替换为当前文件的文件名,以字符串形式存在;`__LINE__被替换为当前文件的行号,以十进制数字形式存在。
如果需要定义个性化的打印格式,可以通过从uvm_report_server继承一个类重写compose_message函数实现。需要注意的是,这里不能用set_type_override_by_type/name,因为uvm_report_server类没有使用uvm_object_utils注册,也没有实现get_type()函数,所以不能用传统的factory的override方法进行override。好在uvm_report_server已经预留好了子类server的覆盖函数set_server。
这个静态函数可以直接使用类uvm_report_server进行调用。接下来,lcd屏幕源码我们通过一个例子来看看如何实现个性化打印的定制。
首先,我们定制自己的report_server:
然后,在base_test中实例化并set_server:
现在,我们来看看最初那句打印的执行情况:
通过以上步骤,我们便实现了个性化的打印定制,该定制对4种severity同时生效。
推荐5款开源报表工具!
在众多报表工具中,有五款开源工具值得我们关注,它们不仅功能强大,且提供源码,方便开发者深入理解与二次开发。接下来,让我们一一介绍这五款工具。
首先,积木报表(Blockly Reports)是jlink驱动源码一款基于Blockly图形化编程理念的报表生成工具。通过拖拽组件,用户能轻松构建报表,无需编码知识。积木报表不仅提供丰富的图表、表格和文本组件,还支持多数据源连接,为数据可视化提供强大支持。
接着是UReport,它是一款基于Java的报表生成框架,提供灵活的模板引擎,使得报表设计、生成过程变得简单且高效。UReport支持多种数据源接入,并且能够自定义报表样式,满足不同场景需求。同时,其强大的扩展性使得开发者可以根据项目需求进行定制开发。
EasyReport是另一款优秀的开源报表工具,它专注于报表的快速设计与生成。EasyReport具备直观的界面和丰富的模板库,无需编码即可创建高质量报表。此外,它支持多数据源集成,满足企业级应用需求,并具备良好的性能优化,确保报表数据处理的高效性。
第四款报表设计工具是Reportico。Reportico以其简洁的界面和强大的功能著称,支持多种数据源和报表类型。它提供了一个灵活的报表设计平台,允许用户从多种数据源提取数据,生成动态报表,并且支持实时更新和报表的多语言展示。Reportico还具备良好的可定制性,允许开发者根据需求进行深入扩展。
最后,ECharts作为一款基于JavaScript的图表库,虽然主要以图表展示为主,但它也提供了一系列数据处理和报表展示的功能。ECharts的灵活性和易用性使得它成为构建复杂报表和数据可视化应用的理想选择。通过ECharts,开发者可以轻松地将数据以图形化的方式展示出来,增强数据的可读性和理解性。
这五款开源报表工具各有特色,适用于不同场景和需求。无论是从报表设计、生成、数据处理,还是图表展示,它们都能提供强大的支持。希望这些工具能帮助你更高效地处理数据,构建出满足业务需求的报表。
强大、灵活的报表生成工具——JasperReport
强大的报表生成工具——JasperReport
概述
JasperReport是一个功能强大、高度灵活的报表生成工具,适用于Java应用程序,能将丰富内容转换为PDF、HTML或XML格式。它完全由Java编写,是Java开发者生成报表的理想选择。
基本使用
创建项目
选择模板并设置文件名、路径;选择数据库连接作为数据源。
主界面与组件
界面分为五个主要区域:数据源与项目选择、报表内容列表、可视化报表内容、组件列表、属性编辑。其中,组件列表与属性编辑区域用于管理报表的细节与定制。
基本属性与模块
参数、字段、变量等关键属性用于报表设计。标题、页头、列头、详情、列脚、页脚与合计模块构成了报表的核心结构。
绘制作报表
利用源代码添加数据库查询,通过创建字段和文本组件,调整属性,生成报表。通过外部输入参数筛选数据,实现动态报表。
操作流程
生成.jxml文件,构建.jasper文件,集成至Java程序,调用Jasper相关方法生成报表。
常见问题解决
页面宽度与列长度不匹配导致错误时,调整.xml源码的columnWidth参数;表格重叠问题可通过重新布局表格解决;无查询结果通常因值传递设置不当,确保主项目值正确传递至子查询;内存泄漏或溢出问题可利用JRGzipVirtualizer仿真器,有效控制内存使用。
总结
JasperReport提供了一套全面的报表生成解决方案,从创建项目、设计与定制报表,到解决常见问题,都提供了直观、有效的操作流程与解决方案,使得Java开发者能轻松创建高质量、功能丰富的报表。
location report enablerå¯ä»¥å¸è½½å
å¦ææ³htmlååºæ¥ï¼é£è¿ä¸ªåå¸å¿ é¡»æ¯æhtmlï¼å¦æä¸æ¯æï¼ååºæ¥çå°±æ¯ä»£ç æºç äºãå¦ææ¯dzæ§è´¨ç论åä¸æ¯æhtmlè¯è¨ï¼ç¹é«çº§æ¨¡å¼ï¼ç¶åç¹çº¯ææ¬ï¼å°htmlæºç è´´ä¸æ¥ï¼æ交å³å¯ã