自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Engineering Lion的博客

学生 linux后端 c++ 嵌入式

  • 博客(33)
  • 收藏
  • 关注

原创 配置WSL2+ROS 环境

【代码】配置WSL2+ROS 环境。

2023-07-23 19:21:28 321

原创 剑指offer08二叉树的下一个节点.

剑指offer08二叉树的下一个节点./*方法:看当前节点是否有右孩子 * 有:下一个节点就是右孩子的最左节点 * 无:当前节点是否有父节点 * 是:是不是父节点的右孩子: * 是:指针变换,往上追溯 * 否:父节点就是下一个节点 * 否:回复NULL *///代码进行了整合,但是思路就是这个class Solution {public: TreeNode* inorderSuccessor(TreeNode*

2022-05-01 12:02:00 506

原创 vim自动缩进

vim自动缩进gg = G

2021-09-25 16:13:54 137

原创 大端小端,LSB和MSB

在verilog中碰到了lsb和msb,所以做一下解释:lsb 就是最低位有效,类似于wire [0:31]这样的顺序。msb 就是最高位有效,类似于wire [31:0]这样的顺序。还有计算机中还有大端小端的概念一块解释一下:举例:0X1234放入0X00和0x01俩个地址中。大端:就是低数据位放高地址位。小端:就是低数据位放低地址位。上面的例子:大端: 0x00(0x12),0x01(0x34);小端: 0x00(0x34),0x01(0x12);...

2021-09-03 10:15:47 1620

原创 HDLBits:Dualedge双边沿触发

verilog无法实现双边沿触发只能单边沿触发,所以我们要实现双边沿触发的方法如下: reg temp,temp1; always @(posedge clk) begin temp <= d ^ temp1; end always @(negedge clk) begin temp1 <= d ^ temp; end assign q = temp ^ temp1;原理如下:// After posedge

2021-09-02 19:28:55 899

原创 解决网站无法选择文字的办法

解决网站无法选择文字的方法。f12->进入控制台,输入下面一行代码回车即可。var eles = document.getElementsByTagName('*');for (var i = 0; i < eles.length; i++) { eles[i].style.userSelect = 'text';}

2021-08-26 18:20:38 939

原创 讲的很好的D触发器

迄今为止讲的最好的D触发器转载自www.runoob.comhttps://www.runoob.com/w3cnote/verilog2-gate-delay.htmlD 触发器下面从门级建模的角度,对 D 触发器进行设计。SR 触发器SR 触发器结构图及真值表如下所示。1、当 S 为低电平,G1 输出端 Q 为高电平,并反馈到 G2 输入端。如果此时 R 为高电平,则 G2 输出端 Q’ 为低电平。2、R 为低电平 S 为高电平时,分析同理。3、S 与 R 均为高电平时,如果 Q

2021-08-24 13:47:38 17869 5

原创 (九)git及github的使用

摘要:本节介绍git的使用和github的使用。文章目录一、配置git步骤一 全局配置步骤二 新建本地git库步骤三 为git库添加文件二、git版本回退步骤一 查看commit号步骤二 版本回退查看历史的commit号修改最后一次提交三、github的使用HTTP的操作SSH的操作四、分支相关命令五、冲突的解决六、忽略文件一、配置git步骤一 全局配置用于区分修改和提交的用户。git config --global user.name "用户名"git config --global use

2021-05-10 14:51:57 82

