自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 linux 进程可靠运行几种方法

1. 问题分析:ssh打开终端,执行耗时行为(编译大项目),网络不稳定,需要断开ssh, 关闭ssh终端,最终导致编译终止。一个shell 为一个会话,一个会话包含多个进程组,一个进程组包含多个进程。当控制进程失去shell终端时,内核回向其发送SIGHUP信号。shell收到SIGHUP信号时,会向其创建的前后台进程组发送SIGHUP信号,各个进程收到SIGHUP信号,默认终止任务。2. 解决方法2.1 setsid commandsetsid 开启新会话,完全不属于shell的会话,故其父

2021-10-01 18:36:49 179

原创 gdbserver gdb初次使用

测试程序:// test.c#include <stdio.h>#include <pthread.h> int g_data = 0; void thread1_func(void *args) { int i = 0; while(i < 2) { i++; g_data += i; } } int main(){ int i; int flag = 1;

2021-09-24 23:21:29 5667

原创 内存相关调试(2)core文件调试

修改core文件大小为无限大ulimit -c unlimited检查 ulimit -c 输出 unlimited控制core文件的文件名中是否添加pid作为扩展。文件内容为1,表示添加pid作为扩展名,生成的core文件格式为core.xxxx;为0则表示生成的core文件同一命名为core。sudo sh -c "echo 1 > /proc/sys/kernel/core_uses_pid"控制core文件保存位置和文件名格式将core文件统一生成到当前目录下sudo..

2021-09-21 22:17:09 227

原创 内存相关调试(2)valgrind

程序例子#include <stdio.h>#include <stdlib.h>#include <string.h>static void mem_leak1(){ char *p = malloc(1);}static void mem_leak2(){ FILE *p = fopen("test.txt", "w+");}static void mem_overrun1(){ char *p = malloc.

2021-09-21 21:04:25 113

原创 内存相关调试(1)

查看文件描述符是否关闭,持续增加1.1. ls /proc/pid/fd/ -l 查看文件描述是否增加1.2. lsof -p pid 查看文件描述符FD是否增加 lsof: WARNING: can't stat() fuse file system /root/.cache/doc Output information may be incomplete. lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /ro.

2021-09-21 20:15:45 199

原创 Doxygen和Graphviz 生成 代码函数调用关系

1. cd 代码目录2. doxygen -g 生成一个叫 ‘Doxyfile’文件3. 修改Doxyfile: HAVE_DOT = YES EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES CALL_GRAPH = YES4. doxygen Doxyfile5. 查看html

2021-06-01 17:26:03 138

原创 ixxat usb-to-can compact,linux驱动编译do_gettimeofday出错

出错问题现象:jony@ubuntu:~/Desktop$ cd socket_can/usb-to-can_socketcan/jony@ubuntu:~/Desktop/socket_can/usb-to-can_socketcan$ makemake -C /lib/modules/5.4.0-70-generic/build M=/home/jony/Desktop/socket_can/usb-to-can_socketcan modulesmake[1]: Entering direct

2021-04-11 22:10:33 1191

原创 opencv 编译配置

cd <opencv_source>mkdir build && cd buildcmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_TBB=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D WITH_V4L=ON \ -D WITH_QT=ON \ -D WITH_OPENGL=ON \ -DOPENCV_EXTRA

2021-03-16 18:46:21 215

原创 QEMU 调试imx6ull 环境搭建

日常记录,根据韦东山资源配置qemu,搭建imx6ull仿真环境, 可适当修改调试X86平台内核1. 数据资源获取http://wiki.100ask.org/Qemugit clone https://e.coding.net/codebug8/repo.gitmkdir -p 100ask_imx6ull-qemu && cd 100ask_imx6ull-qemu../repo/repo init -u https://e.coding.net/weidongshan/man

2021-03-14 16:43:31 2131

原创 vscode windows c/c++ 环境配置

tasks.json{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++.exe 生成活动文件", "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe", "args": [ "-g", "${file}",

2021-03-05 21:09:45 141

原创 gcc 编译程序错误: as: unrecognized option ‘--64‘

问题现象:使用gcc编译程序(简单如helloworld),出现如下错误:gcc demo.c thread_pool.c -o demo -lpthreadas: unrecognized option '--64'as: unrecognized option '--64'Makefile:2: recipe for target 'make' failedmake: *** [make] Error 1解决方法:1. 查看as位置: whereis asas: /usr/bin/

2020-11-28 09:44:07 6284 1

原创 qt使用mysql,打开数据库,抛出无法连接错误。

调用 database.open()函数,抛出如下错误:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) (Mysql::Error)解决方法:查看配置文件mysql.cnf默认使用的mysqld.sock位置。例如:[mysqld]basedir=/usr/local/mysqldatadir=/usr/local/mysql/datanoteport=3306s

2020-11-15 11:26:50 277

原创 状态模式

状态模式:当一个对象状态转换的条件表达式过于复杂时,状态模式通过把状态的判断逻辑转移到表示不同的状态的一系列类中,从而把复杂判断逻辑简化。通过添加新的子类可以很容易的增加新的状态。类图:关键代码:// State.hclass Context;class State{public: State(); virtual ~State(); virtual void han...

