自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

uav360

uav360的博客

  • 博客(50)
  • 资源 (6)
  • 收藏
  • 关注

原创 C++历史参考

C++历史参考

2022-10-29 17:09:40 167 1

原创 C语言历史参考

C语言的历史

2022-10-29 16:34:51 211

转载 Typora+PicGO+Gitee图床配置

Typora+PicGO+Gitee图床配置我们在写markdown文档的时候,如果说写的文档有插入图片的话,图片管理起来非常的麻烦,而且移动或复制文档到其他设备时必须把图片的文件夹也一起复制。图片在markdown文档中就是一个链接,这个链接可以是本地的文件路径也可以是网络路径(url)。所以我们可以把图片放到网络上集中管理(这个就叫着图床),写文档的时候插入图片只要插入相应图片的url就可以了,在其他设备查看文档只要有网络就可以加载图片。下面我们使用Typora写Markdown文档,用PicGo上

2021-09-05 14:25:56 232

转载 12.Ubuntu下开发STM32--HardFault,div0

看了creep发的一篇帖子https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=602444&highlight=hardfault,讲解的是如何找出程序中的HardFault。creep的帖子中提到了一个老外的链接http://blog.feabhas.com/2013/02/developing-a-generic-hard-fault-handler-for-arm-cortex-m3cortex-m4/,

2021-06-19 18:46:47 269

转载 11.Ubuntu下开发STM32--使用malloc

Ubuntu下开发STM32已经接近尾声。如果不出意外的话,这篇将会是最后一篇了。突然有点心痛,毕竟,在也没有机会这么明目张胆的传图片,刷金币了。Newlib申请内存的机制这次介绍的是Newlib下的malloc。不同与keil mdk下的malloc。两者的实现机制是不同的。keil mdk是在汇编文件中改一个数值,用来设置堆的大小。今后的所有malloc申请的内存都在这个堆中。堆的大小是在编译的时候确定的,预先放入bss段中。而Newlib使用的是sbrk的机制。只要sbrk的申请的地址还没到当前s

2021-06-19 18:46:19 627

转载 Ninja - chromium核心构建工具Jul 28, 2014

转载:https://www.cnblogs.com/x_wukong/p/4846179.html?from=timeline&isappinstalled=0缘由经过上次对chromium核心代码的初步了解之后,我转头去研究了一番ninja,并对其进行了一些改造(爱折腾的,都是小NB)。今天就来简单介绍一下ninja及其使用。(BTW: 细节的内容,大家阅读ninja 的手册就好了,我这里不会关注。)ninja是一个专注于速度的小型构建系统(Ninja is a small build s

2021-06-19 18:44:40 198

转载 10.Ubuntu下开发STM32--再谈exit

