自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (3)
  • 收藏
  • 关注

原创 Linux工具学习

linux下性能调优工具OProfile和perf、/cpu/info、top、vmstat、/cpu/meminfo、sar工具

2022-06-11 15:50:31 1892 1

原创 Linux启动流程

Uboot启动阶段参考我的博客:Uboot启动过程详解内核中排布的第一个文件是: arch/arm/kernel/head.S__lookup_machine_type机器 ID 。一个编译好的内核能支持哪些单板,都是定下来的。内核上电后会检测下看是否支持当前的单板。若可以支持则 继续往下跑,不支持则__error_a跳到死循环内核的链接地址从虚拟地址开始。这个地址并不代表真实存在的内存。我们的是从 0x3000 0000 开始的。故这里面要建立一个页表,启动 MMU 。@ mmu has b

2022-06-05 15:43:41 384

原创 DBUS入门与C编程

一、dbus简介1. dbus是什么D-Bus最主要的用途是在 Linux 桌面环境为进程提供通信,同时能将 Linux 桌面环境和 Linux 内核事件作为消息传递到进程。D-Bus(其中D原先是代表桌面“Desktop” 的意思),即:用于桌面操作系统的通信总线。D-Bus的主要概念为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。D-Bus是为Linux系统开发的进程间通信(IPC)和远程过程调用(RPC)机制,使用统一

2022-05-30 17:33:38 2871 1

原创 Yocto学习笔记

1、什么是Linux构建系统2、Yocto Project是什么yocto Project参考Gentoo Linux的eBuild构建系统设计,目的为构建定制化的嵌入式Linux发行版提供一系列模板、工具和方法yocto :基于python的方言 bitcake 以此之上构建生态。buildroot适合简单的基本验证,如果要做复杂的发行版 支持不同的场景使用yocto。yocto的缺点就是太过于灵活,一个实现方式可以有不同的写法,无一个规范的操作。3、Yocto Project组成O

2022-05-13 10:51:08 2394

原创 vim、makefile、gdb

makefile1.makefile规则命名规则:makefileMakefilemakefile三要素:目标依赖规则命令写法:目标:依赖1 依赖2tab键 规则命令当“依赖”比“目标”新,执行命令比如文件a.c b.c c.c include(include/head.h)-I包含头文件的地址app:main.c a.c b.c c.c gcc -o app -I./include a.o b.o c.o如果更改其中一个文件,所有的源码都重新编译可以考虑编译过

2022-04-13 22:23:49 574

原创 svn与git的区别以及SVN软件使用

版本控制分为集中式和分布式。集中式版本控制系统版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作。主要代表就是SVN。好处:每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。缺点:只能有一个中央服务器,存在中央服务器的单点故障 。分布式版本控制系统分布式版本控制系统根本没有“中央服务器”,每个人的电

2022-04-12 19:32:35 680

原创 Linux应用程序编程

一、POSIX文件I/O编程1.1 文件描述符POSIX文件操作同样也是以文件描述符来标识一个文件,与ANSI文件描述符不同的是,POSIX文件描述符是int类型的一个整数值。POSIX文件描述符仅是一个索引值, 代表内核打开文件记录表的记录索引。在一个系统中,文件打开关闭比较频繁,因此同一个POSIX 文件描述符的值在不同时间可能代表不同的文件。Linux系统下默认一个进程最多可以打开1024个文件,用户可以通过ulimit -n查看系统允许打开文件的数量。stdin、stdout、stderr

2022-04-10 19:35:38 2216

原创 Uboot启动过程详解

uboot就是将start.o和大量的built-in.o链接在一起。built-in.o好像是把所有子目录下的.o文件进行链接到一起。链接脚本为u-boot.lds ,uboot链接首地址为0x87800000,裸机的时候也是-Ttest 来执行链接首地址查找一下这个链接的地址grep -nR "87800000"在mx6_common.h文件中设置通过uboot-lds可以看到入口地址为_start...

2021-07-31 11:04:04 8072

原创 如何实现第一个单片机裸机程序(附汇编指令)

一、(8-2)一个芯片上面有片内SRAM内存(4K),NOR Flash(2M) , Nand控制器(256M),GPIO控制器启动过程:(大多数ARM芯片从0地址启动)1、NOR 启动, NOR Flash基址为0 CPU读取NOR上第一个指令(前4字节)执行,CPU继续读取其他指令执行。2、NAND 启动, 片内4K RAM基地址为0,它会把NandFlash前面4K的内容拷贝到RAM中来,然后CPU从0地址取出第一条指令执行。总结:也就是我设为Nor启动的时候,我的NOR FLASH上面0地