2020-04-19 16:27:54 121

原创 装饰模式

装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式通过把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需求选择地、按顺序地使用装饰功能包装对象。装饰模式能够有效的把类的核心职责功能和装饰功能区分开,同时可以去除重复的装饰逻辑。类图:核心代码:// ConcreteC...

2020-04-19 15:59:42 169

原创 适配器模式

适配器模式:将一个类的接口转换为客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的类可以一起工作。由于一个系统可能因不同的开发人员、不同的产品、不同的厂家而造成功能类似而接口不同,有点亡羊补牢的意思。此时,系统的行为与数据都正确,接口不一致,考虑使用适配器。类图:核心代码:// Adaptee.h#include <iostream>class Adap...

2020-04-18 11:45:47 113

原创 socket基础编程(二)

网络信息对于一个更加通用的服务器和客户端来说,应该使用网络信息来决定应该使用的地址与接口。若权限足够,可将服务添加到/etc/services文件中已知服务列表,并在这个文件中为端口分配一个名字,使用户可以使用符号化的服务名而不是端口号的数字。另外,给定一个计算机名字,可通过调用解析地址的主机数据库函数来确定它的IP地址。主机数据库函数:/* Return entry from host ...

2020-04-16 10:42:57 240

原创 桥接模式

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。实现系统可能有多角度分类,每一种分类都有可能变化,每一种分类都有可能变化,桥接模式通过合成聚合原则代替继承把这种多角度分离出来让它们独立变化,减少系统的耦合度。类图:关键代码:// RefinedAbstraction.h#include "Abstraction.h"class RefinedAbstraction ...

2020-04-16 09:52:21 150

原创 建造者模式

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要建造的类型就可以得到它们,而具体建造过程和细节就不需要知道了。构建者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建过程通常面临这变化。构建者的好处是使得构建代码与表示代码分离,由于构建者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示...

2020-04-16 09:32:08 129

原创 外观模式(门面模式)

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。类图:关键代码:// Facade.h#include "SystemC.h"#include "SystemA.h"#include "SystemB.h"class Facade{public: Facade(); virtual ~Facade();...

2020-04-15 16:11:36 90

原创 socket 编程基础(一)

套接字数据类型1. 流套接字 流套接字提供的是一个可靠、有序、双向字节的连接。从而发送的数据可以确保不会丢失、复制或乱序到达。流套接字有SOCK_STREAM指定,在AF_INET域中通过TCP/IP连接实现。2. 数据报套接字 与流套接字相反,数据报套接字不建立和维持一个连接,其可以发送的数据报长度有限制。数据报作为一个单独的网络消息传输,可能会丢失、复制和乱序到达。数据报套接字由SO...

2020-04-15 15:18:07 178

原创 抽象工厂模式

抽象工厂模式:提供创建一系列相关或相互依赖对象的借口,而无需指定它们具体的类。适用于产品种类结构多的场合,主要用于创建一组(有多个种类)相关的产品,为它们提供创建的接口;就是当具有多个抽象角色时,抽象工厂便可以派上用场。类图:关键代码:// AbstractFactory.h#include "AbstractProductA.h"#include "AbstractProductB...

2020-04-14 21:04:57 101

原创 工厂方法模式

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。通过在工厂类中包含必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对客户端来说,去除了对具体产品的依赖。类图:// ConcreteFactory.h#include "Product.h"#include "Factory.h"class ConcreteFactory : public Factory{...

2020-04-14 20:39:13 542

原创 套接字服务器端接受字符串乱码

问题现象:服务器端accept使用下述方式,read读取字符串乱码int Server::ServerAcceptRequest(){ clientSockfd = accept(serverSockfd, (struct sockaddr *)clientAddr, (socklen_t *)sizeof(struct sockaddr_in)); return client...

2020-04-11 08:35:25 345

原创 socket 服务器端bind返回错误: Invalid argument

问题现象:bind返回 Invalid argument。{ unlink("server_socket"); serverSockfd = socket(AF_INET, SOCK_STREAM, 0); serverAddr->sin_family = AF_INET; serverAddr->sin_addr.s_addr = inet_addr...

2020-04-10 21:11:04 5309

原创 linux内核中断

一、linux 中断API1.申请中断号request_irq(unsigned int irq, /*中断号*/ irq_handler_t handler, /*中断处理函数*/ unsigned long flags, /*中断标志*/ const char *name, /*中断名称*/ void *dev /*一般为设备结构体,dev会传递给中断处理函...

2019-12-24 21:55:02 274

原创 linux 内核定时器

linux内核中有大量的函数需要时间管理,硬件提供时钟源,时钟源的频率可以设置,设置好以后产生周期性中断,系统通过中断计时。1.节拍率(tick rate)系统周期中断频率,可通过menuconfig设置,可设置 100、200、250、300、500、1000hz。-> Kernel Features-> Timer frequency (<choice> [=y...

2019-12-17 13:26:53 209

原创 linux设备驱动开发之input

input子系统是管理系统输入的子系统,比如鼠标、键盘、触摸屏等等。不同设备所代表的输入信息不同,对于驱动开发人员而言,不需要关心应用层的事情,通过input子系统按照既定规则上报输入事件即可。为此 input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层,最终给用户空间提供可访问的设备节点。系统定义主设备号头文件,input子系统主设备号13.include...

2019-12-16 22:25:28 163

原创 linux字符设备驱动开发之MISC

misc 杂项驱动。杂项驱动其实是字符设备驱动,嵌套在platform总线中,实现复杂的驱动。当所使用外设无法分类,一般采用misc驱动。misc驱动固定主设备号10,次设备号因不同设备不同。misc驱动设备使用如下结构体描述:include/linux/miscdevice.hstruct miscdevice { int minor; const char *name; c...

2019-12-16 15:58:57 211

原创 linux字符设备驱动开发之platform

考虑到驱动代码的重用性,linux采用驱动分隔思想,将主机驱动与设备驱动分隔开来,采用统一的接口通信。一般地,设备驱动已经由半导体厂家开发完毕,我们只需要提供设备信息,如IO复用、电器属性等等。主机驱动通过设备树获取设备信息,来初始化设备。简单的讲,驱动只管驱动,设备负责设备,通过设备树经行匹配。以上即为,linux总线、驱动、设备模型,常说的驱动分离。Platform 平台驱动模型...

2019-12-16 14:56:30 577

原创 linux字符设备驱动开发之pinctrl,gpio

pinctrl 和gpio子系统是驱动分离与分层思想的产物。开发者只需要通过配置设备树节点,即可以实现io映射,电器属性设置等。相较于传统的裸机开发更简单,扩展程度更高。pintctrl子系统(IO复用)节点前缀一定为pinctril_XXX,在iomux节点内添加想要复用的pin。demo添加内容如下: pinctrl_led: ledgrp{ fsl,pins = < ...

2019-12-01 21:43:18 344

原创 ARM GNU汇编常用指令

1.内部数据传输1.1 MOV用于将数据从一个寄存器拷贝到宁外一个寄存器。MOV R0,R1 @R0 = R1MOV R0, #0X12 @R0 = 0X121.2 MRS用于将 特殊寄存器(CPSR,SPSR)中的数据传递给通用寄存器。(读取特殊寄存器值)MSR CPSR,R01.3 MSR用于将普通寄存器的数据传递给特殊寄存器(写特殊寄存器)MSR CPSR,R0...

2019-11-19 10:27:06 454

原创 linux字符设备驱动开发之设备树(2)

设备树常见of操作函数设备树描述了设备的详细信息(比如reg->寄存器地址),编写驱动的目的在于获取这些信息.linux提供了一些of函数读取这些信息, /include/linux/of.h.查找节点相关函数// 设备节点struct device_node { const char *name; const char *type; phandle phandle; ...

2019-11-03 16:19:18 287

原创 linux字符设备驱动开发之设备树(1)

为什么使用设备树?linux内核3.x以前,采用板级信息描述设备,由于芯片发展速度快,造成linux内的板级信息太多,使系统太臃肿.所以采用设备树来简化表达....

2019-11-03 15:09:22 695

原创 linux字符设备驱动开发之新字符设备驱动开发

考虑到老版本使用register_chrdev需要事先确定设备号,驱动加载需要手动创建节点(mknod).新版本linux驱动采用动态分配设备号,自动创建节点,开发方便横多.1. 新字符设备注册方法// 没有指定设备号,申请设备号// dev : 设备号// baseminor : 次设备号 , 通常为0// count : 设备申请数量// name : 设备名int alloc_...

2019-11-03 11:20:09 264

原创 linux字符设备驱动开发之内存映射

本文章参考正点原子相关教程,仅学习使用linux驱动最终都死通过配置寄存器完成,linux驱动开发需要满足linux的驱动框架.所以存在一个内存管理单元(MMU)实现虚拟地址与物理地址的映射,内存保护和虚拟地址缓存功能.通过内存映射,只需要对虚拟地址进行操作,就可以实现相应的驱动开发.内存映射映射函数//内存映射void __iomem *ioremap(phys_addr_t ...

2019-11-02 10:08:45 472

原创 linux字符设备驱动开发之经典流程

驱动代码流程流程//打开文件static int chrdevbase_open(struct inode *inode, struct file *flip)//读文件static ssize_t chrdevbase_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)//写文件static s...

2019-11-02 09:35:28 716

原创 gazebo教程(Tutorial: Using a URDF in Gazebo) ,运行roslaunch rrbot_gazebo rrbot_world.launch,gazebo黑屏.

终端提示如下错误:Service call failed: transport error completing service call: unable to receive data from sender, check sender’s logs for details Segmentation fault (core dumped) [gazebo-2] process has died...

2018-11-19 14:42:40 1755 1

原创 rosrun 之后tab补偿代码,terminator崩溃.

解决方案该问题有可能是ros部分文件丢失,尝试在现有基础上重新覆盖安装ros.sudo sh -c 'echo &amp;quot;deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main&amp;quot; &amp;amp;gt; /etc/apt/sources.list.d/ros-latest.list'sudo apt-key adv --keyserver h...

2018-11-19 14:25:22 1506 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除