原创 leetcode---(7).整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。示例 1:输入:x = 123输出:321class Solution {public: int reverse(int x) { if (x > 2147483647 || x < -2147483647) { return 0; .

2021-04-11 22:30:01 64

原创 leetcode---(6).Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"class Solution {public: string convert(string s, int numRows) {

2021-04-11 19:55:33 73

原创 leetcode---(5).最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串示例:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案输入:s = "cbbd"输出:"bb"看到题目的第一个想法就是用栈来实现。但是栈碰上奇数个的时候,怎么解决该不该弹出。还有栈什么时候弹出。比如abbabba。想了一阵没有解决的办法。只好蛮力法,俩个指针输出所有的(比现在最长回文串还长的)串,再调用判断是不是回文。如果是回文,就记录下最大那个。时间复杂度太高了O(n3)。(0).蛮力法//蛮力法:输出

2021-04-10 11:33:38 54

原创 leetcode---(3). 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3class Solution {public: int lengthOfLongestSubstring(string s) { if(!s.size()) //判断是否是空的字符串 return 0; map<char,int

2021-04-09 22:45:45 52

原创 leetcode---(14). 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例:输入:strs = ["flower","flow","flight"]输出:"fl"class Solution {public: string longestCommonPrefix(vector<string>& strs) { if(strs.empty() ) return ""; vector<stri

2021-04-07 16:19:31 67

原创 leetcode---(2). 两数相加

题目:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807./** * Definition for singly-linked list. * struct ListNode { * int

2021-04-06 21:58:26 48

原创 leetcode---(1). 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> v; for(v

2021-04-05 21:24:58 56

原创 (十)arm裸机开发---UART串口通信实验

串口是很常用的通信接口,本节我们就介绍串口。虽然板子上的串口是通过CH340转为usb接口了,但是本质是一样的。文章目录一、UART的寄存器配置1.设置UART的时钟2.UART的重要的寄存器二、程序编写一、UART的寄存器配置1.设置UART的时钟CSCDR1[6] = 0。选择UART的时钟。CSCDR1[5:0] = 0 设置一分频。2.UART的重要的寄存器UART1_URXD[7:0]:读到的串口数据就放在这个寄存器中。UART1_UTXD[7:0]:要写的串口数据就放在这个寄存

2021-03-25 23:52:55 530

原创 (九)arm裸机开发---高精度延时实验

本节介绍另外一个定时器,GPT定时器。目录一、GPT定时器总结一、GPT定时器    GPT(General Purpose Timer)定时器和EPIT相比,GTP功能更加强大,有俩个捕获通道,三个输出比较通道,可以生成捕获中断,比较中断,和溢出中断。GTP有俩种运行模式:1.restart模式。2.free-run模式。总结提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。.

2021-03-25 19:11:42 598

原创 (八)arm裸机开发---定时器实现按键消抖

    本节使用定时器实现按键的消抖,之前一直使用的是空指令实现定时函数。空指令非常浪费CPU的性能,远不如使用定时器。最终实现的效果还是按下key就打开蜂鸣器,再按一下就关闭蜂鸣器。    可以看作是前面几节内容的一个合并。定时器实现消抖#include "bsp_key_filter.h"/*初始化外部中断,也就是GPIO1_IO18*/void key_filter_init(){ /*gpio初始化*/ _gpio_pin_config_t key_config;

2021-03-24 15:06:28 263

原创 (七)arm裸机开发---EPIT定时器实验

本节主要介绍EPIT定时器,目录一、EPIT定时器总结一、EPIT定时器提示:以下是本篇文章正文内容,下面案例可供参考      EPIT定时器(Enhanced Periodic Interrupt Timer)是增强型周期中断定时器,只有周期性定时的功能。EPIT 定时器有两种工作模式: set-and-forget 和 free-running。set-and-forget 模式:EPITx_CR(RLD )=1,计数器加载EPITx_LR中的值,计数到0再次加载EPITx_LR中的值。f

2021-03-24 12:08:43 203

原创 (六)arm裸机开发---GPIO按键中断

本节介绍GPIO中断实验,主要介绍中断向量表,中断控制器,通用的中断服务函数。从中断向量表开始一步一步往下编写程序,最后实现按键输入中断,中断响应是蜂鸣器响。本节的重点在于通用的中断函数的编写,和通用的GPIO的编写。目录一.概念1.中断向量表2.中断向量表偏移3.通用中断控制器(GIC)4.CP15协处理器4.1 读取C04.2 设置C14.3 设置C12为VBAR4.4 C15获取GIC基地址5. 中断使能6. 中断优先级7.中断处理函数二、实现中断1.中断向量表的实现2.通用中断向量函数的实现3.通

2021-03-22 21:10:53 335

原创 (五)arm裸机开发---主频和时钟配置

本节主要涉及imx6ull的时钟配置,包括arm内核时钟配置,外设时钟配置,以及imx6ull的时钟树设置。主要参考的是imx6ull的Reference(《IMX6ULL 参考手册》)。目录一、时钟树1.配置主时钟2.配置其他PLL和PFD一、时钟树      imxull的时钟来源于俩部分,一部分是实时时钟,32.768MHZ,用于提供RTC的时钟。另一部分是24MHZ的晶振,用于提供内核以及其他外设的时钟。我们的时钟树就是从24M时钟经过倍频,分频得来的,共有7路PLL。      具体的时钟

2021-03-19 14:44:38 405

原创 (四)arm裸机开发--- KEY按键输入,控制蜂鸣器

前面章节我们只介绍了GPIO的输出功能,这一节我们介绍输入功能,通过KEY按键的输入控制蜂鸣器响。目录一.硬件原理图二.配置GPIO三.编写代码总结一.硬件原理图可以看到只有key0贴片了,管脚为UART1_CTS。当没有按下时,管脚状态为高,按下时,管脚状态为低。二.配置GPIO下面的数据都是通过芯片手册查到的。1.配置时钟。为了方便起见,我们将所有的时钟全部打开。2.配置复用功能,IOMUXC_SW_MUX_CTL_PAD_UART1_CTS_B寄存器设置为0x5,即标准IO GPIO

2021-03-15 10:29:01 821

原创 (三)arm裸机开发---(外设数据化)led驱动程序

什么叫做外设数据化呢?在我们这里,外设数据化就是将寄存器地址用结构体来表示。现在不懂没关系我们会有实例。目录一.外设数据化实例二.使用外设数据化表优化led驱动程序总结一.外设数据化实例我们在前面的章节中用到了很多的寄存器都是直接定义宏。很麻烦,每次都要自己定义每个寄存器地址。NXP提供了外设数据化表,我们先自己写一个外设数据化实例,然后就明白了这个表怎么用了。#ifndef IMX6ULL_h/*设置CCM基址*/#define CCM_base 0x020C4068/*定义CCM_typ

2021-03-13 20:58:43 134

原创 (二)arm裸机开发---c语言led驱动程序

上一节,我们提到了为什么使用汇编来写点亮led的驱动程序。因为没有c语言的运行环境,本节我们就来配置c语言的运行环境,毕竟c语言看起来还是舒服的。具体的寄存器地址和值请见上一节。目录一.配置C语言的运行环境1.处理器模式的选择2.堆栈指针(sp)的设置3.编写汇编程序二.编写c语言led驱动程序1.main.h2.main.c3.Makefile总结一.配置C语言的运行环境C语言的运行环境包括:1.处理器模式的选择2.堆栈指针(sp)的设置3.转到C语言的入口程序main1.处理器模式的选择

2021-03-12 18:07:02 389

原创 (一)arm裸机开发---汇编led驱动程序

学习新的系列,arm裸机开发。主芯片使用的是imx.6ull芯片,平台使用的是正点原子的imx.6ull alpha开发板。本节介绍汇编led驱动的开发过程。为什么我们要用汇编来写led程序呢?因为cortex-a芯片上电之后sp指针(堆栈指针)没有初始化,没有c语言运行的环境。所以必须先用汇编语言初始化sp指针,ddr等,把c语言运行环境搭好。目录一.硬件原理图二.初始化流程1.使能GPIO1_3的时钟2.设置GPIO的复用功能为IO3.设置GPIO的电器属性4.设置GPIO的输入输出三.编写驱动程

2021-03-09 22:30:44 407

原创 (八)shell脚本入门

本文只介绍简单的shell脚本编程,包含变量,输入,输出,判断,函数,循环。详细参考:shell教程1、变量,输入,输出,条件判断shell脚本就是一种shell解释执行的程序,相当于windows的批处理器。简单的例子:#!/bin/bash##输入read -p "input your long and wide:" long wide##计算girth=$(($long+$wide+$long+$wide))##输出echo "girth=$girth"##条件判断if [

2021-03-06 17:19:37 79

原创 (七)学会编写一个简单的makefile

tip:当工程大时,每次编译一次,只通过gcc命令一步一步来编译,太复杂,所以我们就需要编写makefile。makefile就相当于我们把编译时的命令写成文件。目录1.makefile的基础2.最简单的makefile3.稍好一点的makefile4.再稍好一点的makefile5.再再稍好一点的makefile6.最后介绍makefile的俩个函数1.makefile的基础(1)命名规则:makefile 或者Makefile(2)makefile规则三要素:目标,依赖,命令2.最简单的ma

2021-03-01 21:56:03 159

原创 (六)gdb调试

本节是前面章节的延续,主要介绍gdb调试的命令。目录一、gdb调试前的准备工作二、gdb调试命令一、gdb调试前的准备工作需要编译的时候,加参数g,生成带调试信息的可执行文件,用于以后的gdb调试。例:gcc -g hello.c -o hello二、gdb调试命令功能命令启动gdbgdb hello查看文件listl查看sort.c第20行l sort.c:20查看sort.c中的sort函数l sort.c:sort第22行打断点(br

2021-03-01 20:54:55 151 1

原创 (五)gcc编译器 2.静态库和动态库的制作

内容摘要:      本节主要介绍静态库和动态库的制作和使用,以及比较静态库和动态库的优缺点文章目录一、静态库的制作与使用制作步骤:静态库的使用:静态库的优缺点二、动态库的制作与使用制作步骤:动态库的使用:动态库的优缺点三、指定共享库的位置一、静态库的制作与使用      静态库在linux中是以.a结尾的文件。静态库是在编译过程中链接时生成可执行文件时使用的。静态库的命名规则

2021-02-28 22:57:17 105

原创 (四)gcc编译器 1.编译与链接

学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 搭建 Java 开发环境2、 掌握 Java 基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇

2021-02-18 11:53:11 124

原创 (一)linux基本命令

提示:最近在学习linux基本命令,学了忘是常态。写个文章,学而时习之。文章目录一.linux基本快捷键二、使用步骤1.引入库2.读入数据总结一.linux基本快捷键 上下左右快捷键。 ctrl + p(previous)(上) ctrl + n(next)(下) ctrl + b(back)(左) ctrl + b(back)(右) ctrl + b(back)(右)# 二、示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.

2021-02-05 11:00:54 197 1

原创 (二)Linux NFS 服务器搭建

#NFS 服务器搭建背景:最近学习linux,想要搭建一个网络共享文件NFS Server一、安装nfssudo apt-get install nfs-kernel-server二、创建共享目录mkdir NfsShare##因为要创建的权限是读写权限。chmod 777 NfsShare三、修改配置文件sudo vi /etc/exports在配置文件结尾添加:#共享的目录 ip网段(权限rw/ro,非缓存模式)/home/luffy/NfsShare 192.168.1

2020-12-27 20:40:55 123

原创 (三)linux ftp服务器搭建 vsftpd

使用vsftpd搭建ftp服务器。1.安装vsftpdsudo apt-get install vsftpd2.修改配置文件cd sudo vi /etc/vsftpd.conflisten=YES#匿名用户登录允许打开anonymous_enable=YESlocal_enable=YES#打开写权限write_enable=YESlocal_umask=022#匿名用户上传权限打开anon_upload_enable=YES#匿名用户创建目录权限打开anon_mkdir

2020-12-27 16:54:45 74

空空如也

空空如也

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

TA关注的人

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