在笔记6—使用串口Part2(https://www.stmcu.org.cn/module/forum/thread-603909-1-1.html)中,我们简单的介绍了一下exit。在windows或者linux操作系统中,main的返回值是有意义的,类型为int。这个返回值实际上是返回给操作系统的。0表示程序正常终止,其他非零表示程序异常终止。在使用ST固件库提供的启动文件和syscalls.c文件之后,如果程序中主动调用exit,能跳转到_exit系统调用中。如果main中使用return,并不能

2021-04-01 14:51:31 235

转载 09.Ubuntu下开发STM32--浮点运算

cortex-m4内核具有浮点运算单元。如果不使用的话,还是有点浪费的。软浮点gcc在默认的情况下使用软浮点运算。相关浮点运算测试的代码在softfloat.zip中。为了反汇编观察代码,这里特意去掉了Os优化。使用Newlib-nano库。使用make sram,sudo make burns下载到SRAM中运行。从输出的时间间隔上来看,软件浮点也是挺快的。这里我们反编译一下main.o的代码看一下。float add(float a,float b,float c ){ return

2021-04-01 14:50:35 453

转载 08.Ubuntu下开发STM32--使用printf

开始尝试使用标准库的一些东西的时候,也就意味着我们的linux环境下开发STM32的教程已经接近尾声了。标准库的使用我们这里仅仅介绍使用printf和malloc。syscalls想使用标准库,我们需要自己完成一些系统调用。像keil mdk下使用printf一样,至少要完成fputc和fgetc。然而newlibc下使用printf却不这么简单。并不是一个__io_getchar, __io_putchar能够完成的。幸好,ST的固件库中有我们使用的大部分源码。都在TrueStudio的模板下。大家可

2021-04-01 14:49:38 477

转载 07.Ubuntu下开发STM32--使用串口Part2

在上一篇Part1的时候,我们说了有个bug,也就是中断向量表的问题。其实这个问题在第4节—在SRAM中运行程序的时候就存在。只不过我们的程序中没有使用中断,也就导致这个bug没有发现。如果我们在上一节的代码中尝试将程序下载到SRAM中运行的时候,也就是make sram,sudo make burns,这样串口只能发送。不能接收。究其原因还是中断惹得祸。我们使用st-flash工具直接将代码下载到SRAM中,st-flash在下载完之后,会尝试更改pc到Reset_Handler。并运行第一行代码。但是

2021-04-01 14:48:43 248

转载 06.Ubuntu下开发STM32--使用串口Part1

可能觉得使用串口很简单,无非就是初始化GPIO,初始化串口。接着发送—检测是否成功。表面上看来是很简单的问题。然而,我要说的并不是这些。我要说的是volatile和中断向量表的问题。在其中配合一点gdb调试。使用ringbuffer这里的串口使用非缓冲发送,ringbuffer中断缓冲接收的方式。先来看看ringbuffer。ringbuffer是一个特殊的队列,FIFO。struct ringbuffer{ uint8_t *bf; int len; int cou

2021-04-01 14:47:24 554

转载 05.Ubuntu下开发STM32--SRAM中运行程序

st-flash能够将代码下载至STM32的任何位置。甚至是SRAM。在下载完毕之后,不用我们手动设置,他自动的设置pc至你下载代码的位置,并从pc处开始运行。反汇编先来反汇编我们点亮ledhttps://www.stmcu.org.cn/module/forum/thread-603787-1-1.html的代码。使用arm-none-eabi-objdump -d blink.elf生成反汇编代码,如下图所示:等等,为什么第一条指令的地址是0x0800_0188?我们的代码不是应该从0x0800

2021-04-01 14:46:17 384

转载 04.Ubuntu下开发STM32--优化程序大小

在上一篇帖子(https://www.stmcu.org.cn/module/forum/thread-603787-1-1.html),我们使用gcc和Makefile成功的点亮了一盏led灯。却发现程序有点大,占用了6K多的代码空间。相比keil mdk下的代码量,这个确实大的多。这并不是我们使用的gcc的原因,也不是gcc链接newlibc库的原因。而是我们没有选择任何优化的参数。(下图是未经任何优化的代码大小)-Os优化说到代码的优化,在单片机中,由于flash空间过小,我们并不会过多的考虑优

2021-04-01 14:44:58 569

转载 03.Ubuntu下开发STM32--灯,等灯等灯

在Ubuntu下开发STM32并不简单。这里说的不简单是上手困难。不太适合新手。对一个刚开始学习STM32的人来说,如果一开始就使用Ubuntu开发,我觉得并不是一个好的注意。对于初学者来说,如果你的代码出现问题,你既要考虑是不是固件库的问题,又要考虑是不是Makefile的问题。还要考虑newlib(arm-none-eabi-gcc使用的库)系统调用的问题。这么多的问题加在一块,足够你想放弃学习了。因此,对于初学者来说,就不要瞎折腾了。还是老老实实的使用keil mdk,iar等一些IDE,从0开始学

2021-04-01 14:43:43 401

转载 02.Ubuntu下开发STM32--我叫Makefile

回忆我们在windows环境下使用IDE进行开发,只要一股脑的将多有的源文件添加到工程中,点一个按钮,IDE就会为我们生成可执行文件。但是期间发生了什么?我们无从得知。IDE让我们编程简单的同时,也让我们变得更加傻瓜。在linux下编程,最常用的莫过于gcc了。比如我们编译main.c生成main.exe(在linux下,叫做main.out)或许更好些。只需要在控制台下敲下:$ gcc -Wall main.c -o main.out-Wall是允许提示所有的警告。更多参数解释请参考http://

2021-04-01 14:42:30 400 1

转载 01.Ubuntu下开发STM32--软件搭建

记事本用习惯了,论坛写帖子的时候动不动Ctrl+S一下。。。在Ubuntu下开发STM32,两个常用软件是必须的。我们的交叉编译器,arm-none-eabi-xxx。st-link的驱动。这里的st-link并不像我们windows下面用的那样,一路点Next就好了。这里我们需要从github上面下载源码,自己编译,安装。st-link不仅仅是我们下载代码的工具,更是我们使用gdb调试的基础。linux对USB虚拟串口的支持linux下自带虚拟串口的驱动。不需要手动安装。linux对串口的命

2021-04-01 14:41:07 406

转载 嵌入式开发常见问题解决方法

转载:https://www.cnblogs.com/jozochen/p/8541714.html一、问题复现稳定复现问题才能正确的对问题进行定位、解决以及验证。一般来说,越容易复现的问题越容易解决。1.1 模拟复现条件有的问题存在于特定的条件下,只需要模拟出现问题的条件即可复现。对于依赖外部输入的条件,如果条件比较复杂难以模拟可以考虑程序里预设直接进入对应状态。1.2 提高相关任务执行频率例如某个任务长时间运行才出现异常则可以提高该任务的执行频率。1.3 增大测试样本量程序长时间运行后出

2021-03-31 13:38:54 498

原创 Ubuntu查看文件和文件夹大小命令

用df命令查看分区情况df -h命令结果参考如下:Filesystem Size Used Avail Use% Mounted onudev 2.0G 0 2.0G 0% /devtmpfs 396M 5.9M 390M 2% /run/dev/sda1 1004G 25G 929G 3% /tmpfs 2.0G 272K 2.0G 1% /dev/shmtmpfs

2021-03-30 21:37:29 2640 1

原创 ubuntu16.04环境下vscode终端排版错乱解决方法

测试ubuntu版本:Linux version 4.8.0-36-generic (buildd@lgw01-18) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:57 UTC 2017测试vscode版本:Version: 1.54.2Commit: fd6f3bce6709b121a895d042d343d71f317d74e7Date

2021-03-16 22:11:56 502

转载 ubuntu 下查看网卡流量速度

参考:http://blog.chinaunix.net/uid-20718384-id-3310157.html1. sar命令可实时查看网卡速度sudo apt-get install sysstatsar -n DEV 1DEV 表示查看网络链接速度1表示 每隔一秒刷统计一次速度2. 可以在tagsmanger(系统监视器)上用图形界面查看当前网卡速度gnome-system-monitor3. dstat命令sudo apt-get install dstatalias ds

2021-03-10 14:55:45 1881

原创 ArduPilot添加完整的调试功能

测试飞控:fmuv3测试固件版本tag:Copter-4.0.61.修改代码diff --git a/Tools/ardupilotwaf/boards.py b/Tools/ardupilotwaf/boards.pyindex 31f5e74..2c866f2 100644--- a/Tools/ardupilotwaf/boards.py+++ b/Tools/ardupilotwaf/boards.py@@ -144,8 +144,21 @@ class Board:

2021-02-25 18:58:25 492

原创 ArduPilot 编译选项

备注:可以自己添加 -O0 -g3 -ggdb3飞控板类型:fmuv3ArduPilot C语言编译选项['/opt/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc', '-ffunction-sections', '-fdata-sections', '-fsigned-char', '-Wall', '-Wextra', '-Wformat', '-Wpointer-arith', '-Wcast-align',

2021-02-25 18:17:44 425

原创 ArduPilot飞控ChibiOS静态库源码编译选项

备注:-O0 -g3 -ggdb3是自己添加的飞控板类型:fmuv3汇编语言编译选项arm-none-eabi-gcc -c -mcpu=cortex-m4 -Wa,-amhls=modules/ChibiOS/lst/crt0_v7m.lst -DCORTEX_USE_FPU=TRUE -O0 -g3 -ggdb3 -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -MD -M

2021-02-25 17:28:43 413

原创 Ardupilot工程waf配置技术要点

以下内容是将Ardupilot工程拆分成独立模块的测试结果1.如何配置工具链import syssys.path.insert(0, 'tools/ardupilotwaf/')def configure(cfg): cfg.env.TOOLCHAIN = 'arm-none-eabi-' cfg.load('toolchain')2.如何配置编译链接选项ardupilot/Tools/ardupilotwaf/boards.py3.如何配置源代码载具层和库层代码

2021-02-19 13:57:46 429 1

转载 SSH 三步解决免密登录

参考:https://blog.csdn.net/jeikerxiao/article/details/84105529SSH 三步解决免密登录1.客户端生成公私钥2.上传公钥到服务器3.测试免密登录1.客户端生成公私钥本地客户端生成公私钥:(一路回车默认即可)ssh-keygen上面这个命令会在用户目录.ssh文件夹下创建公私钥ls -l ~/.ssh下创建两个密钥:id_rsa (私钥)id_rsa.pub (公钥)2.上传公钥到服务器这里测试用的服务器地址为:1

2021-02-07 11:01:41 429

原创 使用条件断点测试堆溢出的方法(STM32 GCC)

下面是ubuntu16.04环境下,使用arm-none-eabi-gcc编译器,在STM32F427VIT6上测试堆溢出的方法1.测试代码#include <stdlib.h>void* ptr =0;int main(){ void* p =0; while(1){ p = malloc(10240); if(ptr < p){ ptr = p; } free(p); p = malloc(10240)

2021-02-05 18:28:18 333

原创 使用条件断点测试栈溢出的方法(STM32 GCC)

下面是ubuntu16.04环境下,使用arm-none-eabi-gcc编译器,在STM32F427VIT6上测试栈溢出的方法1.测试代码void myfunc(void){ char c[1] = {0x88}; myfunc();}int main(){ myfunc(); return 0;}2. 运行JLinkGDBServer和arm-none-eabi-gdbnohup JLinkGDBServer -if swd -device STM32F427VI

2021-02-05 17:31:04 350

原创 STM32F427VIT6代码分区测试(C语言)

使用arm-none-eabi-gcc编译器编译,使用arm-none-eabi-gdb单步调试,得到分区结果如下:#include <stdio.h>#include <stdlib.h>#include <string.h>float Num = 5.19;char* str = NULL;void delay_ms(int time){ int t = time; void* p8 = &time; // time在

2021-02-01 14:08:24 843 1

原创 PX4_Bootloader单步调试配置(STM32F7 配置)

Bootloader/Makefile编译选项- -Os \- -g \+ -O0 \+ -ggdb3 \Bootloader/libopencm3/lib/stm32/f7/Makefile-TGT_CFLAGS = -Os -g \+TGT_CFLAGS = -O0 -gg

2021-02-01 07:08:46 246

原创 PX4_Bootloader单步调试配置(STM32F4 配置)

Bootloader/Makefile编译选项- -Os \- -g \+ -O0 \+ -ggdb3 \Bootloader/libopencm3/lib/stm32/f4/Makefile-TGT_CFLAGS = -Os \+TGT_CFLAGS = -O0 -ggdb3

2021-02-01 07:07:34 396

原创 PX4_Bootloader单步调试配置 (STM32F1 配置)

Bootloader/Makefile编译选项- -Os \- -g \+ -O0 \+ -ggdb3 \Bootloader/libopencm3/lib/stm32/f1/Makefile-TGT_CFLAGS = -Os \+TGT_CFLAGS = -O0 -ggdb3

2021-02-01 07:05:20 322

原创 px4/apj格式的飞控固件刷写工具(python)

1. 新建脚本文件touch uploader.pychmod +x uploader.py2. 添加脚本内容#!/usr/bin/env python############################################################################## Copyright (c) 2012-2017 PX4 Development Team. All rights reserved.## Redistribution and u

2021-01-28 21:10:32 1410

原创 px4/apj格式飞控固件生成工具(python)

px4/apj格式的飞控固件本质上是json格式的文本文件,可以制作一个独立的python脚本来生成飞控固件。1. 新建脚本文件touch bin2json.pychmod +x bin2json.py2. 添加文件内容#!/usr/bin/env python# encoding: utf-8import json, time, base64, zlib, sys, osimg = open(sys.argv[1],'rb').read()d = { "board_id"

2021-01-28 19:44:51 1240 1

转载 基于状态机的按键程序

参考:https://blog.csdn.net/lovelijiapu/article/details/95946732一般的按键输入软件接口程序非常简单,在程序中一旦检测到按键输入口为低电平(有时可能为高),便采用软件延时的方法来进行消抖,然后再次检测按键输入,如果再次确认为低电平则表示有按键按下,转入执行按键处理程序。如果延时后检测的电平为高电平则放弃本次按键检测,重新开始一次按键检测过程。在简单的系统中这种方法比较可以用,但是在复杂的系统实时性要求较高的系统中这种方法的CPU利用率比较低,造成资源

2021-01-27 00:44:30 891 1

原创 arm-none-eabi-gcc编译选项(ChibiOS)

demo: ChibiOS/demos/STM32/RT-STM32F407-DISCOVERYarm-none-eabi-gcc -c # 编译、汇编到目标代码,不进行链接 -mcpu=cortex-m4 # cpu架构的优化选项 -O2 # 更多的优化,会尝试几乎全部的优化功能,但不会进行“空间换时间”的优化方法 -ggdb # 为调试器 gd

2021-01-19 19:14:58 3916 1

原创 手撕cmake工程模板(含静态库)

典型cmake工程目录结构(含静态库).├── build # 编号01 mkdir build├── CMakeLists.txt # 编号02 touch CMakeLists.txt├── config # 编号03 mkdir config && cd config│ ├── config.hpp # 编号04

2021-01-08 20:03:05 147

原创 手撕cmake工程模板(含源码库)

典型cmake工程目录结构├── build # 编号01 mkdir build├── CMakeLists.txt # 编号02 touch CMakeLists.txt├── config # 编号03 mkdir config && cd config│ ├── config.hpp # 编号04 这个文件是ccmake ..命令生成的│ └──

2021-01-08 19:17:44 428 1

原创 正则表达式

正则表达式正则测试网站http://regex101.com开始和结束^ 匹配开始$ 匹配结束符号表示直接匹配[] 匹配一个符号,[a-z]表示范围,[^a-z]取反.表示任意字符,不包括\r\n\d表示数字,\D除数字外的任意字符,任意字符[\d\D]\w字母 数字 下划线,\W是\w的取反,任意字符[\w\W]\s 表示\r\n\v\f\t,\S是\s的取反,任意字符[\s\S]数量表示{}指定数量,{3}单数字,{3,}范围,{3-6}数量范围? 表

2021-01-02 20:07:30 255 2

原创 vim简要操作说明

vim简要操作说明vim的模式正常模式 :打开文件以后默认进入正常模式,其他模式按esc返回正常模式插入模式:在正常模式下,i、a、o进入输入模式,不同按键区别在光标位置命令模式:在正常模式下,按:进入命令模式可视模式: 在正常模式下,按v进入可视模式选择模式(Select mode)Ex模式(Ex mode)vim撤销和恢复撤销操作撤销 u恢复撤销 ctrl + rvim常用操作自动补全tab 按键自动补全光标定位gg 移动到文件开头G 移动到文件末尾$移到

2021-01-02 17:22:16 97

原创 gdb调试工具

gdb调试工具简介Linux系统中包含了GNU调试程序gdb,它是一个用来调试C和C++程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。gdb所提供的一些功能如下:运行程序,设置所有的能影响程序运行的参数和环境;控制程序在指定的条件下停止运行;当程序停止时,可以检查程序的状态;修改程序的错误,并重新运行程序;动态监视程序中变量的值;可以单步执行代码,观察程序的运行状态。gdb调试的对象是可执行文件,而不是程序的源代码文件,然而并不是所有的可执行文件都

2021-01-02 16:12:53 179 1

正则表达式

正则表达式调试器是一个小软件,用于调试自己编写的正则表达式正确与否。输入正则表达式和自己需要匹配的内容就可以了。很好用的。

2013-03-07

查看编码方式

查看文本文件的编码类型,utf8 unicode ansi等在qt下编译通过

2013-03-07

编码方式 UTF8 ANSI UNICODE

查看文本文件的编码方式 UTF8 ANSI UNICODE 在qt下编译通过

2013-03-07

UTF-8互转GBK

UTF-8 GBK 转化工具 C++ 源代码编码转化 主要用于跨平台的源代码编译,防止乱码

2012-12-26

html 信息提取 压缩 zip 电子邮件 带附件发送

用qt 写的网页信息提取程序,从网络批量下载网页,然后通过析取算法提取其中数据,数据格式TXT,然后将提取的数据压缩zip,然后通过电子邮件发送出去。在windows 和linux ubuntu 12.04上均可顺利通过编译运行。

2012-12-26

空空如也

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

TA关注的人

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