2021-07-22 16:45:32 1351 4

原创 git命令汇总

git init初始化一个仓库,生成一个隐藏的.git文件夹git status查看文件状 — 可以通过【 git add +文件 】命令将文件设为就绪,就绪了文件会变绿,没有add的文件是红色的当前文件状态为untracked filed,如果对当前提交后在修改就是modified状态git add < filename >git add main.cgit add .(如果当前目录下修改的文件全部暂存到status中 )git commit -m

2021-07-13 16:16:50 563

原创 嵌入式笔试选择题总结

C++部分1、默认的无参构造函数#include <iostream>#include <string>#include <map>using namespace std;struct X{ X(){ cout << "A";} X(int x){ cout << x << "B";}};int main(){ X a(); X x(4); return 0;}

2021-07-02 20:21:14 511 2

原创 嵌入式面经问题总结

arm工作模式在特权模式下程序可以访问所有的系统资源。非特权模式和特权模式之间的区别在于有些操作只能在特权模式下才被允许,例如直接改变模式和中断使能等。而且为了保证数据安全,一般MMU会对地址空间进行划分,只有特权模式才能访问所有的地址空间。而用户模式如果需要访问硬件,必须切换到特权模式下,才允许访问硬件。用户模式user是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常

2021-07-02 17:14:37 1271 7

原创 嵌入式面试总结(持续更新)

1、 字符串数组打印(指针的步长)1.1 指针变量+1char *p = NULL;printf("%d\n",p); // 0printf("%d\n",p+1); // 1int *p2 = NULL;printf("%d\n",p2); // 0 printf("%d\n",p2+1); // 41.2 字符串数组的步长main() { char *str[]={"ab","cd","ef","gh","ij","kl"}; char *t; t=(str+4

2021-06-13 18:28:03 3726 11

原创 算法中数学相关知识-倍数、约数、完全数、质数、最小公倍数

1、倍数大数除以小数,能整除没有余数,那么,大数就是小数的倍数,小数就是大数的因数#include <iostream>using namespace std;int main(){ int a, b; cin >> a >> b; if (a % b == 0 || b % a == 0) cout << "是倍数" << endl; else cout <

2021-03-06 22:19:15 396

原创 三种形式全排列——指数型、排列型、组合型类型题目汇总

1、指数型指数型按照升序把所有中方案输出出来#include<bits/stdc++.h>using namespace std;#define N 20int n;int st[N];int a[N];void dfs(int u){ if( u == n+1 ) { for(int i = 1; i <=n; i++) //满足三个数的时候 { if(st[i]==1) //如果我们选了

2021-03-05 21:28:22 434

原创 C语言杂记

%p和%x的区别%p是打印地址(指针地址)的,是十六进制的形式,但是会全部打完,即有多少位打印多少位。32位编译器的指针变量为4个字节(32位),64位编译器的指针变量为8个字节(64位)。在32位编译器下,使用%p打印指针变量,则会显示32位的地址(16进制的);在64位编译器下,使用%p打印指针变量,则会显示64位的地址(16进制的),左边空缺的会补0。%x:无符号十六进制整数(字母小写,不像上面指针地址那样补零)%X:无符号十六进制整数(字母大写,不像上面指针那样补零)%x、%X和%p的相

2020-12-15 16:27:49 290

原创 typedef void (*T1)(T2)的含义

定义一个指向函数的指针T1,其返回值为void类型,函数的参数为后面的T2可以使用T1来定义这种指针变量T1 testfun1; //定义一个函数指针testfun1= ADD; //把函数名赋值给testfun1(*testfun1)(); //执行函数例子:通过定义一个返回值为void 函数的参数为int类型的函数指针TestFuntypedef void (*TestFun)(int);void ADD(int num){ printf("%d", nu

2020-10-09 11:00:05 197

原创 【剑指offer】面试题59-Ⅱ:队列的最大值

方法一:辅助队列和上一题的思路相同我们使用一个辅助的双向队列进行保存最大值对于他原来的数据插入以及弹出都保持不变但是我们需要对于有新的数据插入或者数据弹出的话需要使用一个队列保存我们的最大值插入得时候我们需要把新插入的数与队尾一个一个比较,如果大于队尾的话,则把所有在队列中小于新插入数的数全部弹出。最后把我们新插入的数插入进去弹出的时候我们需要因为是front,我们需要把原来队列的数据进行保存然后把原来的队列的队首进行pop然后判断我们的当前原来队列的对手和我们的最大值的队首是否.

