- 博客(58)
- 资源 (5)
- 收藏
- 关注
原创 字符串实现大数相乘以及大数相加
1.大数相加:第一种思路,在短的字符串中补零:class Solution {public: string addBinary(string a, string b) { int al = a.size(); int bl = b.size(); while(al < bl) //让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引 { a = '0' + a;
2020-09-06 21:22:12
415
原创 模板
C++除了面向对象的思想之外,还有就是用到了泛型编程,泛型编程的主要技术就是模板。1.模板的概念模板就是建立通用的模具,大大提高复用性C++有两种模板:函数模板和类模板2.函数模板 通过建立一个通用函数,其函数返回值类型和形参类型可以不具体指定,用一个虚拟的类型来代表。语法:template<typename T>函数申明或定义 ...
2019-10-20 09:54:21
302
原创 类和对象 --多态
1.基本概念 多态是C++面向对象的三大特征之一 多态分为两类:静态多态:函数重载与运算重载,复用函数名。 动态多态:派生类和虚函数实现运行时的多态静态多态与动态多态的区别静态多态的函数地址早绑定---编译阶段确定函数的地址 动态多态的函数地址晚绑定---运行阶段确定函数地址2.动态多态满足条件继承关系 子类要重写父类中的虚函数重写与重载是不一样的:重写 ...
2019-10-18 09:17:06
481
原创 继承中出现同名成员处理方式
当子类与父类出现同名的成员时,如何通过子类对象访问到父类中同名的数据了?1.非静态成员同名访问子类同名成员 直接访问即可 访问父类同名成员 需要加作用域#include<iostream>using namespace std;//继承方式class Base{public: Base() { m_A=100; } void func() ...
2019-10-14 14:41:33
577
原创 类的继承与继承方式
1.继承继承是面向对象的三大特征之一(封装、继承与多态)。使用继承可以减少重复代码,下面分别不使用继承与使用继承实现相同的功能,看下效果:#include<iostream>using namespace std;// 普通实现页面//java 页面//class Java//{//public:// void header()// {// cout...
2019-10-13 09:41:57
534
原创 Linux设备驱动-IIC总线
IIC和前面总结的platform框架是相似的,分为三层:控制器驱动层(driver层),核心层(core.c)以及设备层(device,iic里叫adapter-适配器),下面分别从这三个方面总结下,以了解IIC框架。1.adapter层以I2c-s3c2410.c为例:先看入口函数module_init(i2c_adap_s3c_init);static int __i...
2019-09-15 10:13:20
324
原创 中断和异常
1.定义中断通常定义为一个事件,该事件改变处理器执行的指令顺序。中断通常分为同步中断与异步中断。同步中断:当指令执行时由CPU控制单元产生的,只有在一条指令终止执行后CPU才会发出中断。 异步中断:由其他硬件设备依照CPU时钟信号随机产生的。异常是同步的,I/O中断是异步的。2.中断与异常中断可以分为:可屏蔽中断 I/O设备发出的中断请求(IRQ)都可以被屏...
2019-09-10 22:51:02
324
1
原创 CPU上下文切换
1.什么叫做CPU上下文CPU上下文指的就是CPU寄存器与程序计数器。加载新的任务之前,现需要把前一个任务的CPU上下文(寄存器与程序计数器)保存起来,然后加载新的任务的上下文值到寄存器与程序计数器中,然后跳转到程序计数器所指的位置,执行新的任务。CPU上下文切换分为以下三类:进程上下文切换 线程上下文切换 中断上下文切换2.进程上下文切换系统调用:从用户态到内核态的转变...
2019-09-07 22:53:30
837
原创 leetcode刷题
1.两数之和题目描述给定一个整型数组,要求返回两个数的下标,使得两数之和等于给定的目标值,要求同一个下标不能使用两次。数据保证有且仅有一组解。样例给定数组 nums = [2, 7, 11, 15],以及目标值 target = 9,由于 nums[0] + nums[1] = 2 + 7 = 9,所以 return [0, 1].#include<iostream...
2019-08-23 16:37:51
298
1
原创 利用递归实现栈与队列的转换
一般而言,用队列实现栈,需要两个队列,具体就不介绍了,可以看下面这篇:https://blog.youkuaiyun.com/qq_40927789/article/details/79955545同理,利用栈实现队列,也需要两个栈。利用递归以后,只需要一个栈就可以实现队列了,或者只需要一个队列就可以实现栈。#include<iostream>#include<algori...
2019-08-15 09:35:58
901
原创 二叉树(建立,插入,遍历,删除,由前序和中序重建树)
#include<iostream>#include<stdio.h>#include <windows.h>#include<string>#include<vector>using namespace std;typedef struct tree { int data; struct tree *left_tree...
2019-08-07 08:54:56
271
原创 链表操作(建立,插入,删除,排序,逆序)
#include<iostream>#include<stdio.h>#include <windows.h>#include<string>#include<vector>using namespace std;typedef struct list{ struct list *next; int data;}l...
2019-08-06 11:09:15
409
原创 Linux内核源码分析-kmalloc与vmalloc
1.kamllocstatic __always_inline void *kmalloc(size_t size, gfp_t flags){ struct kmem_cache *cachep; void *ret; if (__builtin_constant_p(size)) { //__builtin_constant_p 是编译器gcc内置函数,用于判断一个值是否为编...
2019-07-25 10:40:02
591
原创 内存分配-页(page)
1.页内核把物理页作为内存管理的基本单元,并用struct page结构表示系统中的每个物理页。struct page{ unsigned long flags; atomic_t _count; atomic_t _mapcount; unsigned long priva...
2019-07-22 15:35:10
3144
原创 进程创建与线程创建
1.进程创建forkasmlinkage int sys_fork(struct pt_regs *regs){#ifdef CONFIG_MMU return do_fork(SIGCHLD, regs->ARM_sp, regs, 0, NULL, NULL);#else /* can not support in nommu mode */ return(-EINVA...
2019-07-21 08:56:28
938
原创 LINUX进程调度-CFS
1.概念 进程调度可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。 CFS(公平调度)主要就是引进了虚拟时钟vruntime的概念,每个进程的虚拟时间是实际时间相对nice(优先级)为0的权重的比值,CFS中的就绪队列是一颗以vruntime为键值的红黑树,虚拟时间越小的进程越靠近整根红黑树的最左端。进程调度时,选择下一个进程就是挑选v...
2019-07-20 10:52:37
618
原创 虚拟文件系统--register_filesystem
每个注册的文件系统都是用一个类型为file_system_type的对象来表示,file_system_type如下所示:struct file_system_type { const char *name; int fs_flags; int (*get_sb) (struct file_system_type *, int, const char *, void ...
2019-07-09 20:21:20
1526
原创 信号
信号的特点是简单、携带的信息量少,且使用在某个特定的场景中。信号有产生、未决以及递达三种状态。1.信号相关的函数:kill ---发送信号给指定的进程 raise----给自己发送信号 函数原型: int raise(int sig);abort---给自己发送异常终止信号 函数原型 :void abort(void); 没有返回值,永远不会调...
2019-05-18 21:23:28
299
原创 进程间通信--内存映射区
1.父子进程之间永远共享的东西是什么? 文件描述符 内存映射区上一节讲述了利用文件描述符进行进程间通信,如利用文件,匿名管道pipe以及有名管道fifo进行通信。本节讲述利用内存映射区进行通信。 mmap--创建内存映射,将磁盘文件的数据映射到内存,用户通过修稿内存就能修改磁盘文件。利用内存映射想比较与文件操作的好处就是,文件的操作是IO操作,要读写磁盘,效率较慢,而映...
2019-05-18 20:40:10
313
原创 进程间通信-管道通信(pipe与fifo)
1.进程间通信 IPC--interProcess Communication 进程间通信常用的4中方式:管道-简单 信号-系统开销小 共享映射区--有无血缘关系的进程间通信都可以 本地套接字-稳定 2.pipe管道 pipe管道为匿名管道,就是一个伪文件,是一个内核缓冲区,不占用磁盘空间。管道由读端与写端组成,分别对应两个文件描述符,管道的读写默认是阻塞的。管道的...
2019-05-12 09:58:27
847
原创 Matlab 常用指令整理
1.由传递函数到状态空间>> num=[10];>> den=[1 0.1 3];>> [A,B,C,D]=tf2ss(num,den)A = -0.1000 -3.0000 1.0000 0B = 1 0C = 0 10D = 0传递函...
2019-05-11 15:36:42
1267
原创 具有等式约束条件的极值
多元函数求极值:https://wenku.baidu.com/view/517514b269dc5022aaea0094.html
2019-05-04 21:23:50
1131
原创 apollo motion planner 学习总结5
5.understand more on the MP difficulty本节主要介绍EMplanner的开发,如何抽象constraint三维空间(slt)优化问题,不仅能够避开静态障碍物,也能避开动态障碍物 M step就是maximization,E step就是expectation-期望 解决高维空间,有两种方法:一种是离散处理,从configur...
2019-04-29 10:41:48
789
原创 apollo motion planner 学习总结4
4.optimization inside motion planning 优化问题的核心,有三点:1是objective function ,objective function是通过一些平滑性等方面指标的一个定义,是一个合集2是constraint 如何抽象,包括smoothing的constraint,dynamic的constraint以及一些交通规则3,solver约束问题下的...
2019-04-29 10:24:39
524
原创 apollo motion planner 学习总结3
3.motion planning with environment 上本节主要内容:1,考将车体作为刚体考虑,而不是质点,2,考虑车辆与周围环境障碍物的关系,判断两个box是否相交,3,怎样去生成一些平滑的线。Vehicle model--车辆运动学模型前后轮在转动的过程中,是沿着同一个中心转动的。曲线坐标系(SL坐标系),实际上就是车体坐标系SL坐标...
2019-04-29 10:12:33
477
原创 apollo motion planner 学习总结2
2.motion panning with autonomous driving 上一节讲了自动驾驶一些基本的硬件框架以及软件框架,还有一些路径规划的基本概念以及需要考虑的问题,比如路径平滑、交通规则等。本节将讲述自动驾驶中常用的路径规划的方法,约束问题的抽象表达以及路径的平滑等问题。motion planning常用的方法有:上面这些方法考虑的都是质点模型,车辆是一个刚...
2019-04-29 09:34:42
547
原创 apollo motion planner 学习总结1
1.basic motion planning and overviewmotion planner的定义,机器人领域、控制领域以及人工领域来讲各不相同自动驾驶中如何做运动规划,先用一个简单的例子入手--path planning上图中要从绿色的点到达红色的点,这个问题本身就是一个path Finding problem,该如定义最有问题,或者该如何规划路径,可以选取从绿色点到...
2019-04-29 07:59:58
715
原创 open与fopen
1.在将open与fopen之前,先讲文件描述符:当一个可执行程序运行以后,就变成进程,操作系统会为每个进程分配一定的虚拟内存空间,32位操作系统就分配4G。虚拟内存空间结构如下图所示: 1G是内核空间使用,剩余3G为用户空间,虚拟内存就是当物理内存(如内存条)不够时,从磁盘上分配一块空间。为什么要虚拟空间了?因为物理内存一般都很小,当有多进程要执行时,物理内存很快就分配完了,剩余...
2019-04-25 10:14:39
6566
2
原创 HID设备发送消息
基本结构如下:1.分配usb_driver2.设置3.注册(usb_register())/* 1. 分配/设置usb_driver */static struct usb_driver myusb_driver = { .name = "usbmouse_as_key_", .probe = myusb_probe, .disconnect = myusub_dis...
2019-03-21 08:57:20
863
原创 静态库的制作与使用
静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因此程序运行时还需要动态库的存在。静态库制作及使用命名规则 libxxx.a(1)制作步骤原材料:源代码 .c .cpp 将源代码.c文件生成.o文件gcc a.c b.c -c将.o文件打包ar rcs...
2019-03-20 09:01:38
324
原创 gcc编译器常用参数
1.gcc 常用参数整理:-v/--version:查看编译器版本-I:编译时指定头文件路径-c:将汇编文件生成二进制文件,得到一个.o文件-o:指定生成文件的名字-g:gdb调试的时候需要-D:在编译的时候指定一个宏一般在测试的时候使用2.重点整理 -I当文件目录结构如下所示:sum.c 为主函数,include目录中包含了头文件head.h...
2019-03-16 09:11:27
1718
原创 GCC,MAKE,CMAKE的区别
1.gcc时GNU编译套件,一种编译器,可以编译c,c++,java等语言。当只有一个文件时,使用gcc编译器就很方便,但是当有多个文件时,编译顺序以及包含关系等使用gcc很麻烦。2.make工具:make就相当于一个智能的批处理工具,通过调用makefile实现编译,在makefile规定编译以及链接的顺序,在makefile中也调用了gcc,makefile中定了规定编译以及链接顺序的语法...
2019-03-04 21:45:31
1873
原创 nand_flash
以at91_nand.c为例,分析在块设备驱动中,nand_flash 的读写过程:1.分配nand_chip结构体2.设置nand_chip3.添加分区从init开始分析:static int __init at91_nand_init(void){ return platform_driver_register(&at91_nand_driver);}...
2018-09-18 16:53:54
251
原创 图像处理(matlab)
1.基本函数:iread('文件路径');idisp();2.一元操作:imd=idouble(im); //将像素从unit8(范围在0-255的整数像素)到范围在[0,1]的双精度值grey=imono(im); //将彩色图像转变成灰度图像。ihist();//显示每一个像素值出现的次数im=igamma(im,1/0.45); //伽马编码,一种非线性一...
2018-09-07 22:44:43
22767
1
原创 uvc_ioctl分析
1.VIDIOC_QUERYCAP:APP调用struct v4l2_capability{__u8 driver[16]; // 驱动名字__u8 card[32]; // 设备名字__u8 bus_info[32]; // 设备在系统中的位置__u32 version; // 驱动版本号__u32 capabilities; // 设备支持的操作__u32 reser...
2018-08-15 11:07:05
1101
原创 c++小练习
1.结构体与指针功能描述:做一个简单的通讯录录入,然后将其保存到文件中。#include <iostream>#include<fstream>#include<string>using namespace std;struct yg{ string name; string number;};int main(){ yg...
2018-08-11 21:05:14
254
原创 v4l2
一.以vivi.c为例,分析v4l2流程:a.分配video_device结构体 b.设置 c.注册: video_register_device();1.分配:vfd = video_device_alloc(); if (!vfd) goto unreg_dev;2.设置: /*************************control设置*********...
2018-07-20 22:22:48
928
原创 usb总线
1.usb的描述符及其之间的关系 usb常用的描述符设备描述符(device descriptor),配置描述符(configuration descriptor),接口描述符(interface descriptor),端点描述符(endpoint descriptor)。 一个usb设备只有一个设备描述符。设备描述符里决定了该设备有多少种配置,每种配置有一个配置描述符;在每个配置描述符...
2018-05-13 13:34:45
253
原创 platform 平台总线驱动
platform平台总线是为了将较为稳定的代码与具体的硬件 相关的会变得代码分开其下有两个部分platform_driver_register与platform_device_register1.platform.cint platform_driver_register(struct platform_driver *drv){ drv->driver.bus = &plat
2018-05-08 21:51:49
312
Optimal Control Theory.pdf
2019-05-17
Model Predictive Control System Design and Implementation Using MATLAB
2019-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人