From 018b7ba6e6a7cb4c684a5653480602abbeec3ee3 Mon Sep 17 00:00:00 2001 From: NeoZng Date: Sun, 23 Jul 2023 13:32:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86vscode=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E6=A1=A3=E4=BB=A5=E6=8F=90=E4=BE=9B=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E7=9B=91=E8=A7=86=E7=9B=B8=E5=85=B3=E7=9A=84=E6=95=99?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .assets/image-20230723132711865.png | Bin 0 -> 67054 bytes VSCode+Ozone使用方法.md | 46 +++++++++++++++++++++++++--- bsp/bsp.md | 7 +++-- bsp/bsp_tools.h | 6 +++- 合理地进行PID参数整定.md | 3 +- 5 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 .assets/image-20230723132711865.png diff --git a/.assets/image-20230723132711865.png b/.assets/image-20230723132711865.png new file mode 100644 index 0000000000000000000000000000000000000000..7607573778c4f159208d126bb57245e4064817ee GIT binary patch literal 67054 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 bBwshl=RxBbdlgK5ng@3^l#3M~{r!Ic5So0B literal 0 HcmV?d00001 diff --git a/VSCode+Ozone使用方法.md b/VSCode+Ozone使用方法.md index 94bfa3d..42c575a 100644 --- a/VSCode+Ozone使用方法.md +++ b/VSCode+Ozone使用方法.md @@ -180,7 +180,7 @@ typedef struct > 2022-12-01更新: > -> ​ **VSCode上线了一款新的插件:** +> **VSCode上线了一款新的插件:** > > ![image-20221201134906999](.assets/image-20221201134906999.png) > @@ -246,6 +246,8 @@ typedef struct > 添加到环境变量PATH的意思是,当一些程序需要某些依赖或者要打开某些程序时,系统会自动前往PATH下寻找对应项。**一般需要重启使环境变量生效。** +**若你不希望扰乱系统的环境变量,可以参照附录5将Msys2/MinGW64的终端集成到VSCode中方便开发**。 + - **将OpenOCD解压到一个文件夹里**,稍后需要在VSCode的插件中设置这个路径。(will be deprecated soon,请注意这种方法将会在主分支发布正式版的时候删除) - **CubeMX生成代码**: @@ -444,6 +446,8 @@ VSCode `ctrl+,`进入设置,通过`搜索`找到cortex-debug插件的设置。 ![image-20221113133624273](.assets/image-20221113133624273.png) + > **现在Cortex-Debug插件也已经支持live watch(变量动态监视)**,最高可设置的刷新频率为4Hz,足堪大用,我们可以宣告KEIL的时代已经落幕!但是更复杂,更高频率的变量观测以及可视化功能还是需要通过ozone完成。 + 3. 调用栈。表明在进入当前代码块之前调用了哪些函数,称之为栈也是因为调用的顺序从下至上。当前函数结束之后栈指针会减小,控制权会返还给上一级的调用者。通过调用栈可以确认程序是**如何**(按怎样的顺序)运行到当前位置的。 4. 片上外设。这里可以查看外设的**控制寄存器**和**状态寄存器**的值,如果通过断点无法定位bug,则需要查找数据手册和Cortex M4指南的相关内容,根据寄存器值来判断程序当前的情况。 @@ -472,6 +476,8 @@ VSCode `ctrl+,`进入设置,通过`搜索`找到cortex-debug插件的设置。 ### RTT Viewer日志功能 +> 2023/07/23:补充,Cortex-Debug插件最近似乎集成了RTT Viewer的支持,只需要设置好RTT client的路径,便可以一键启动RTT终端,查看串行调试器中发送的内容。还支持以一定的格式将RTT发来的内容进行可视化(示波器),但支持程度不如Ozone。可以自行查看插件的wiki和文档进行配置。 + 本框架添加了vscode下Segger RTT client的支持。在`.vscode/task.json`中已经添加了启动rtt viewer client的任务。你也可以将此任务作为附加启动任务和调试一起启动,方便查看日志。要使用日志,请包含`bsp_log.h`。注意,需要将jlink的安装目录添加到环境变量中。 ### 更好的编辑体验 @@ -602,7 +608,7 @@ Project.SetOSPlugin(“plugin_name”) **注意,如果添加到动态调试窗口中没有反应,请在窗口8中修改一下”Sample Freq“为100Hz或200Hz即可**。 -8. 窗口8和7配合。在窗口8中会实时显示变量值,并且统计平均值和最大最小值,**而且还会将所有采样值保存到一个csv文件当中**,如果需要进一步分析可以导出这个数据文件。 +8. 窗口8和7配合。在窗口8中会实时显示变量值,并且统计平均值和最大最小值,**而且还会将所有采样值保存到一个csv文件当中**,如果需要进一步分析可以导出这个数据文件。若要进行系统辨识、前馈设计等,这无疑是最好的方法。这还可以方便我们观察采样值的异常,进一步提升debug的效率。 9. 内存视图。可以直接查看任意内存位置的值。 @@ -881,13 +887,16 @@ clean: ####################################### # dependencies -####################################### +################################# +###### -include $(wildcard $(BUILD_DIR)/*.d) # 包含所有的依赖文件(d=dependency),这是编译产生的中间文件,当hello.c包含hello.h而后者又包含了其他头文件时,会产生一个hello.d,它包含了hello.h中包括的其他的头文件的信息,提供给hello.c使用. # *** EOF *** ``` +另外,我们还在仓库的根目录提供了Makefile.upgrade文件,在该makefile中,我们提供了一些基于命令行的更高级的特性,例如自动源文件索引和头文件目录包含等,使用之后若添加了新的源文件就不再需要手动添加路径了。这里面还增加了一些为嵌入式选择的gcc优化参数。要启用高级特性,将其内容复制到你的makefile即可。 + - **编译优化等级**: | 优化级别 | 说明 | 备注 | @@ -919,6 +928,8 @@ download_jlink: 首先设定了flash烧录区的起始地址,下面两个构建目标分别用于daplink和jlink的下载。我们统一使用openocd进行烧录。命令中,`-c`表明的是启动openocd之后要执行的命令,openocd作为一个gdbserver是用作调试的,因此这里我们在`flash write_image`之后直接`reset`让单片机复位开始运行程序,然后立刻退出调试,从而达到下载程序运行但不调试的目的。 +> 若你认为在makefile中使用伪构建任务不合适,也可以自行在`task.json`中编写一个任务。 + 接下来我们希望能够直接下载,不要在命令行里面输入`make download_dap`这么复杂的指令,我们可以利用make构建伪造目标来实现命令行命令执行,因此在tasks.json中添加如下两个任务: ```json @@ -951,7 +962,7 @@ download_jlink: 之所以要使用Linux进行C++开发,是因为在开发环境中配置依赖包、依赖应用和库非常的方便。Debian系有apt,Fedora和Redhat系有yum,他们都可以方便地帮助我们下载开发软件必须的一些文件和工具。在windows的宇宙最强IDEVisual Studio中配置头文件和动态链接库可以称得上是最折磨的事。好在,现在Windows下也有可以使用的包管理工具了:[MSYS2](https://www.msys2.org/)。 -安装包已经上传到了网盘的`EC/VSCode+Ozone环境配置/msys2-x86_64-20221028.exe`下。安装之后,打开MSYS2 MSYS软件,他是一个类shell的界面: +安装包已经上传到了网盘的`EC/VSCode+Ozone环境配置/msys2-x86_64-20221028.exe`下,你也可以在msys2的官网直接下载,如果没有ladder速度可能会稍慢,镜像站的下载速度会快许多。安装之后,打开MSYS2 MSYS软件,他是一个类shell的界面,实际上它提供了包括mingw64、ucrt64、clang64等多种不同编译环境在内的一组类linux开发工具合集: ![image-20221119222946103](.assets/image-20221119222946103.png) @@ -974,6 +985,33 @@ pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-arm-none-eabi-toolchain mi 通过这种方式安装之后,还可以选用ccache加速编译。ccache会根据之前的编译输出建立缓存,使得之后编译时可以直接读取缓存。要开启这个功能,直接在Makefile中搜索PREFIX,将下面一行的内容替代原有内容(即增加ccache在arm-none-eabi-之前)。 + + +- **将msys2的各种终端集成到vscode当中** + +当你的系统中存在各种不同的编译环境时,将他们的路径一同添加到系统环境变量PATH中可能导致错误的工具和指令调用,也有可能在编译中匹配错误的库和头文件。为了防止这种事情发生,最好是只在特定的工具集中添加它们需要的环境变量。Msys2提供了各种子环境的终端(shell),你可以将它们集成到Vscode的终端中,当要进行对应的开发时,就新建一个你需要的环境的终端。 + +`ctrl+,`打开vscode设置或直接打开vscode设置的.json文件,添加以下内容便会将对应的环境终端集成在vscode中: + +```json + "terminal.integrated.defaultProfile.windows": "mysys2-mingw64", // 若希望为默认终端可以加入这一句 + "terminal.integrated.profiles.windows": { + "mysys2-mingw64": { + "path": "cmd.exe", // 意思是使用cmd作为父进程启动终端 + "args": ["/c","C:\\msys64\\msys2_shell.cmd -defterm -mingw64 -no-start -here"] + // msys2_shell.cmd在msys的安装目录下,这里要改为你自己的目录 + } + } +``` + +修改好之后,便可以在vscode中使用了: + +![image-20230723132711865](.assets/image-20230723132711865.png) + +linux下熟悉的ls/mkdir/find/ld/cat等命令和工具也一应俱全了。 + +不过,这时配置的build task和其他download task仍然在powershell或cmd中启动,若没有添加环境变量它们无法找到对应的可执行文件,这时候你就要修改`task.json`,将使用的shell改为mingw64即可(若你使用ucrt或clang同理)。 + ## 附录6:Windows修改用户名为英文 1. 右键【任务栏win徽标】->【计算机管理】->【本地用户和组】->【用户】->右键【中文用户名】->【重命名】 diff --git a/bsp/bsp.md b/bsp/bsp.md index a79783b..2b0ac06 100644 --- a/bsp/bsp.md +++ b/bsp/bsp.md @@ -3,9 +3,10 @@ BSP 这是BSP层的说明文档。 > TODO: -> 1. 增加软件中断支持 -> 2. 增加硬件CRC支持 +> 1. 增加硬件和软件CRC支持,统一不同crc顺序和计算码的调用方式 bsp的功能是提供对片上外设的封装,即单片机芯片内部拥有的功能的封装。在开发板pcb上集成的模块应该放在module层而不是这里。 -bsp应该提供几种接口。包括初始化接口,一般命名为`XXXRegister()`(对于只有一个instance的可以叫`XXXInit()`,但建议统一风格都叫register);调用此模块实现的必要功能,如通信型外设(CubeMX下的connectivity)提供接收和发送的接口,以及接收完成的数据回调函数。 \ No newline at end of file +bsp应该提供几种接口。包括初始化接口,一般命名为`XXXRegister()`(对于只有一个instance的可以叫`XXXInit()`,但建议统一风格都叫register);调用此模块实现的必要功能,如通信型外设(CubeMX下的connectivity)提供接收和发送的接口,以及接收完成的数据回调函数。 + +bsp_tools.h中提供了将bsp数据接收回调函数设置为任务的接口,通过这种方式,可以进一步提高整个系统的实时性,同时保证高优先级的任务一定按时执行。 \ No newline at end of file diff --git a/bsp/bsp_tools.h b/bsp/bsp_tools.h index 6d7a2be..ea046c7 100644 --- a/bsp/bsp_tools.h +++ b/bsp/bsp_tools.h @@ -3,6 +3,9 @@ /** * @brief 创建一个新的任务,该任务收到osSignalSet信号时会被唤醒,否则保持挂起状态 + * + * @note 注册完成后,只需要将module提供的回调函数替换成osSignalSet即可 + * 推荐将处理较为复杂的回调函数注册为任务,如视觉长包解析/多机通信/双板通信/裁判系统通信等 * * @param name 任务名称,注意以'\0'结尾 * @param cbk 回调函数指针 @@ -10,4 +13,5 @@ * @param priority 任务优先级,决定了在中断结束后能否保证立刻执行 * @return uint32_t 信号量,用于唤醒该任务 */ -uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priority); \ No newline at end of file +uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priority); + diff --git a/合理地进行PID参数整定.md b/合理地进行PID参数整定.md index 59ea115..63bda06 100644 --- a/合理地进行PID参数整定.md +++ b/合理地进行PID参数整定.md @@ -4,4 +4,5 @@ Ozone的实时变量可视化监测(示波器)功能可以很好地帮助我们 ## 调试顺序 -先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。 \ No newline at end of file +先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。 +