从 stringstream 中获取拼接后的 string

需求 如何从 stringstream 中获取多次拼接后的 string, 直接使用 >> 效果并不好. 解决 使用 stringstream 的 str() 这个类函数。 stringstream ss; string s = ""; ss << "123"; ss << "456"; s = ss.str(); 参考 c++ stringstream(老好用了)

2023-04-06 · 1 min · 32 words · RamLife

printf 16进制大写输出,并且左补零

需求 在某些情况下,需要打印的数据,16进制表现形式,并且达到固定的位数,不足的左边补零。 解决 snprintf(tmp, sizeof(tmp), "%04X", ack.command); % 格式说明的起始符号 0 空位补0 m.n m指宽度,n指小数精度 X 16进制大写字符 参考 printf()如何进行“左补零”的操作 c语言printf()输出格式大全 C语言printf指定宽度的格式化输出 C语言中sprintf()函数的用法

2023-04-05 · 1 min · 20 words · RamLife

删除消息队列

需求 编程调试的时候,如果用到了消息队列,难免会消息队列中有残余信息的情况,并且如果希望在服务程序结束前就清除这些消息队列,那就需要在 shell 中使用命令进行删除。 解决 消息队列属于 IPC 的一部分,使用的命令也是 IPC 的系列命令中的 ipcrm. 查看消息队列情况 ipcs -q 删除指定 key 的消息队列,一般我们经常用这个,因为 key 一般是我们自己设定的。 ipcrm -Q 1234 删除指定 id 的消息队列 ipcrm -q 1234 如果程序是使用 sudo 来启动的,那么删除的时候,也需要 sudo, 否则没有权限. 参考 ipcs, ipcrm 命令 linux下消息队列的查看与删除(ipcs&ipcrm的使用) 请问Linux下如何清除消息队列queue中的内容??

2023-04-04 · 1 min · 39 words · RamLife

修改消息队列的大小

需求 因为需要在多个进程之间通过消息队列传输数据,所以需要加大消息队列的大小。 解决 首先确定使用的是 System V 还是 POSIX 的消息队列,这两种从 API 到配置都不一样。本文主要提的是 System V 的消息队列。 System V 查看当前系统中的设置 cat /proc/sys/kernel/msgmni cat /proc/sys/kernel/msgmax cat /proc/sys/kernel/msgmnb # 查看当前使用 ipcs -u # 查看限制 ipcs -l 修改配置 System V 的消息队列配置文件是 /etc/sysctl.conf 这个总的配置文件或者 /etc/sysctl.d/ 文件夹下面的细分配置文件。 sudo vim /etc/sysctl.d/11-message-queue.conf # set message queue # set message number of any queue kernel.msgmni = 312 # set one message max size kernel.msgmax = 8192 # set all message totall max size kernel....

2023-03-23 · 1 min · 129 words · RamLife

matplot 多个图片在多个窗口显示

需求 使用 matplot 时,当需要多于 10 个的图表显示,使用单窗口多子图的模式,会太小了,看不清楚。所以需要使用多窗口模式,每个窗口只显示有限的子图即可。 解决 其实很简单,只要保证只有一个 show 即可,把所有的窗口全部设置好之后,在最后使用 show, 就可以多个窗口都显示出来了。 for i in range(0, channel_num): fig = plt.figure(num = i, figsize = (4, 4)) ax1 = fig.add_subplot(311) ax1.plot(lists[i][0]) ax2 = fig.add_subplot(312) ax2.plot(lists[i][1]) ax3 = fig.add_subplot(313) ax3.plot(lists[i][2]) #plt.show() plt.show() 参考 Python 多个图同时在不同窗口显示

2023-03-21 · 1 min · 43 words · RamLife

gdb 调试崩溃产生的 core 文件

需求 程序崩溃后,希望知道程序到底是因为什么崩溃的,首先需要找到崩溃后的 core 文件,然后调试加载 core 文件。 解决 先在软件的目录寻找 core 文件,如果没有按照下面的步骤来处理。 确认开启了 core 查看当前允许的 core 文件的最大大小。 ulimit -c 设定固定值或者不限制, 单位是 KB ulimit -c 1024 ulimit -c unlimited 确认 core 文件路径 如果文件路径类似下面这样的,就说明 core 被系统转存了,需要专门导出 cat /proc/sys/kernel/core_pattern |/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e 导出 core 导出需要使用 coredumpctl, 如果没有安装,使用如下命令: sudo apt install systemd-coredump 使用 coredumpctl, 查看崩溃的 pid, 如果显示的不完整,可以使用方向键来查看未完信息。 如果崩溃的 pid 为 1234, 并且导出的文件名为 core_2023 coredumpctl -o core_2023 dump 1234 加载 core 如果可执行文件名为 main, 崩溃文件为 core_2023....

