Skip to content

Commit

Permalink
doc: Optimize Nuclei Studio IDE profiling and NPK part (#13)
Browse files Browse the repository at this point in the history
* Modified NPK doc About importing an uncompressed NPK software packageModified the image address in nkpooverview doc
Added some external link explanations in the advanced usage doc
Modified images in NPK doc

* Modified advanceusage doc about Profiling

* Modified advanceusage doc about Profiling,add a note on intro

---------

Co-authored-by: zhangzegang <[email protected]>
  • Loading branch information
fanghuaqi and zhangzegang authored Nov 1, 2024
1 parent 17d8789 commit d1dde77
Show file tree
Hide file tree
Showing 23 changed files with 55 additions and 28 deletions.
File renamed without changes
32 changes: 26 additions & 6 deletions source/ide/advanceusage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -138,15 +138,23 @@ Studio工程使用Code Coverage和Profiling相关功能。在Nuclei Studio
2024.06版本中对\ `Eclipse Linux
Tools <https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md#eclipse-linux-tools-release-notes>`__\ 的功能做了进一步的优化和升级,使其更容使用。

关于Coverage、Profiling和Call Graph的使用教程请查看 :ref:`Coverage、Profiling和Call Graph使用 <ide_advanceusage_21>` 。

关于Eclipse Linux Tools的详细参见
`Eclipse Linux Tools: <https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md#eclipse-linux-tools-release-notes>`__\
`Eclipse Linux Tools <https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md#eclipse-linux-tools-release-notes>`__\

在使用过程,如有问题,可以查看 `https://github.com/Nuclei-Software/nuclei-studio <https://github.com/Nuclei-Software/nuclei-studio>`__ 相关内容,也可以向我们提交相关issue。

.. note::

在 **芯来科技视频号** 中有 **如何在Nuclei Studio中使用Code Coverage和Profiling功能** 的视频,您可以在微信中搜索 **芯来科技视频号** 点击查看相关内容。

关于Code Coverage功能
~~~~~~~~~~~~~~~~~~~~~

Nuclei Studio中的Code Coverage功能是借助于gcc编译器提供gcov工具来查看指定源码文件的代码覆盖率,可以帮助开发人员确定他们的测试用例是否足够充分,是否覆盖了被测代码的所有分支和路径。

在Nuclei Studio中,通过给工程中的文件或者文件夹添加 ``--coverage`` 编译选项编译,在实际开发板上运行时,可以配合semihost功能实现文件读写到主机电脑上,就可以收集到需要的coverage文件(gcda/gcno文件),或者通过Nuclei SDK提供的profiling库来实现将coverage数据打印到串口上,然后通过IDE来解析并保存到主机上。
在Nuclei Studio中,通过给工程中的文件或者文件夹添加 ``--coverage`` 编译选项编译,在实际开发板上运行时,可以配合semihost功能实现文件读写到主机电脑上,就可以收集到需要的coverage文件(gcda/gcno文件),或者通过 `Nuclei SDK提供的profiling库 <https://github.com/Nuclei-Software/nuclei-sdk/tree/master/Components/profiling>`__ 来实现将coverage数据打印到串口上,然后通过IDE来解析并保存到主机上。

.. note::
注意:此处只需要将编译选项 ``--coverage`` 加到特定的应用目录或者源码文件上,而不能加到整个工程,否则在程序运行时将会消耗大量内存,导致运行失败。
Expand Down Expand Up @@ -178,7 +186,7 @@ Nuclei Studio中的Code Coverage功能是借助于gcc编译器提供gcov工具

Nuclei Studio中的Profiling功能是借助于gcc编译器和binutils中的gprof工具,来查看指定文件中函数的运行时间和调用次数,以及调用关系。gprof可以用来确定程序的瓶颈,以便进行性能优化。gprof通过在程序运行时收集数据来工作,然后生成一个报告,该报告显示每个函数在程序中占用CPU时间的百分比以及函数之间的调用关系。

在Nuclei Studio中,通过带特定的编译选项 ``-pg`` 编译指定源码文件,在实际开发板上运行时,可以配合semihost功能实现文件读写到主机电脑上,就可以收集到需要的coverage文件(gcda/gcno文件),或者通过Nuclei SDK提供的profiling库来实现将coverage数据打印到串口上,然后通过IDE来解析并保存到主机上。
在Nuclei Studio中,通过带特定的编译选项 ``-pg`` 编译指定源码文件,在实际开发板上运行时,可以配合semihost功能实现文件读写到主机电脑上,就可以收集到需要的coverage文件(gcda/gcno文件),或者通过 `Nuclei SDK提供的profiling库 <https://github.com/Nuclei-Software/nuclei-sdk/tree/master/Components/profiling>`__ 来实现将coverage数据打印到串口上,然后通过IDE来解析并保存到主机上。

.. note::
注意:此处只需要将编译选项 ``-pg`` 加到特定的应用目录或者源码文件上,而不能加到整个工程,否则在程序运行时将会消耗大量内存,导致运行失败。
Expand Down Expand Up @@ -230,6 +238,8 @@ Aggregate View

|image21|

.. _ide_advanceusage_21:

Coverage、Profiling和Call Graph使用
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand All @@ -238,7 +248,7 @@ Coverage、Profiling和Call Graph使用
通过串口使用
^^^^^^^^^^^^

nuclei_sdk 0.6.0及以上版本的nulclei_sdk中,包含一个 ``Profiling demo to show how to use gprof and gcov`` 测试工程,在NucleiSudio安装了nuclei_sdk 0.6.0后,可以创建此测试工程。
nuclei_sdk 0.6.0及以上版本的nulclei_sdk中,包含一个 ``Profiling demo to show how to use gprof and gcov`` 测试工程,在NucleiSudio安装了nuclei_sdk 0.6.0后,可以创建此测试工程。关于 ``Profiling demo to show how to use gprof and gcov`` 测试工程,可参考 `demo_profiling <https://doc.nucleisys.com/nuclei_sdk/design/app.html#demo-profiling>`__ 。

|image22|

Expand Down Expand Up @@ -306,15 +316,15 @@ Gprof工具会启动,就可以看到对应用程序的分析结果,显示了
通过Semihosting使用
^^^^^^^^^^^^^^^^^^^

NucleiSudio安装了nuclei_sdk 0.6.0后,可以创建一个 ``Profiling demo to show how to use gprof and gcov`` 的测试工程,此时需要选中 ``Enable Semihosting`` 。
NucleiSudio安装了nuclei_sdk 0.6.0后,可以创建一个 ``Profiling demo to show how to use gprof and gcov`` 的测试工程,此时需要选中 ``Enable Semihosting`` 。关于 ``Profiling demo to show how to use gprof and gcov`` 测试工程,可参考 `demo_profiling <https://doc.nucleisys.com/nuclei_sdk/design/app.html#demo-profiling>`__ 。

|image36|

工程创建后,需要对想要进行代码分析的文件或者文件夹设置一个 ``-pg --coverage`` 的编译选项,然后编译工程。

|profiling_options_in_ide|

同时,需要修改程序中 `` gprof_collect(2);`` 为 ``gprof_collect(1);`` 、 ``gcov_collect(2);`` 为 ``gcov_collect(1);`` (测试工程中在main函数的最后),则在运行过程中,将会通过Semihosting将结果输出为文件。
同时,需要修改程序中 ``gprof_collect(2);`` 为 ``gprof_collect(1);`` 、 ``gcov_collect(2);`` 为 ``gcov_collect(1);`` (测试工程中在main函数的最后),则在运行过程中,将会通过Semihosting将结果输出为文件。

|image37|

Expand Down Expand Up @@ -351,9 +361,15 @@ Trace技术是一种强大的调试工具,它能够帮助开发人员跟踪和

Nuclei Studio集成了Trace工具,结合相对应的硬件和Nuclei OpenOCD,用户在对工程进行Debug时,也可查看到Trace日志,并结合源码时行问题排查。

.. note::

在 **芯来科技视频号** 中有 **如何在Nuclei Studio中使用Trace功能** 的视频,您可以在微信中搜索 **芯来科技视频号** 点击查看相关内容。

.. note::

关于OpenOCD的Nuclei ETrace的一些命令,请参加OpenOCD下的openocd.pdf手册。

在使用过程,如有问题,可以查看 `https://github.com/Nuclei-Software/nuclei-studio <https://github.com/Nuclei-Software/nuclei-studio>`__ 相关内容,也可以向我们提交相关issue。

Trace界面介绍
~~~~~~~~~~~~~
Expand Down Expand Up @@ -571,6 +587,8 @@ RVProf功能的使用

RVProf是芯来科技针对cpu cycle model开发的性能分析工具,Nuclei Studio在2024.02.dev版本中,完成对RVProf的支持。在实际使用中,RVProf功能分三步完成,首先通过Cycle model工具,运行代码,产生 ``.rvtrace`` 文件,然后RVProf工具,将 ``.rvtrace`` 解析成对应的 ``.json`` 文件,最后通过google的开源工具Perfetto Trace Viewer对 ``.json`` 文件进行解析并展示。因为cpu cycle model当前仅提供了linux版本,所以本文档均是在linux环境下演示此功能。

在使用过程,如有问题,可以查看 `https://github.com/Nuclei-Software/nuclei-studio <https://github.com/Nuclei-Software/nuclei-studio>`__ 相关内容,也可以向我们提交相关issue。

测试环境
~~~~~~~~~

Expand Down Expand Up @@ -652,6 +670,8 @@ Nuclei Studio会在本地启一个web服务,同时打开Perfetto Trace Viewer

Nuclei Near Cycle Model当前只有Linux版本,其具体介绍和命令行上使用参见 (https://doc.nucleisys.com/nuclei_tools/xlmodel/intro.html ) ,下面将在Nuclei Studio上演示如何使用Nuclei Near Cycle Model进行仿真和性能分析。

在使用过程,如有问题,可以查看 `https://github.com/Nuclei-Software/nuclei-studio <https://github.com/Nuclei-Software/nuclei-studio>`__ 相关内容,也可以向我们提交相关issue。

创建测试工程
~~~~~~~~~~~~

Expand Down
5 changes: 5 additions & 0 deletions source/ide/intro.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
Nuclei Studio IDE 简介
=======================

.. note::

- Nuclei Studio出视频教程啦,相关内容在 **芯来科技视频号** 中持续更新中,您可以在微信中搜索 **芯来科技视频号** 并关注,以便获取到我们最新的更新内容。
- 在使用Nuclei Studio, Nuclei Tools过程中,如查有问题,可以查阅 `https://github.com/Nuclei-Software/nuclei-studio <https://github.com/Nuclei-Software/nuclei-studio>`__\ 内容,也可以向我们提交相关Issue。

一款高效易用的集成开发环境(Integrated Development Environment,IDE)对于任何MCU都显得非常重要,软件开发人员需要借助IDE进行实际的项目开发与调试。
ARM的商业IDE软件Keil,在中国大陆很多嵌入式软件工程师均对其非常熟悉。但是商业IDE软件(譬如Keil)存在着授权以及收费的问题,各大MCU厂商也会推出自己
的免费IDE供用户使用,譬如瑞萨的e2studio和NXP的LPCXpresso等,这些IDE均是基于开源的Eclipse框架,Eclipse几乎成了开源免费MCU IDE的主流选择。
Expand Down
6 changes: 2 additions & 4 deletions source/ide/npk.rst
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,9 @@ NPK软件包管理

|image26|

导入过程中,会自动打开Package Management页面。

|image27|

待导入完成后,你应该能够在Nuclei Studio IDE的Package Management页面中看到新导入的软件包。
导入过程中,会自动打开Package Management页面。待导入完成后,你应该能够在Nuclei Studio IDE的Package Management页面中看到新导入的软件包。

|image28|

Expand Down Expand Up @@ -124,7 +122,7 @@ NPK软件包管理

|image10|

进入具体的项目配置页如图4-8所示,因为RVSTAR的内核是固定的N205,其对应的arch和abi分别是rv32imac和ilp32,所以Core选项不能修改。同样,RVSTAR开发板仅支持一种FLASHXIP下载模式,所以DOWNLOAD这一选项也不能修改。点击 ``Finish`` 完成工程创建。在2023.10版本,增加了对Arm项目的支持。
进入具体的项目配置页如图所示,因为RVSTAR的内核是固定的N205,其对应的arch和abi分别是rv32imac和ilp32,所以Core选项不能修改。同样,RVSTAR开发板仅支持一种FLASHXIP下载模式,所以DOWNLOAD这一选项也不能修改。点击 ``Finish`` 完成工程创建。在2023.10版本,增加了对Arm项目的支持。

|image11|

Expand Down
36 changes: 18 additions & 18 deletions source/ide/npkoverview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1246,7 +1246,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1:

.. figure:: /asserts/nucleistudio/npk/image.png
.. figure:: /asserts/nucleistudio/npkoverview/image.png

* **list 单项选择框**

Expand All @@ -1262,7 +1262,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_1:

.. figure:: /asserts/nucleistudio/npk/image-1.png
.. figure:: /asserts/nucleistudio/npkoverview/image-1.png

* **checkbox 单项勾选框**

Expand All @@ -1277,7 +1277,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_2:

.. figure:: /asserts/nucleistudio/npk/image-2.png
.. figure:: /asserts/nucleistudio/npkoverview/image-2.png

* **multicheckbox 穿梭选择框**

Expand All @@ -1300,7 +1300,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_3:

.. figure:: /asserts/nucleistudio/npk/image-3.png
.. figure:: /asserts/nucleistudio/npkoverview/image-3.png

.. code-block:: yaml
Expand All @@ -1316,7 +1316,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_4:

.. figure:: /asserts/nucleistudio/npk/image-4.png
.. figure:: /asserts/nucleistudio/npkoverview/image-4.png

* **text 单行文本框**

Expand All @@ -1333,7 +1333,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_5:

.. figure:: /asserts/nucleistudio/npk/image-5.png
.. figure:: /asserts/nucleistudio/npkoverview/image-5.png

* **multitext 多行文本框**

Expand All @@ -1351,7 +1351,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_6:

.. figure:: /asserts/nucleistudio/npk/image-6.png
.. figure:: /asserts/nucleistudio/npkoverview/image-6.png

* **multichoice 多选下拉框**

Expand All @@ -1370,7 +1370,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_7:

.. figure:: /asserts/nucleistudio/npk/image-7.png
.. figure:: /asserts/nucleistudio/npkoverview/image-7.png

.. code-block:: yaml
Expand All @@ -1391,7 +1391,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_8:

.. figure:: /asserts/nucleistudio/npk/image-8.png
.. figure:: /asserts/nucleistudio/npkoverview/image-8.png

* **cascaderchoice 级联选择框**

Expand All @@ -1415,7 +1415,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_9:

.. figure:: /asserts/nucleistudio/npk/image-9.png
.. figure:: /asserts/nucleistudio/npkoverview/image-9.png

* **switchbutton 开关**

Expand All @@ -1430,7 +1430,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_10:

.. figure:: /asserts/nucleistudio/npk/image-10.png
.. figure:: /asserts/nucleistudio/npkoverview/image-10.png

* **slider 数字选择框**

Expand All @@ -1446,7 +1446,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_11:

.. figure:: /asserts/nucleistudio/npk/image-11.png
.. figure:: /asserts/nucleistudio/npkoverview/image-11.png

* **spinner 数字选择框**

Expand All @@ -1463,7 +1463,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_12:

.. figure:: /asserts/nucleistudio/npk/image-12.png
.. figure:: /asserts/nucleistudio/npkoverview/image-12.png

* **multispinner 多数字选择框**

Expand All @@ -1481,7 +1481,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_13:

.. figure:: /asserts/nucleistudio/npk/image-13.png
.. figure:: /asserts/nucleistudio/npkoverview/image-13.png

* **multicheckbox_v2 多项勾选框**

Expand All @@ -1501,7 +1501,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_14:

.. figure:: /asserts/nucleistudio/npk/image-14.png
.. figure:: /asserts/nucleistudio/npkoverview/image-14.png

.. code-block:: yaml
Expand All @@ -1521,7 +1521,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_15:

.. figure:: /asserts/nucleistudio/npk/image-15.png
.. figure:: /asserts/nucleistudio/npkoverview/image-15.png

* **multiradio 单选框**

Expand All @@ -1540,7 +1540,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_16:

.. figure:: /asserts/nucleistudio/npk/image-16.png
.. figure:: /asserts/nucleistudio/npkoverview/image-16.png

.. code-block:: yaml
Expand All @@ -1559,7 +1559,7 @@ default表示默认值,description表示该选项的含义,global表示这
.. _figure_about_project_1_17:

.. figure:: /asserts/nucleistudio/npk/image-17.png
.. figure:: /asserts/nucleistudio/npkoverview/image-17.png

NPK的语法
---------
Expand Down
4 changes: 4 additions & 0 deletions source/ide/projectrun.rst
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,10 @@ Debug Configuration

DLink是芯来科技基于RV Link,并在其基础上做功能迭代升级后,所研发的RISC-V调试器,使之更适应于Nuclei Studio的应用场景。目前Dlink仅针对单核RISC-V工程实现调试运行,且已实现量产,具体实物如下,具体关于Dlink固件下载参见 https://github.com/Nuclei-Software/nuclei-dlink/wiki/upload-dlink-firmware。

.. note::

在 **芯来科技视频号** 中有 **如何在Nuclei Studio中通过Dlink调试程** 的视频,您可以在微信中搜索 **芯来科技视频号** 点击查看相关内容。

|image50|

如需使用Dlink进行调试,可以在NucleiStudio菜单中 ``Run -> Run Configurations`` 打开Run Configurations的配置页面,并配置一个Dlink Debug Configuration,双击GDB Custom Debugging新建一个配置项,并在Main选项卡中配置内容如下:
Expand Down

0 comments on commit d1dde77

Please sign in to comment.