type
status
date
slug
summary
tags
category
icon
password
system view
官方手册:system view
关于bear
呃呃,好像子为给我配了梯子之后,bear用不了了),一直报什么Socket closed
这里有一篇帖子说了这个问题:Socket closed
do this will temporary disable vpn. and bear works well for me !for example i use :
it generate compile_commands.json good!
只需要先将梯子关掉就好了(不知道为什么如果我在clash里面关掉梯子不行)
需要注意的是直接在伪目标中加上export httpsproxy=和export httpproxy=(这两个本质上是环境变量吧)是不行的,必须要像下面这样:
这样处理了之后在Makefile执行之后代理还是会恢复的
可以发现Makefile本质上在执行的时候就是新开了一个shell,然后在这个新的shell里面去执行我的命令,命令执行结束之后将新的shell关闭,这样我的代理就在新的shell中被关闭,但是不影响我当前的shell了。所以这两行语句应该是在新的shell中执行的(伪目标中的export应该是无效的,不然环境变量都可以直接放在伪目标里面来设置了)
安装相关驱动实现ST转J
然后就是安装一些驱动什么的,按照手册上做就好了(我给Windows和虚拟机都装上了驱动,应该只要给虚拟机装就好了,但是为了不出意外,我还是全部都装上了)
这样安装deb文件的时候会安装到什么位置)。之前装搜狗的时候也是这样装的,装完之后都直接有一个桌面图标了
现在需要将USB用作jlink(所以需要在虚拟机上安装一个jlink驱动。这是因为SystemView需要jlink),所以这个时候就需要将stlink转换为jlink,参考下面的文档:安装驱动
这里就直接在Windows上面将stlink升级为jlink了
- 安装stlink的驱动:之前装过了,这里不说了。。(需要注意的是插上板子之后需要将板子链接到主机而不是虚拟机)
- 安装jlink的驱动(这个是Windows和linux都要安装的吧。好吧好像不是两个系统都要装的,只有linux下要装,因为好像是通过stlink进入烧录固件模式的,所以Windows只需要有一个stlink的驱动就好了,将固件烧录好之后再连接到虚拟机上就能正常烧录了吧):
- 安装stlinkreflash。这玩意就相当于是给32烧固件的,相当于是把stlink转jlink的模块直接烧在板子上了。使用这玩意就按照文档操作就好了。
这个操作完之后在vmware中可移动设备中的名字都变成了jlink:
clangd配置
clangd找不到头文件的时候就在下面这个位置进行配置:
或者是在项目的setting.json中进行配置,或者就是在.clangd文件中进行配置。
我这边出问题了主要是因为Makefile不一样)
想要忽略clangd的某些报错,可以在.clangd文件中输入:
如上面的这个例子,就可以忽略循环include的报错(在编写代码的时候已经用宏指令实现了只编译一次,就不会出现循环include的问题了)
Jlink烧录
如果是使用的jlink的话就不需要openocd了(如果之后需要使用stlink的话就在Windows上再用stlinkreflash烧一次固件就好了)
这个时候烧录就需要重新写脚本和Makefile了,参考:Jlink烧录
将stlink转换为jlink之后就只能使用jlink进行烧录了,下面是copilot提供的jlink烧录方法(JLinkExe这个好像是linux已经有了,或者是安装驱动的时候带上了):
使用J-Link进行STM32的烧录,你可以使用J-Flash软件或者JLinkExe命令行工具。以下是使用JLinkExe的步骤:首先,你需要连接你的J-Link设备,并确保你的STM32设备已经正确连接。打开终端,运行JLinkExe。这将打开J-Link命令行工具。
在J-Link命令行工具中,设置你的设备类型。例如,如果你的设备是STM32F103C8,你可以输入:
连接到你的设备。你需要指定你的设备的接口类型(JTAG或者SWD)和速度。例如:
烧录你的二进制文件。你需要指定你的文件的路径和格式(bin或者hex)。例如:
退出J-Link命令行工具。以上步骤将会烧录你的二进制文件到你的STM32设备。请确保你的文件路径和设备类型是正确的。
使用JLinkExe我没办法实现烧录,官网是给出了解决方法的,但是队友说可以直接用CortexDebug进行烧录,这里就换成CortexDebug进行烧录了,这里摆一个链接在这,有关JLinkExe无法烧录的解决:JLinkExe无法烧录
使用cortexdebug又发现之前使用的arm-none-eabi-gdb版本太低了,cd没办法使用,这里就换成gdb-multiarch。但是换成gdb-multiarch又会出现没有objdump-multiarh和nm-multiarch的问题,参考:安装objdump和nm(这里其实就是是通过创建软连接来解决的)
感觉很像是这个问题:
这里说如果没有使能的话就只有中断还有调度事件(这个不知道是啥意思)会被记录,然后我们的确实也是,中断会被记录。但是我修改了之后好像没有什么用)
还有一种可能是下面这个:
我在项目中也没有发现我们调用了sysview提供的上下文切换记录函数(但是我手动在Schedule的时候调用还是不行。。)
- 作者:Noah
- 链接:https://imnoah.top/article/SysView
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。