2023-03-21 · 1 min · 88 words · RamLife

gdb list 显示指定文件或函数

需求 当多个文件编译后,需求调试的时候,需要 b 来打断点,但是前提是通过 list 翻到代码所在行。默认的 list 每次的行数太少,而且也不是一下子就能翻到。 解决 指定文件 可以直接指定源文件的某一行进行 list. 比如需要查看 a.cpp 的 100行。 gdb> list a.cpp:100 指定函数 可以直接指定查看某个函数,比如查看 Pack 这个函数。 gdb> list Pack 参考 gdb中list用法 GDB单步调试程序

2023-03-21 · 1 min · 29 words · RamLife

录屏软件简单使用

需求 想要把腾讯会议的培训教程录制下来,以后可以观看,又不希望通知其他与会者。 解决 使用 obs 这款软件就可以。 下载 使用 https://obsproject.com/ 这个网站,就可以下载了。 注意:这个是英文网站,下载免费。中文网站,下载收费 设置 在录制前,去设置中修改保存的位置,保证文件夹有足够的空间。 录制桌面 在左下第二个格, source 的左下角,点击 +, 选择 Display Capture, 就可以录制全桌面了。 Audio Mixer 里面是选择录制的音频 点击最右边的 start recording 即可开始录制。 注意:桌面上有啥,录制啥,所以如果这样录制的话,需要全程让腾讯会议在最前才可以 录制窗口 打开腾讯会议并且进入会议或者其他你想录制的软件,并且窗口最大化。 在 source 中新建选择 Window Capture, 就可以选择一个窗口进行录制。 保证 Audio Mixer 是 Desktop Audio, 并且最大。 把系统声音拉到最大。 点击 start recording 开始录制 可以点击系统声音最前面的静音图标,这样就不会影响办公。而且也不会影响到录制的声音。 打开其他你需要工作的软件即可做其他工作。 注意:一定要注意,千万千万不要把需要录制的腾讯会议的窗口给最小化了,否则就不能录制了。可以打开其他软件遮盖,但就是不能最小化 参考 OBS录屏安装与简单使用方法 在腾讯会议运行期间录屏,会被后台检测并发送警告给会议组织者?

2023-03-21 · 1 min · 56 words · RamLife

多维列表添加值时,多个位置被同时修改的错误

需求 今天使用 python 编写一个数据处理的脚本时,结果怎么都不对。经过反复调试,问题出现在使用 append 给多维列表添加值的时候,我需要的是只在指定的列表里面添加,结果多维列表的内部多个列表同时被添加值了。 解决 原因 这个错误有点莫名其妙,一开始我以为是我写错了,导致类似于 numpy 里面那样,对多维数组操作时,对高维操作时,会有多个地方被修改。 但是在自己检查之后发现,并不是这种情况。后来经过反复的调试和搜索后,终于确定原因所在。 原因其实还是在新建多维列表的地方,如下是我开始时候的写法: c1 = [] c2 = [] t = [] for i in range(0, 12): l = [c1, c2, t] out_data.append(l) 上面的写法看起来却是是新建了 12 * 3 的多维列表,但是隐藏的问题是,这样添加,其实添加的是 c1, c2, t 的引用,所以导致只要有一个变化了,其他的都会跟着变。 解决 只要修改创建多维列表的方法就可以了,比如这样: out_data = [ [ [] for j in range(3) ] for i in range(channel_num) ] 参考 Python 创建多维空列表 python初始化二维列表:{}.append({}) 与 {{}} * n python 二维列表(数组)赋值问题 python二维列表List修改其中一个数值,所有项数值都改变的问题。

2023-03-21 · 1 min · 70 words · RamLife

串口读取数据部分数据有错误

需求 在使用串口调试助手调试读写程序时,发现在开启定时 10ms 发送的情况下,接收到的数据有时候会不对。 解决 原因 经过反复调试,最终确定问题是 RS485 导致的问题。因为下面几个原因叠加导致: RS485 是半双工设备,同时只能收或者发。 串口调试助手,定时发送没有办法刚好完全避开程序的发送 所以,就出现了,当程序在发送时,串口调试助手也在发送,等到程序接收的时候,数据就不完整,或者有问题。 验证 验证也很简单: 程序只收不发,然后查看所有受到的数据,没有错误。 程序发送的间隔拉的很长,观察在发送间隔中的接收数据,也是没有错误的。 参考

2023-03-21 · 1 min · 18 words · RamLife