- 博客(36)
- 资源 (14)
- 收藏
- 关注
原创 OJ在线编程常见输入输出的处理
一、例1:逐行计算数字的和输入描述:输入数据有多组, 每行表示一组输入数据。每行不定有n个整数,空格隔开。(1 <= n <= 100)。输出描述:每组数据输出求和的结果输入例子:1 2 34 50 0 0 0 0输出例子:690代码:#include <bits/stdc++.h>using namespace std;int main(void) { int num = 0, sum = 0; while(cin >&g
2022-05-21 01:19:23
927
1
原创 UDS简介
因为ISO文档需要收费,所以以下内容整理于网络,请以ISO文档为准。一、协议栈总览二、UDS应用层USD应用层由ISO 14229标准定义。诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能的request和response定义了统一的内容和格式。Diagnostic request的格式:Diagnostic request的格式可以分为两类:一类是拥有sub-function的,另一类是没有su
2022-05-03 18:09:58
7359
原创 浅析cv::cuda::threshold函数的实现
我觉得通过阅读优秀开源项目的代码来学习库的使用是一个不错的学习方法,比如通过阅读OpenCV和TensorFlow的源码来学习如何使用CUDA和cuDNN,还可以顺便学习一些编程技巧。所以寻找一个合适的切入点就显得尤为重要,本文以分析cv::cuda::threshold函数的实现为切入点,来初步了解一下如何使用CUDA来加速程序的运行。以下是两份值得一读的CUDA官方文档:CUDA C++ Programming GuideCUDA C++ Best Practices Guide一、使用案例这是
2022-04-15 21:33:37
4281
原创 编译支持CUDA和cuDNN的OpenCV
安装Visual Studio,最好安装2017或者2019版本的(或之间的版本),否则后续编译的时候可能报错;安装好CUDA和对应版本的cuDNN;将C:\Program Files\NVIDIA\CUDNN\v8.3\bin目录下的文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin目录下,将C:\Program Files\NVIDIA\CUDNN\v8.3\include目录下的文件复制到C:\Progra..
2022-04-13 23:41:12
3218
原创 详解CAN 2.0协议
一、简介协议的制定:CAN是Controller Area Network的缩写,译为控制器局域网,常称作CAN总线,多用于汽车电子和工业控制。CAN协议最早由博世公司提出,后被多个标准化组织进一步细化,本文将在最后一节列出这些标准之间的细微差别。目前CAN总线中使用最广泛的正是CAN 2.0 A/B协议,也称作传统CAN(Classic CAN)。其中CAN 2.0A协议仅支持标帧格式,而CAN 2.0B协议支持标准帧格式(Stand Frame,11位标识符)和扩展帧格式(Extend Fram
2022-04-04 23:24:28
30695
2
原创 入门vsomeip
一、前言SOME/IP是一套可伸缩的基于IP协议的面向服务的中间件的规范,可以在车载以太网上实现RPC功能(Remote Procedure Call,远程过程调用),这样一个ECU可以通过车载以太网调用另一个ECU上提供的函数。vsomip是由宝马开发的开源SOME/IP协议栈。SOME/IP官网:Scalable service-Oriented MiddlewarE over IP (SOME/IP)vsomeip代码仓库:GitHub - COVESA/vsomeip: An implemen
2022-03-31 11:21:19
5676
1
原创 以leds-gpio.c为例,浅谈device-tree、pinctrl和GPIO子系统
一、前言leds-gpio.c是内核源码drivers/leds/leds-gpio.c目录下的一个led驱动程序的例程(说明书位于Documentation/devicetree/bindings/leds/leds-gpio.txt),它使用了内核提供的led驱动框架(说明书位于Documentation/leds/leds-class.txt)。本文不具体分析led驱动框架,而是借由分析leds-gpio.ko模块的源文件leds-gpio.c来初步介绍一下device-tree、pinctrl和G
2022-03-27 07:54:28
3624
原创 以leds-gpio.c为例,浅谈class、bus和platform子系统
一、前言leds-gpio.c是内核源码drivers/leds/leds-gpio.c目录下的一个led驱动程序的例程(说明书位于Documentation/devicetree/bindings/leds/leds-gpio.txt),它使用了内核提供的led驱动框架(说明书位于Documentation/leds/leds-class.txt)。本文不具体分析led驱动框架,而是借由分析leds-gpio.ko模块的源文件leds-gpio.c来初步介绍一下class、bus和platform子系统
2022-03-27 07:50:07
1472
原创 Linux开发小贴士
查询并更改开发板上终端显示的列数(解决命令过长导致头部被尾部覆盖的问题):debian@beaglebone:~$ stty size24 80debian@beaglebone:~$ stty cols 160debian@beaglebone:~$ stty size24 160使用快捷键在终端中快速移动光标(以空格或标点符号分割单词)或冻结/解冻屏幕滚动:ctrl+a:移动光标到行首ctrl+e:移动光标到行尾ctrl+u:删除光标到命令行行首ctrl+k:删除光标到命..
2022-03-23 01:36:17
1539
原创 解析kobject、kobj_type和kset
一、kobject/sys目录(即sysfs虚拟文件系统)下的每一个目录项(包括子目录)都对应着一个kobject结构体实例,创建kobject结构体实例时需要指定目录名、上级kobject(可选)。include/linux/kobject.h:struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *k
2022-03-23 01:25:44
2607
原创 为BeagleBone AI添加MPU6050加速度传感器的Linux驱动程序
一、修改设备树不要使用插件设备树更改pinmux,因为在很多板子上都无效,BeagleBone AI也不例外。首先对设备树作如下更改:将pinmux@1400节点的cape_pins_default子节点内的CTRL_CORE_PAD_VIN1A_D20(0x4a003544 - 0x4a000000 - 0x2000 - 0x1400 = 0x00000144)、CTRL_CORE_PAD_GPIO6_15(0x4a00368C - 0x4a000000 - 0x2000 - 0x1400 = 0x
2022-03-22 15:01:07
5827
1
原创 补码一位乘法公式的推导
一、公式及其递推式补码一位乘法公式如下:[x]补=x0.x1x2...xn[y]补=y0.y1y2...yn[x⋅y]补=[x]补⋅(−y0+∑i=1nyi2−i)\begin {array}{ll}[x]_{补}&=x_{0}.x_{1}x_{2}...x_{n}\\[y]_{补}&=y_{0}.y_{1}y_{2}...y_{n}\\[x·y]_{补}&=[x]_{补}·(-y_{0}+\sum\limits_{i=1}^{n}y_{i}2^{-i})\\\end
2021-03-17 18:08:37
2037
2
原创 Hamming code的检错、纠错原理
一、前言书上、网上大多只有以下没加粗的两句话,经过我的一番理解之后又加上了小括号里的那两句话:码距为3的海明码:可以检错2位,或者纠错1位**(不知道是错了1位还是2位)**码距为4的海明码:可以检错2位,并且纠错1位**(知道是错了1位还是2位,但也有可能错了3位)**注意“检错”和“纠错”的区别,检错只能检测到这一串数字里错了几位,并不知道是哪几位错了,而纠错能知道具体是哪一位错了,所以能够纠正过来。二、纠错理论L−1=D+C且D≥CL-1=D+C且D \geq CL−1=D+C且D≥C
2021-03-07 06:26:27
6727
1
原创 三分钟理解KMP算法
前言:一般的书籍或文章讲解KMP算法都是从问题分析、思路讲解再到代码讲解。但是我觉得先看懂代码、再捋清思路反而会更容易,所以本文会以代码+代码分析的方式来讲解KMP算法。一、BF算法的代码#include <stdio.h>#include <stdlib.h>#include <string.h>int BF(const char* txt, const char* pat){ int i = 0; int j = 0; int t
2021-01-01 23:38:19
350
原创 欧拉公式的理解与推导
一、自然底数eee的定义式定义式:e=limn→∞(1+1n)ne=\lim\limits_{n \to \infty}(1+\frac{1}{n})^{n}e=n→∞lim(1+n1)n理解:假设银行年利率为100%,如果利息一年结一次,那么把1元存入银行,一年后可以得到1元的利息,本息合计2元;如果利息半年结一次,那么把1元存入银行,半年后可以得到0.5元的利息,如果把这0.5元继续存入银行,那么再过半年后本息合计2.25元;如果利息一天结一次,且每次结算后的利息继续存入银行,那么一年后本
2020-12-20 05:04:01
6113
1
原创 一种线程安全的C++单例模式模板类的简易实现
一、前言boost库的某些组件中虽然有单例模式的实现,但不是很方便单独拿出来使用,于是我在其他人代码的基础上,改动、实现了一个线程安全的、可继承使用的单例模式模板类。编译器会实现局部静态变量的线程安全,因此该单例模式模板类也是线程安全的。程序会在第一次调用单例类的Inst函数的时候初始化单例对象。二、代码singleton.hpp#ifndef _SINGLETON_H_#define ...
2020-04-13 13:22:46
436
原创 一个Boost Statechart Library有限状态机实用示例
一、前言boost库提供了两个状态机的库Meta State Machine和Statechart,我写的例程基于boost 1.60.0版本的Statechart库。在boost_1_60_0/libs/statechart/example/源码目录下提供了7个例程,在官方网站的文档中The Boost Statechart Library - Tutorial - 1.60.0提供了一些详细...
2020-04-13 13:01:14
1524
原创 《视觉SLAM十四讲》单应矩阵与cv::decomposeHomographyMat函数源码浅析
参考文献:[1] 视觉SLAM十四讲:从理论到实践/高翔等著.—北京:电子工业出版社,2017.3[2] 计算机视觉中的多视图几何:原书第2版/(澳)理查德 · 哈特利(Richard Hartley),(英)安德鲁 · 西塞曼(Andrew Zisserman)著;韦穗,章权兵译.—北京:机械工业出版社,2019.8[3] Ezio Malis, Manuel Vargas. Deeper...
2020-04-03 13:36:11
5023
8
原创 《视觉SLAM十四讲》相机位姿与相机外参的区别与联系
《视觉SLAM十四讲》相机位姿与相机外参的区别与联系一、相机位姿的定义pc=Tcwpwp_{c}=T_{cw}p_{w}pc=Tcwpw ………………P60 (3.40)pw=Twcpc=Tcw−1pcp_{w}=T_{wc}p_{c}=T^{-1}_{cw}p_{c}pw=Twcpc=Tcw−1pc ………………P60 (3.41)根据书中第60页底部和第61页顶部的文字...
2019-07-27 01:19:05
6598
原创 ARM ELF 镜像结构
ARM ELF 镜像结构参考链接:The structure of an ARM ELF image*注:虽然其它书籍或者文章把 “section” 翻译成“段”,但是这里为了不和 “segment” 相冲突,本文把 “section” 翻译成“节”。本文把 “link” 翻译成“连接”,也可理解为“链接”。 ELF 是 Executable and Linkable Format 的缩写,意为可
2016-11-09 04:26:54
3012
原创 深入理解STM32之储存器和总线架构2(基于STM32F411)
官方文档: STM32F411 参考手册 STM32F411 数据手册 Cortex™-M4F 编程手册 STM32 微控制器系统存储器自举模式应用笔记 STM32™ 自举程序中使用的 USART 协议 ARM Cortex™-M Programming Guide to Memory Barrier Instructions 三、Flash接口中的自适应实时存储器加速器 有关 C
2016-08-23 22:14:10
4193
原创 深入理解STM32之储存器和总线架构1(基于STM32F411)
官方文档: STM32F411 参考手册 STM32F411 数据手册 Cortex™-M4F 编程手册 STM32 微控制器系统存储器自举模式应用笔记 STM32™ 自举程序中使用的 USART 协议 ARM Cortex™-M Programming Guide to Memory Barrier Instructions 一、系统架构主系统由 32 位多层 AHB 总线矩阵构成,
2016-08-20 02:14:30
12202
原创 浅析AMBA规范以及AMBA 5 AHB接口和AMBA 3 APB接口
官方文档: ARM® AMBA® 5 AHB Protocol.pdf AMBA™ 3 APB Protocol.pdf Multi-layer AHB.pdf一、AMBA简介1、AMBA (Advanced Microprocessor Bus Architecture): ARM® AMBA® 协议是用于连接和管理片上系统 (SoC) 中功能模块的开放标准和片上互连规范。它有助于首次开发
2016-08-15 00:09:59
13782
原创 使用HAL库、STM32CubeMX和Keil 5开发入门教程(二):GPIO
有关软件的使用以及其它准备工作请参考:使用HAL库、STM32CubeMX和Keil 5开发入门教程(一):点亮一盏LED灯(NUCLEO-F411RE)一、API说明HAL库一共包含如下6个IO操作函数: 1、读取某个引脚的电平状态: HAL_GPIO_ReadPin() 2、写入某个引脚的电平状态: HAL_GPIO_WritePin() 3、翻转某个引脚的电平状态: HAL_GPI
2016-08-02 22:11:42
40717
原创 wxWidgets学习笔记(四):编写一个简易的计算器程序
一、开发环境操作系统:Fedora 23集成开发环境:Code::Blocks 16.01G++版本:5.3.1GTK+版本:2.24.30(使用命令sudo dnf install gtk2 gtk2-devel gtk2-devel-docs安装)wxWidgets版本:3.1.0(解压源码包后进入顶层目录依次输入./configure、make、sudo make install三条
2016-06-27 17:05:44
3299
原创 wxWidgets学习笔记(三):静态编译wxWidgets图形库及其应用程序
一、开发环境操作系统:Fedora 23集成开发环境:Code::Blocks 16.01G++版本:5.3.1GTK+版本:2.24.30(使用命令sudo dnf install gtk2 gtk2-devel gtk2-devel-docs安装)wxWidgets版本:3.1.0二、静态库与动态库库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(*.a或
2016-06-26 23:15:46
4725
原创 wxWidgets学习笔记(二):使用wxFormBuilder、wxWidgets和Code::Blocks创建GUI程序
一、开发环境操作系统:Fedora 23集成开发环境:Code::Blocks 16.01G++版本:5.3.1GTK+版本:2.24.30(使用命令dnf install gtk2 gtk2-devel gtk2-devel-docs安装)wxWidgets版本:3.1.0(解压源码包后进入顶层目录依次输入./configure、make、make install三条命令)wxForm
2016-06-25 00:20:55
8258
原创 使用ESP8266的AT指令调用网络数据接口
一、开发环境网络数据接口平台:www.nowapi.comWi-Fi模块型号:ESP8266 ESP-01AT指令集版本:0.40.0.0SDK版本:1.3.0二、实验目的使用ESP8266的AT指令查询标准北京时间API提供的北京时间。三、实验步骤(每条AT指令后均需要添加换行后再发送) 1. 使用串口发送指令AT+CWMODE=1设置模块Wi-Fi应用模式为Station模式; 2
2016-06-17 21:06:53
17073
4
原创 wxWidgets学习笔记(一):解读Code::Blocks模板工程源代码
一、开发环境操作系统:Fedora 23集成开发环境:Code::Blocks 16.01G++版本:5.3.1GTK+版本:2.24.30(使用命令# dnf install gtk2 gtk2-devel gtk2-devel-docs安装)wxWidgets版本:3.1.0(解压源码包后进入顶层目录依次输入./configure、make、make install三条命令)二、新建
2016-06-08 18:59:43
3037
原创 MQTT协议应用:外网手机控制内网树莓派
实验目的:将外网手机发送的字符串使用树莓派的串口输出 不了解MQTT协议的请参考:MQTT协议体验 Mosquitto安装和使用 不了解使用Python操作树莓派串口的请参考:Raspberry Pi B的UART极简例程一、前期准备服务器安装好Mosquitto(MQTT代理软件);树莓派安装好Python(用来编写树莓派订阅代码),然后用pip安装paho-mqtt(实现了MQTT协议的
2016-04-04 16:19:21
9901
1
原创 编译mini2440的crosstool-NG和全志A20的Linux BSP(Buildroot)的心得
前言之前花了两个月时间用crosstool-NG编译出了mini2440的交叉编译工具链,后来又花了一个月时间编译全志A20的Linux BSP(使用Buildroot)。中间出了很多错误,也解决了很多错误,由于没有逐个记录下来,所以写一篇博客总结一下解决错误的一些思路。 主要过程是认真阅读编译日志、准确定位错误信息,然后根据错误信息自行解决,或者利用百度、谷歌搜索错误信息并找到解决方法。一、cr
2016-03-13 21:55:49
2190
1
原创 Raspberry Pi B的UART极简例程
一、安装WiringPi2-Python执行以下命令:sudo apt-get updatesudo apt-get install python-dev python-pipsudo pip install wiringpi2二、编辑Python代码创建如下Serial.py文件,并增加可执行权限:#!/usr/bin/env pythonimport wiringpiwiringpi.w
2016-03-13 21:06:37
2329
原创 使用HAL库、STM32CubeMX和Keil 5开发入门教程(一):点亮一盏LED灯(NUCLEO-F411RE)
本教程以点亮一盏LED灯为目的为大家演示用STM32CubeMX、Keil、ST-Link开发STM32程序的一般方法。一、学习前的准备工作硬件:一块STM32开发板,一个ST-Link;(我使用的开发板是NUCLEO-F411RE) 软件:装好ST-Link的驱动程序,装好STM32CubeMX,装好Keil; 文档:开发板的原理图、芯片的参考手册和HAL驱动说明书。 附:STM32F4xx
2016-03-04 14:12:42
38655
2
原创 The GNU build system体验教程:Hello world example with Autoconf and Automake
一、安装GNU构建系统在安装GNU构建系统之前先介绍四个软件包: Autoconf:生成configure配置脚本; Automake:生成makefile模板; Libtool:用可移植的方式编译无关位置的代码并且构建共享库; Autotoolset:生成各种模板文件帮助你开发出各种符合GNU代码风格的可移植的源码。输入以下命令以检查是否安装了最新的版本:$ autoconf --vers
2016-03-04 00:32:57
999
原创 Linux下使用J-link Commander烧写u-boot到NAND flash
1、将初始化SDRAM(内存)的程序烧写进片内4K的SRAM,并且使其运行;2、修改并编译已经移植好的u-boot的代码使其能够在SDRAM中运行,然后烧写进SDRAM使其运行;3、将需要烧写进NAND flash里的u-boot烧写到SDRAM中的另一地址;4、用u-boot命令行擦除NAND flash中的数据,并且将SDRAM中需要烧写进NAND flash里的u-boot复制进NAND flash;
2015-10-11 23:04:46
1627
ARM Cortex™-M Programming Guide to Memory Barrier Instructions
2016-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人