自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Woods的博客

嵌入式小白Woods的学习之路

  • 博客(52)
  • 资源 (17)
  • 收藏
  • 关注

原创 ARM常用汇编指令讲解

指令名称作用EQU给数字常量取一个符号名,相当于C语言中的defineAREA汇编一个新的代码段或者数据段SPACE分配内存空间PRESERVE8当前文件栈需按照8字节对齐EXPORTDCD以字为单位分配内存,要求4字节对齐,并要求初始化这些内存PROC定义子程序,与ENDP成对使用,表示子程序结束WEAK弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号, 如果外部文件没有定义也不出错。要注意的是:这个不是ARM的...

2022-05-08 15:27:01 912

原创 超好用的代码格式化工具Astyle使用

一、使用流程1.安装软件linux:apt install astyle,重启vscodewindows:下载最新版本,并将exe路径添加至PATH,重启vscode2.安装vscode插件Astyle3.配置使用:设置->拓展->Astyle->在settings.json中编辑(后附具体配置)配置示意图"astyle.additional_languages": [ "c", "cpp", ], "a

2021-05-09 10:54:32 4287 4

原创 STM32F4 GPIO输入输出模式

本文主要参看STM32F407ZGT6相关开发手册stm32f4系列单片机7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口 通常称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。stm32GPIO共有8钟输入输出模式,其中输入模式4种,输出模式4种。1、4种输入模式(1)GPIO_Mode_IN_FLOATING 浮空输入(2)GPIO_Mode_IPU 上拉输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mo

2021-03-28 21:59:05 3918 2

原创 Cortex-A 架构

1.Cortex-A 处理器运行模型 除了 User(USR)用户模式以外,其它 8 种运行模式都是特权模式。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些资源是受限的,要想访问这些受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。当中断或者异常发生以后,处理器就会进入到

2020-12-29 17:07:23 1948 2

原创 Ubuntu安装gcc-7.5.0

升级本地gcc版本所需安装包详情如下:gcc-7.5.0.tar.gzgmp-6.1.0.tar.bz2mpc-1.0.3.tar.gzmpfr-3.1.4.tar.bz2isl-0.16.1.tar.bz2具体安装命令如下:#将gcc安装包上传到Linux环境下,解压缩处理tar -xvf gcc-7.5.0.tar.gzcd gcc-7.5.0 #将其他包解压到该目录下#下面这一步大部分国内用户都会失败,由于网络等问题,所需的资源包下载不了,下面的命令本质上来说做的操作就是下载所需的

2020-12-08 14:30:08 2650

原创 机器人通用底盘stm32源码

先放张图和链接 后续补充教程

2020-11-28 17:57:03 797

原创 Python3 运算符(三)

Python语言支持以下类型的运算符:算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符Python算术运算符#!/usr/bin/python3a = 21b = 10c = 0c = a + bprint ("1 - c 的值为:", c)c = a - bprint ("2 - c 的值为:", c)c = a * bprint ("3 - c 的值为:", c)c = a / bprint ("4 - c 的值为:",

2020-11-17 21:18:50 140 1

原创 Python3 基本数据类型(二)

变量赋值Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。等号(=)用来给变量赋值。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。例如:#!/usr/bin/python3counter = 100 # 整型变量miles = 1000.0 # 浮点型变量name = "nowcoder

2020-11-16 19:00:26 104

原创 《我曾七次鄙视自己的灵魂》

——————————————————————————————————第一次,当它本可进取时,却故作谦卑;第二次,当它在空虚时,用爱欲来填充;第三次,在困难和容易之间,它选择了容易;第四次,它犯了错,却借由别人也会犯错来宽慰自己;第五次,它自由软弱,却把它认为是生命的坚韧;第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。——————————————————————————————————最近有点颓废,感觉学习没那么顺利,工

2020-11-14 18:32:10 391

原创 C++_vector操作

1.vector1.1 vector 说明向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。进行vector操作前应添加头文件#include <vector>1.2 容器特性1.顺序序列顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。2.动态数组支持对序列中的任意元素进行快速直接访问,甚