2020-09-26 21:33:07 154

原创 【剑指offer】面试题59-Ⅰ:滑动窗口的最大值——经典单调队列问题

方法一:滑动窗口class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> result; if( nums.size() == 0 || k < 1 || nums.size() < k ) return result; i.

2020-09-25 17:22:30 102

原创 【剑指offer】面试题58-Ⅱ:左旋转字符串 ——C语言字符串的翻转

方法一: substr字符串分割从n开始的字符加上从0开始n位的字符相加。class Solution {public: string reverseLeftWords(string s, int n) { string str = s.substr(n) + s.substr( 0, n ) ; return str; }};方法二:三次翻转(原地操作)class Solution {public: string reverseL.

2020-09-21 22:34:58 161

原创 【剑指offer】面试题58-Ⅰ:翻转单词顺序

方法一:顺序处理字符串思路class Solution {public: string reverseWords(string s) { int i = 0; int n = s.size(); string temp,result; while( i < n ) { while( ( i < n ) && s[i] == ' ' ) .

2020-09-21 21:47:43 81

原创 【剑指offer】面试题57-Ⅱ:和为s的连续正数序列

方法一:双指针class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>> result; //连续的数那么中间的两个加起来要么等于target要么大于target 8-> 4 + 5 7 -> 3 + 4 int left = 1; .

2020-09-21 21:42:52 68

原创 【剑指offer】面试题57:和为s的两个数字

方法一:哈希表查找class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int> record; vector<int> result; for( int i = 0; i < nums.size(); i++ ) { .

2020-09-21 21:40:42 58

原创 【剑指offer】面试题56-Ⅱ:数组中数字出现的次数Ⅱ

方法一:位运算统计每一位出现的次数,时间复杂度O(n),空间复杂度只需要开辟32个空间大小的数组为O(1)哈希表需要空间O(n)我们把每一位的数值进行保存,把有三次出现的位数对3求余,去除掉次数为3的位,保留只出现一次的位class Solution {public: int singleNumber(vector<int>& nums) { int bits[32] = {0}; for( int i = 0; i < nums.

2020-09-20 16:53:41 72

原创 【剑指offer】面试题56-Ⅰ:数组中数字出现的次数Ⅰ

方法一:查表class Solution {public: vector<int> singleNumbers(vector<int>& nums) { map<int, int> record; vector<int> result; for(int i = 0; i < nums.size(); i++) { record[nums[i]]++

2020-09-19 21:04:14 68

原创 【剑指offer】面试题55 - Ⅰ/Ⅱ:二叉树的深度/平衡二叉树

剑指 Offer 55 - I. 二叉树的深度方法一:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: in

2020-09-19 11:19:07 69

原创 【剑指offer】面试题54:二叉搜索树的第k大节点

方法一:中序遍历+索引计数返回因为题目给定的二叉搜索树所以通过中序遍历就可以按照从大到小进行遍历但是需要先遍历右子树再遍历左子树/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} .

2020-09-18 16:45:13 77

原创 【剑指offer】面试题53-Ⅱ:0~n-1中缺失的数字——二分查找

方法一:二分查找法class Solution {public: int missingNumber(vector<int>& nums) { int left = 0; int right = nums.size() - 1; while( left <= right ) { int mid = left + ( right - left ) / 2; i

2020-09-18 15:31:36 113

原创 【剑指offer】面试题53-Ⅰ:在排序数组中查找数字1 —— 二分查找的三个模版

方法一:二分查找左右边界参考labuladong的二分查找的三个模版,进行查找target的左右边界。也可以找到最左边,然后线性找后面相同的数字,但是后面是O(n)的复杂度,如果后面都是相同的元素,就没有O(logn)快。参考链接:https://mp.weixin.qq.com/s/M1KfTfNlu4OCK8i9PSAmug左闭右开以及左闭右闭的代码:class Solution {public: int search(vector<int>& nums, i.

2020-09-17 09:48:15 101

原创 【剑指offer】面试题52:两个链表的第一个公共节点——栈、哈希表、双指针

方法一:哈希表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *hea

2020-09-15 21:56:40 118

原创 【剑指offer】面试题51:数组中的逆序对——归并排序

方法一:顺序遍历(超出时间)class Solution {public: int reversePairs(vector<int>& nums) { int result=0; for(int i = 0; i < nums.size(); i++) { for( int j = i+1 ; j < nums.size(); j++) {

2020-09-14 22:23:28 75

原创 【剑指offer】面试题50:第一个只出现一次的字符——哈希表查找

class Solution {public: char firstUniqChar(string s) { //unordered_map<char, int> freq; int freq[256]= {0}; for(char ele: s) freq[ele]++; for(char ele: s) if(freq[ele]== 1) .

2020-09-14 22:23:15 91

原创 【剑指offer】面试题49:丑数

方法一:顺序判断通过遍历从1开始的每个数字得到结果,算法效率不是很高class Solution {public: int nthUglyNumber(int n) { if( n <= 0 ) return 0; int index_number = 0; int Ugly_number = 0; while ( Ugly_number < n) { .

2020-09-14 21:34:20 65

原创 【剑指offer】面试题46:把数字翻译成字符串——动态规划

方法一:动态规划通过建立转移方程 f(i) = f(i-1) + g(i,i-1)*f(i-2)如果前两个数在10-25之间,则g(i,i-1)为1,否则为0class Solution {public: int translateNum(int num) { string nums = to_string(num); vector<int> dp( nums.size() + 1, 0); dp[0] = 1; .

2020-09-06 22:09:34 95

原创 【剑指offer】面试题45:把数组排成最小的数

1.高位的数字肯定是越小越好2.放数字的顺序肯定是先放第一位(最左边一位)最小的元素,如果第一位相等,比较第二位…,以此类推。3.我们如果把所有数字转换成字符串再排列4.对所有的字符串进行比较5.两个字符串s1,s2 如果 s1+ s2 > s2 + s1那么s1 > s2比如s1为3,s2为30,因为 s1+s2 = 330 ,s2+s1 = 303,所以s1 > s2我们因此可以自己定义字符串比较规则:static bool compare(string &s.

2020-09-06 11:50:34 93

原创 C/C++字符串操作总结

一、C语言中字符串操作1、c语言strcpy()用法strcpy,即string copy(字符串复制)的缩写。strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。这个函数包含在头文件 <string.h>中,C++中为< cstring >#include <iostream>#include <string>#include <cstr

2020-09-06 11:00:05 367

原创 【剑指offer】面试题42:连续子数组的最大和——附0x80000000与INT_MIN

方法一:暴力法(超时)class Solution {public: int maxSubArray(vector<int>& nums) { int n= nums.size(); int res=-1e8; for(int i=0;i<n;i++){ int sum=0; for(int j=i;j<n;j++).

2020-09-01 16:36:48 162

原创 【剑指offer】面试题41:数据流中的中位数——大、小堆实现

方法一:排序取中位数(超时)class MedianFinder {public: /** initialize your data structure here. */ vector<int> record; MedianFinder() { } void addNum(int num) { record.push_back(num); } double findMedian() { .

2020-08-31 21:25:11 131

原创 【剑指offer】面试题40:最小的k个数——附C++priority_queue使用方法实现大、小堆

方法一:排序选取K个数class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> result; if( k > arr.size() || k <= 0) return result; sort(arr.begin(),arr.end()); .

2020-08-31 08:42:38 171

原创 【剑指offer】面试题39:数组中出现次数超过一半的数字

方法二:通过索引记录——摩尔投票法通过记录一个次数times,如果当前数字和下一个数字结果不相等,则times–如果相同则times++最后的保存的结果就是超过一半的数class Solution {public: int majorityElement(vector<int>& nums) { if( nums.size() == 0 ) return 0; int result = nums

2020-08-28 10:50:37 81

《C++ 设计模式原理与实战大全》第四章的资源

《C++ 设计模式原理与实战大全》第四章1-10节视频的资源

2022-09-20

《C++ 设计模式原理与实战大全》第三章

《C++ 设计模式原理与实战大全》第三章视频资源

2022-09-20

《C++ 设计模式原理与实战大全》第二章

《C++ 设计模式原理与实战大全》第二章视频

2022-09-20

《C++ 设计模式原理与实战大全》第一章

《C++ 设计模式原理与实战大全》第一章的视频资源

2022-09-20

C语言实现的FFT运算(包括计算后信号的幅值,频率,matlab验证结果一样)

C语言实现的FFT运算(包括计算后信号的幅值,频率,matlab验证结果一样)

2021-04-14

NB-BC35+STM32F103C8T6-TCP.rar

STM32F103C8T6串口1接收数据,串口2用于与NB模块BC35交互发送AT指令,实现TCP发送至云服务器

2020-08-02

右键添加markdown文件的注册表文件

用Typora来写markdown文档 所以想要在右键菜单加个快捷键。 直接双击加载注册表,右键直接添加markdown文件的注册表文件,win10下右键点新建里面就有markdown文件。

2020-07-21

空空如也

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

TA关注的人

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