更新了vscode配置文档以提供动态监视相关的教程

This commit is contained in:
NeoZng 2023-07-23 13:32:19 +08:00
parent 393923cc0b
commit 018b7ba6e6
5 changed files with 53 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -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系有aptFedora和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同理
## 附录6Windows修改用户名为英文
1. 右键【任务栏win徽标】->【计算机管理】->【本地用户和组】->【用户】->右键【中文用户名】->【重命名】

View File

@ -3,9 +3,10 @@ BSP
这是BSP层的说明文档。
> TODO:
> 1. 增加软件中断支持
> 2. 增加硬件CRC支持
> 1. 增加硬件和软件CRC支持,统一不同crc顺序和计算码的调用方式
bsp的功能是提供对片上外设的封装即单片机芯片内部拥有的功能的封装。在开发板pcb上集成的模块应该放在module层而不是这里。
bsp应该提供几种接口。包括初始化接口一般命名为`XXXRegister()`(对于只有一个instance的可以叫`XXXInit()`,但建议统一风格都叫register)调用此模块实现的必要功能如通信型外设CubeMX下的connectivity提供接收和发送的接口以及接收完成的数据回调函数。
bsp应该提供几种接口。包括初始化接口一般命名为`XXXRegister()`(对于只有一个instance的可以叫`XXXInit()`,但建议统一风格都叫register)调用此模块实现的必要功能如通信型外设CubeMX下的connectivity提供接收和发送的接口以及接收完成的数据回调函数。
bsp_tools.h中提供了将bsp数据接收回调函数设置为任务的接口通过这种方式可以进一步提高整个系统的实时性同时保证高优先级的任务一定按时执行。

View File

@ -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);
uint32_t CreateCallbackTask(char *name, void *cbk, void *ins, osPriority priority);

View File

@ -4,4 +4,5 @@ Ozone的实时变量可视化监测(示波器)功能可以很好地帮助我们
## 调试顺序
先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。
先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。