2020-10-25 23:50:58 113

原创 每日一题20201015-链表、指针、结构体

两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://le

2020-10-15 18:50:03 122

原创 C/C++ 变量指针的强制类型转换

最近接触项目,遇到了一个char型数组的类型转换问题,需求为变为uint8_t。 在函数调用中,由于取char型数组的首地址,则设定了实参const char * bufData ,但是在函数定义中,使用到的为uint_8t * bufData的形参。 由于buff中的数值在传过来后并不是char型数组,所以在代入CRC校验后,计算出错。uint16_t factory_crc16 ( uint8_t *bufData, uint16_t buflen){ uint16_t ...

2020-10-11 18:48:21 1982

转载 ROS技术点滴 —— action通信

ROS中常用的通信机制是话题(Topic)和服务(Service),但是在很多场景下,这两种通信机制往往满足不了所有需求。比如机械臂控制,如果用话题发布运动目标,由于话题是单向通信,那就需要另外订阅一个话题,来获得机器人运动过程中的状态反馈。如果用服务发布运动目标,虽然可以获得一次反馈信息,但是对于控制来讲数据太少,而且如果反馈迟迟没有收到,也只能傻傻等待,干不了其他事情。简单来讲就是控制方发送一次命令,之后接收方在一段时间内反馈自己的信息。那么有没有一种更加适合的通信机制,来满足类似这样场景的需求呢?

2020-10-01 12:56:55 434

原创 使用Ubuntu读取USB手柄/方向盘的输出控制

摘要:最近从淘宝购买了某通多模版蓝牙5.0的游戏手柄,使用官方的接收器,好用的不得了。实测无遮挡情况下距离40m,有遮挡情况下10m左右,顺便总结下测试方法。1.cat命令cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名,如cat linuxyw.txtoptions:-b:–number-nonblank 对非空输出行编号,即在每行前显示所在行号-n:–number 对输出的所有行编号,即在每行前显示所在行号2.hexdump命令hex

2020-09-25 18:13:17 1145

原创 C语言 volatile关键字的使用

volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。作用简单地说就是防止编译器对代码进行优化。比如如下程序:a=1;a=2;a=3;对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器

2020-09-23 13:49:57 215

原创 ROS基本数据类型

std_msgsBoolByteByteMultiArrayCharColorRGBA # float32r float32g float32b ...

2020-09-16 15:10:21 2686

原创 ROS navigation 包学习

navigation架构:机器人只需要发布必要的传感器信息和导航的目标位置,ROS即可完成导航功能。在该框架中,move_base功能包提供导航的主要运行、交互接口。为了保障导航路径的准确性,机器人还要对自己所处的位置进行精确定位,这部分功能由amcl功能包实现。首先,导航功能包需要采集机器人的传感器信息,以达到实时避障的效果。这就要求机器人通过ROS发布sensor_msgs/LaserScan或者sensor_msgs/PointCloud格式的消息,也就是二维激光信息或者三维点云信息。其次,

2020-09-10 10:46:09 2017

原创 ROS tf学习与使用

从ROS Hydro开始,tf迭代为tf2。官方介绍:tf是一个允许用户随时跟踪多个坐标系的功能包。tf维护实时缓冲的树结构中的坐标帧之间的关系,并允许用户在任意两个坐标帧之间任意时间点上转换点、向量等。基本操作tf_monitor:将当前坐标转换树中所有坐标系的发布状态打印出来rosrun tf tf_monitorrosrun tf tf_monitor /odom /base_footprinttf_echo <source_frame> <target_

2020-09-09 10:51:25 664

原创 Ubuntu自定义系统镜像的制作与安装

Systemback 简介Systemback的界面很小巧,但是功能却非常强大。Systemback并不仅仅是一个快照工具。它还可以选择将包含用户数据的系统转变为一张live CD或DVD,这样就可以直接在另一台电脑上启动了。它可以修复或重装GRUB 2启动器以及修复fstab文件,当然Systemback的主要用途还是用于系统快照。Systemback将快照的总数量限制在10个以内。用户拥有删除快照的权限。快照的功能可以选择为递增,也就是只复制被改变过的文件,而将其他的文件以硬链接的形式保存。Syst

2020-08-29 17:17:28 3104 2

原创 C语言宏技巧

宏打印函数在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。这时候我们可以使用宏定义来封装一个宏打印函数,这个宏打印函数可以显示打印信息所在的文件、行数、函数名等信息。如:#define DBG_PRINTF(fmt, args...) \do\{\ printf("<<File:%s Line:%d Functi

2020-08-27 16:33:37 212

原创 Nand与 EMMC知识

NandNand是一种flash,所以又叫NandFlash。大家知道Flash叫闪存(flash这个英语单词就有闪烁的意思),闪存这种存储设备是用电信号来做擦除和读写的。也就是说你可以把Flash看成是一个二进制数据仓库,你可以用电信号擦除它(清除掉仓库里的存货),也可以用电信号读取它(将仓库内存储的物品取出),也可以用电信号写入它(将物品放入仓库储存)。好,问题来了,怎么去擦除、读写呢?这东西又听不懂人话,所以必须按照它的时序规则用电平信号和他交互。上图中是一个NandFlash实物图,大家可

2020-08-27 14:35:09 2467

原创 机器人通用底盘通讯协议(串口通讯、can口通讯)stm32源码,ROS源码

经过了半个月的编排,终于码好了机器人的通用底盘协议,后面会跟上ROS源码。文档的下载地址

2020-08-25 17:03:45 2107 2

原创 基于滑模控制的反步控制器设计

先放个demo链接,正文后续补充程序GITHUB地址

2020-08-24 15:04:01 2232 2

转载 git for windows ssh-keygen 生成public key的默认目录为C:\SPB_Data是什么原因?

如题是什么原因呢,原来是cadence安装的时候,自动添加了一个用户环境变量HOME=C:\SPB_Data,结果在git里面使用ssh-keygen生成private和publickey的时候,默认会使用到HOME环境变量,这里路径就不对,后面gitclone代码的时候,也是提示权限不足(因为找不到对应的private key)。解决方法,就是暂时先删掉HOME环境变量。一般人不会遇到这个问题原因很简单,用git的人,多数都是做软件的,根本不会用到cadence,或者不知道cad

2020-08-21 15:26:24 678

原创 vmware 挂起后不能恢复

报错:未能锁定主内存文件XXXX,还原虚拟机状态时出错虚拟机目录下有一个文件夹,XXX.vmem.lck,里面的lck文件是很久以前的,把它删掉重新恢复就可以了。XXX注意查看.lck文件修改时间。

2020-08-21 13:48:16 791

原创 C/C++ 如何获取系统时间

void gettime() { time_t rawtime; struct tm *ptminfo; time(&rawtime); ptminfo = localtime(&rawtime); printf("current: %02d-%02d-%02d %02d:%02d:%02d\n", ptminfo->tm_year + 1900, ptminfo->tm...

2020-08-21 13:45:47 917

原创 C++ explicit关键字学习

在C++中,我们有时可以将构造函数用作自动类型转换函数。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { publi

2020-08-19 22:17:52 97

原创 ROS电池信息

sensor_msgs/BatteryState Message## Power supply status constants 充电状态uint8 POWER_SUPPLY_STATUS_UNKNOWN = 0 #未知uint8 POWER_SUPPLY_STATUS_CHARGING = 1 #充电中uint8 POWER_SUPPLY_STATUS_DISCHARGING = 2 #放电中uint8 POWER_SUPPLY_STATUS_NOT_CHARGING = 3 #没有充电uin

2020-08-17 11:30:41 2115

原创 MATLAB中simulink的S-function使用指南

重要且全面的学习资料在matlab命令行中输入 edit sfuntmpl ,可以打开S-function的模板,里面对S-function的函数和变量作用均作了介绍。 S-function的基础是现代控制理论的状态定义,使用S-function需具备现代控制理论的基本知识为什么要有S-function因为matlab中的模块太过标准化,无法满足多变的应用和调试需求,在以下情况下,S-function可以很方便的对系统进行建模。控制或受控系统具有复杂时变特性控制系统在控制过程中自我迭代,存在需要

2020-07-23 22:54:29 5729

转载 C++11—lambda函数

lambda表达式语法lambda表达式的语法定义如下:[capture](parameters)mutable ->return-type { statement };(1)[capture]: 捕捉列表。捕捉列表总是出现在lambda函数的开始处。实质上,[]是lambda引出符(即独特的标志符)编译器根据该引出符判断接下来的代码是否是lambda函数捕捉列表能够捕捉上下文中的变量以供lambda函数使用捕捉列表由一个或多个捕捉项组成,并以逗号分隔,捕捉列表一般有以下几种形式:&lt

2020-07-23 21:51:40 451

原创 WS2811B驱动使用及使用说明

WS2811 使用时需要注意的东西:1.发送0 1时的高低点平时间,建议使用逻辑分析仪或示波器进行波形查看,精准时间大小。2.WS281特性为发送数据后保存数据信息,若灯不更换其他颜色,请勿输入数据。3.注意代码使用过程的规范。精准定位问题出现原因此处只给出了WS2811的驱动代码。整个工程请转至我的个人github:https://github.com/lengmudemao/WS2811WS2811.h#ifndef _WS2811_H#define _WS2811_H#inclu

2020-07-15 17:52:09 9445

原创 C语言的函数指针

函数指针函数指针是专门用来存放函数地址的指针。函数地址是一个函数的入口地址,函数名代表了函数的入口地址。当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,可以将函数作为参数传递给函数指针。函数指针变量说明的一般形式如下:<数据类型>(*<函数指针名称>)(<参数说明列表>);其中,<数据类型>是函数指针所指向的函数的返回值类型;<函数指针名称>符合标识符命名规则;<参数说明列表>应该与函数指针所指向的函数的形参说明保持一致;(*&l

2020-07-13 00:22:40 232 1

原创 C++ 字符型常量

用一对单引号括起来的一个或多个字符称为字符型常量,如’A’、‘AA’、’\n’和’5’等,其中’A’、’?'和’5’称为单字符常量,‘AA’称为双字符常量,’\n’称为转义字符序列。由以下代码可以看出,对双字符常量来说,系统将其解释为一个int类型的数据,前面的字符作为低位字节,后面的字符作为高位字节,这种方式仅适用于可显示字符。#include <iostream>using namespace std ;int main(int argc, const char** argv) {

2020-07-12 23:12:05 6113 1

原创 dpkg命令制作deb包

deb包的文件结构:deb包里面的结构:DEBIAN目录 和 软件具体安装目录(模拟安装目录)(如etc, usr, opt, tmp等)。在DEBIAN目录中至少有control文件,还可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和conffiles等。 control文件:描述软件包的名称(Pac

2020-07-02 18:09:47 1264 1

原创 VMware ubuntu压缩虚拟磁盘

1 背景很多情况下,虚拟机的虚拟磁盘不会自动回收,及时虚拟机磁盘中并没有存储很多内容,这样很占物理存储空间,给虚拟机的转移也带来不便。很多时候使用VMware带的磁盘压缩并不能达到很好的效果。本文就介绍一种使用VMware-tools来压缩虚拟磁盘空间。2 压缩方法1 安装vmware tool sudo apt-get install open-vm-tools2 开始压缩 sudo vmware-toolbox-cmd disk shrink /使用该方法压缩,将原来240G的虚拟磁

2020-07-02 11:40:54 796 2

原创 Linux串口信息查询

1、查看串口是否可用可以对串口发送数据比如对com1口,echo /dev/ttyS02、查看串口名称使用ls -l /dev/ttyS*一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS*,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;3、查看串口驱动cat/proc/tty/drivers/serial4、查看串口设备dmesg | grep ttyS*5、查一下板子上的串口有没有设备grep tty/proc/devi

2020-07-01 22:42:57 8997 2

转载 Cartesian 坐标系与Frenet坐标系的转换

前言在机器人或者无人车规划的时候,通常需要引入Frenet坐标系.这篇文章主要介绍了笛卡尔坐标系和Frenet坐标系之间的转换.什么是Frenet坐标系Frenet坐标系是一种以比传统x,y笛卡尔坐标更直观的方式表示道路位置的方式。用Frenet坐标,我们使用变量 s和d描述车辆在道路上的位置。该s坐标表示沿道路的距离(也称为纵向位移)和d坐标表示道路上的左右位置(也称为横向位移)。由于通常道路都是曲折的,这样的话用笛卡尔坐标系描述道路会非常复杂,但是如果采用Frenet坐标系,则会非常直观和简单.

2020-06-30 11:11:07 6023 1

原创 路径跟踪算法学习及总结

路径跟踪算法学习及总结1.Stanley method 前轴控制2.Pure pursuit(纯跟踪)自行车模型 其中 δ 表示前轮的转角,L 为轴距(Wheelbase),R则为在给定的转向角下后轴遵循着的圆的半径。这个公式能够在较低速度的场景下对车辆运动做估计。从自行车模型出发,纯跟踪算法以车后轴为切点, 车辆纵向车身为切线, 通过控制前轮转角,使车辆可以沿着一条经过目标路点(goal point)的圆弧行驶,如下图所示图中 (gx, gy)是我们下一个要追踪的路点,它位于我们已经

2020-06-29 22:11:34 10141 2

原创 ROS-节点参数param

ROS中有如下3种获取参数的方式。`include “ros/ros.h”#include using namespace std;int main(int argc,char** argv){//initial and name noderos::init(argc,argv,“node_param”);if(argc!=2){cout<<“Error command paramter! Please run command eg:\n”\<<“rosrun

2020-06-29 17:03:32 1530

原创 Python3 基础语法学习(一)

注释Python中单行注释以 # 开头多行注释可以用多个 # 号,还有 ‘’’ 和 “”"行与缩进python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。可以使用反斜杠()来实现多行语句数字(Number)类型python中数字有四种类型:整数 int 、布尔型 bool、浮点数 float和复数 complex字符串(String)python中单引号和双引号使用完全相同2.使用三引号

2020-06-16 16:27:54 298

gcc-7.5.0安装完整依赖.rar

GCC-7.5.0安装完整依赖

2020-12-08

V0.2 版机器人通用底盘协议

移动机器人通用底盘协议 包括常见的串口通讯及CAN通讯,可实现对小车或机器人底盘运动进行控制

2020-11-02

机器人通用底盘协议.pdf

本协议适用于机器人底盘及小型车规级底盘开发,采用串口通讯方式,对各个外设进行控制或数据获取。

2020-08-25

Git-2.27.0-64-bit.rar

git最新版本,方便大家快速下载。

2020-07-20

具有适应性移动服务机器人的强化学习的任务运动计划.pdf

具有适应性移动服务机器人的强化学习的任务运动计划

2020-06-18

MS41908M.pdf

步进电机驱动芯片 ms41908.

2020-03-13

非线性光纤光学第三章-群速度色散.ppt

非线性光学 群速度色散

2020-03-13

非线性光纤光学 第五章-光孤子.ppt

非线性光纤光学

2020-03-13

非线性光纤光学第六章-偏振效应.ppt

非线性光纤

2020-03-13

2-6光纤的非线性光学效应.ppt

非线性光纤

2020-03-13

非线性光纤光学第十章-四波混频.ppt

四波混频

2020-03-13

非线性光纤光学 第八章-受激喇曼散射.ppt

非线性光纤光学 第八章-受激喇曼散射

2020-03-13

非线性光纤光学第九章-受激布里渊散射.ppt

非线性光纤光学第九章-受激布里渊散射

2020-03-13

6657开发文档.zip

TI TMS320C6657的开发技术文档 希望可以帮到大家

2019-09-22

SDK_C6657.zip

TI 6657的源码。

2019-08-09

深入浅出MFC

深入浅出学习MFC。希望大家能够好好学习。

2019-02-19

Borland C++ Builder 6 应用开发技术解析

C++ Builder 6的应用开发技术解析。

2019-02-18

空空如也

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

TA关注的人

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