自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux GDB调试

本章介绍linux环境下使用gdb调试程序。1.gdb调试条件想要程序执行并可gdb调试,必须在编译的时候添加**-g**,例如(C语言):gcc test.c -o test -g2. gdb命令介绍2.1 gdb 启动使用 gdb 可执行程序的名字指令后,可执行程序还没有开始跑起来,需要使用 start或run指令来启动执行程序$ gdb 可执行程序的名字 //例如上述编译得到的test执行文件:gdb test 启动gdb, 启动执行程序如下图所示:**2.2 gdb 设置参数 *

2021-12-15 11:39:07 2165

原创 linux access函数检测文件属性

在linux环境下使用access函数可以获取文件的属性信息(是否存在,是否可读,是否可写,是否可执行)。1. 相关头文件#include <unistd.h>2.access 函数原型/************************************* description : 检测文件的属性** parameter: ** pathname:需要检测的文件名字 ** mode:检测该文件是否具备的属性,参数值如下: ** F_OK:是否存在 ** R_OK

2021-12-13 17:51:00 1187

原创 linux 文件属性信息(stat/fstat/lstat)

本章主要讲解linux 中 stat函数,另外两个函数fstat和lstat功能和stat函数差不多就不做过多的讲解。fstat函数与stat函数区别主要在于:fstat只获取普通文件的属性信息,看fstat输入参数便可知lstat函数与stat函数区别主要在于:lstat获取文件属性中软链接信息是软连接文件本身的属性信息,而stat获取的是软链接文件关联的文件的属性信息fstat函数和lstat函数原型如下:int fstat(int fd, struct stat *statbuf);int

2021-12-11 15:09:24 2067 1

原创 linux 目录操作(mkdir, rmdir, opendir. readdir, closedir)

本章介绍linux提供的函数如何创建(mkdir),删除(rmdir), 打开(opendir),读取(readdir),关闭(closedir)目录。1. 函数讲解1.1 mkdir函数注意:调用函数mkdir函数创建目录时,设置mode权限事mode值会先与umask的取反值相与后得到的值才是最终的目录权限,例如参数(mode == 777), linux的(umask == 002)则umask取反~umask == 775,最终目录创建成功后全职为(mode & (~umask) ==

2021-12-10 16:30:53 707

原创 linux socket UDP广播

概述:网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式实现广播,离不开广播地址,同一个子网(局域网)的所有主机网卡都会接收所在网段广播地址的数据包。广播地址应用于局域网内的所有主机。广播地址(Broadcast Address)==专门用于同时向网络中(通常指同一子网)所有工作站进行发送的一个地址1. 网络通信基础如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口。因为同一主机上的程序使用网络是通过端口号来区分的。2.

2021-08-16 16:16:16 2559

原创 socket之UDP组播(多播)

1. 概述1.1 单播用于两个主机间单对单的通信1.2广播用于一个主机对整个局域网上所有主机上的数据通信1.3单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网的主机进行通信1.4实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机,这时候就有了组播1.5IP组播(也称多址广播或多播),是一种允许一台或多台主机发送数据包到多台主机的TCP/IP网路技术。1.6多播是 IPv6 数据包的 3 种基本目的地址类型之一,多播是一点对多点的通信, IPv6 没有采用 IPv

2021-08-13 17:57:02 16874 4

原创 linux定时器

linux系统中定时器有很多种,alarm, select, setitimer, timer_create等等,这里只简单的介绍两种定时器,setitimer和timer_create。1.第一种setitimer函数实现定时器函数原型如下:/*参数 which:(可选值如下) ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM信号。 ITIMER_VIRTUAL:以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。 ITIMER_PROF: 以该进程在用户

2021-07-28 17:05:20 6206 1

原创 linux 时间函数

下面讲解的是linux中获取时间相关的函数和将时间转换相关函数1.获取时间相关函数1.1 获取秒级时间差函数#include <time.h>time_t time(time_t *timer);//通过函数返回值或者timer 变量均可以获取到当前时间time_t实际上是一个长整型,表示UTC时间(1970年1月1日0时0分0秒,Linux系统的Epoch时间)到当前系统时间的秒数级时间差1.2 获取微秒级时间差函数#include <sys/time.h>#in

2021-07-27 15:38:08 1868

转载 如何快速转载CSDN中的博客

本篇旨在对Linux系统编程中常用的时间函数简单的总结。我们先来看下表示时间的几种数据类型,再来看看几种时间格式是如何转换的,并总结下获取时间和系统延时与定时的相关函数。 1. 时间类型 1.1 time_t 实际上是一个长整型,表示UTC时间(1970年1月1日0时0分0秒,Linux系统的Epoch时间)到当前系统时间的秒数级时间差,通常用于time函数: #include <time.h>...

2021-07-26 20:03:26 101

原创 linux下tar zip rar 解压缩

1. tar解压缩1.1 tar 参数:/*常用参数*/-c: 建立压缩档案-x:解压-z: 使用 gzip 的方式进行文件压缩 压缩包后缀为.tar.gz-j: 使用 bzip2 的方式进行文件压缩 压缩包后缀为.tar.bz2-v: 压缩过程中显示压缩信息,可以省略不写-f: 指定压缩包的名字/*不常用参数*/-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件1.2 tar 压缩语法:tar 参数 生成的压缩包的名字 要压缩的文件(文件或者目录)注

2021-07-15 14:17:49 7074 2

原创 linux下libcurl实现FTP单个文件上传下载

libcurl是一个提供数据传输功能的函数库,主要功能就是通过其使用不同的协议连接不同类型的服务器。当前libcurl支持的协议主要有http, https, ftp, gopher, telnet, dict, file, 和ldap等协议和各种SSL安全认证。在基于libcurl的程序里,使用libcurl提供的库函数完成特定任务。开发者在启动传输任务之前写好回调函数以及设置各类参数,当满足条件时,libcurl调用回调函数实现功能任务。libcurl官网上有其详细的介绍:https://curl.

2021-07-13 17:01:13 947 4

原创 linux openssl之EVP AES

linux openssl 值 AES加解密解说,本文章只要对openssl 之 EVP的api 函数讲解和使用例程openssl EVP相关api函数定义在(openssl/aes.h)头文件间,摘取如下所以:/********对称加解密常用并推荐使用的api函数********/int EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a); int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *typ

2021-06-17 20:26:29 616 1

原创 sha1算法

本文章只对sha1算法做简单的介绍和使用方法,不做其他介绍,毕竟对于大多使用者来说会用就足够了sha1是一种安全哈希算法,也是校验算法,可用于校验文件的完整性。sha1可处理原始报文长度不能超过2的64次方,然后SHA1生成160位(20byte)的报文摘要。SHA1算法简单而且紧凑,容易在计算机上实现。在开发项目过程中,很多时候会使用到sha1算法,举个简单的例子:如项目需要在网络上文件传输,但文件传输过程中不能百分百确定文件不会被人篡改或者数据丢失,而sha1可以校验文件的完整性,所以在传输文件的

2021-06-10 19:46:19 5975

原创 socket之UDP通讯

该文章简单的讲解linux中socket UDP通讯UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它不与对方建立连接,而是直接把我要发的数据报发给对方。所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。正因为UDP无需建立类如三次握手的连接,而使得通信效率很高。1.UDP通讯模型服务端:socket(创建套接字)–>bind(绑定套接字)–>recvfrom/sendto(对客服端进行读写

2021-06-09 11:45:41 12235 5

原创 socket编程之结构体解析

本文章主要讲解linux网络编程socket通讯中常用到的结构体组成和作用下图为各个结构间的对应关系(图来源于“爱编程的大丙”)1.结构体sockaddr:/**************************************sa_family : 地址协族议,常用值:AF_INET(网络通讯) / AF_UNIX(linux 本地通讯)**sa_data : 该数组存储网络端口port,IP地址(网络字节序),多出内存保留*******************************

2021-06-03 15:49:46 1820

原创 socket编程之字节序

在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编 / 译码从而导致通信失败。字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的,字符串是单字符的集合,因此字符串也没有字节序问题。目前在各种体系的计算机中通常采用的字节存储机制主要有两种:大端字节序 和 小端字节序

2021-06-02 20:14:25 343

转载 深入浅出理解SOME/IP

转载:https://blog.csdn.net/usstmiracle/article/details/116782047?spm=1001.2014.3001.5501SOME/IP,全称为Scalable service-Oriented MiddlewarE over IP,是一种面向服务的可伸缩的协议,用于控制消息的汽车中间件的解决方案。SOME/IP于2011年由BMW设计,2014年纳入AUTOSAR规范。SOME/IP的报文格式如下图所示,由消息头部(Header)和消息体(Paylo

2021-05-25 18:01:17 3034 1

转载 关于SOME/IP的理解

1. 总体说明如上图所示为标准的网络七层架构,SOME/IP ( Scalable service-Oriented MiddlewarE over IP),即“运行于IP之上的可伸缩的面向服务的中间件”。他在系统中其实就是一个中间件的存在,所谓“Middleware中间件”是一种独立的系统软件或服务程序,分布式应用软件可借助Middleware在不同的技术之间共享资源。所谓的分布式应用软件,在这里指的就是“服务”;不同的技术之间,在这里指的就是“不同的平台或操作系统,比如Adaptive AUTOSA

2021-05-21 17:42:22 2606

转载 车载以太网 - SOME/IP简介

SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是车载以太网通信引入的一个概念,位于OSI 7层模型的层4之上。在以CAN总线为主的车载网络中,通信过程是面向信号的(除了诊断通信之外),这是一种根据发送者需求实现的通信过程,当发送者发现信号的值变化了,或者发送周期到了,就会发送信息,而不考虑接收者是否有需求。而SOME/IP则不同,它是在接收方有需求的时候才发送,这种方法的优点在于总线上不会出现过多不必要的数据,从而降低负载。在车载网络中,某个

2021-05-21 11:47:06 1142

转载 OBD介绍

本篇文章主要从以下几个方面进行讲解1.OBD用来做什么2.OBD和UDS的区别3.OBD硬件接口简介4.OBD的9大模式介绍OBD(On-Board Diagnostic)指的是在线诊断系统,是汽车上的一种用于监控车辆状况以及控制排放的一种在线诊断系统。本篇文章主要围绕OBD的九种模式进行介绍,当然也会辅助介绍一些OBD相关的内容。1.OBD用来做什么对于一般的车主,可能有接触过OBD口,可以用它来查看一些车内的参数等等,但是OBD它到底用来做什么用呢?还是以一贯的思路,进行分点说明a.用

2021-04-20 18:03:46 3531

原创 UDS(十)应用层 34/36/37

Upload Download functional unit从成本等角度考虑,汽车ECU中用于缓存诊断服务数据的buffer大小有限,所以当我们需要读取或写入超过buffer大小的数据时,就无法简单地使用2E和22服务了,UDS据此定义了几个将大块数据写入或读出的服务,即数据下载和上传。UDS的第六类诊断服务:存储数据传输。该类型服务包含SID如下:RequestDownload (0x34):请求下载数据,诊断仪向ECU请求下载数据RequestUpload (0x35):请求上传数据,诊断仪向

2021-03-03 16:17:29 23258 9

转载 UDS(九)应用层 14/19

Stored Data Transmission functional unitUDS的第三类诊断服务:存储数据传输。该类型服务包含SID如下:ClearDiagnosticInformation (0x14):清除诊断信息ReadDTCInformation (0x19):读取诊断信息1. ClearDiagnosticInformation (0x14) Service客户端通过该诊断服务清除ECU中存储的诊断信息。1.1 请求格式由上图可知请求格式分为两个部分第一部分:请求SID:0

2021-03-02 16:05:53 4984 4

原创 UDS(八)应用层 22/2E

Data Transmission functional unitUDS的第二类诊断服务:数据传输。该类型服务包含SID如下:ReadDataByIdentifier (0x22)ReadMemoryByAddress (0x23)ReadScalingDataByIdentifier (0x24)ReadDataByPeriodicIdentifier (0x2A)DynamicallyDefineDataIdentifier (0x2C)WriteDataByIdentifier (0x2

2021-03-01 16:55:39 7350 2

原创 UDS(七)应用层 28/85

1. CommunicationControl (0x28) service该服务是控制某类通讯关闭/开启接收或者发送。当uds需要下载升级或者传输大量数据时需要将can总线资源让出来,提高传输效率。这时候可以通过28服务关闭某类的通讯发送报文到can总线上,待下载升级或传输数据完成后再通过28服务将通讯开启即可。1.1 请求格式:由上图可以28服务请求格式分为四个部分第一部分:第一字节为SID 0x28第二部分:第二字节为sub function,控制该类通讯的接收和发送是开启还是关闭0x0

2021-03-01 14:27:14 6068

原创 UDS(六)应用层 11/27

1. ECUReset (0x11) service  该诊断服务简称ECUR诊断服务,客户端通过该诊断服务命令服务器(电控单元)复位。服务器应先发送肯定响应报文,再执行复位。1.1 请求格式:SID + sub function  请求SID:0x11格式固定两个字节,第一个字节为SID:0x11;第二字为sub function参数,用于请求ECU将以何种方式复位。如下图所示:sub function参数如下:0x00 : ISOSAEReserved0x01 : hardReset0x

2021-02-25 18:02:05 3224

原创 UDS(五)应用层10/3E

1.DiagnosticSessionControl (0x10)service  DiagnosticSessionControl服务在服务器中用于切换至不同的诊断会话,对应的SID为0x10。不同诊断会话下对其SID服务权限如下图所示:1.1请求格式:SID + sub function  请求格式固定两个字节,第一个字节SID:0x10,第二个字节低7bit为sub function,决定ECU服务器切换至指定Diagnostic Session。所有的 Diagnostic Sessio

2021-02-24 16:18:54 5645

原创 UDS(四)应用层

  UDS由ISO-14229系列标准定义,ISO 14229-1 定义了诊断服务,不涉及网络及实现,只有应用层的内容。  诊断通信的过程从用户角度来看非常容易理解,诊断仪(tester)发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能的request和response定义了统一的内容和格式。1. UDS的服务  UDS是一系列服务的集合,本质上也是一种定向的通信,是一种交互协议。UDS的服务包含6大类,共26种。每种服务都有自己独立的ID,即SID

2021-02-22 17:43:40 5905

原创 UDS(三)网络层时间参数

网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数。网络层在检测到错误的时间传递至上层使用者1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.comfirm指示2.当N_Ar超时时,即接收方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.co

2021-02-03 17:44:26 11960 3

原创 UDS(二)网络层

  UDS网络层,是为了解决ISO 11898 协议中的经典can数据链路层与UDS 应用层 ISO 14229 协议中定义的应用层,彼此的数据长度不一样问题。经典can数据链路层最大支持8字节,但 ISO 14229 不仅仅支持can总线设计的,其最大容量是达到4095字节。如UDS应用需要发送20字节数据信息,而can不能一帧报文处理完,需要3帧才能发送完毕。那么如何将多字节数据通过can进行有效,有序的传输呢?ISO 15765-2 由此而生。一、前言与简介ISO 15765-2的第一版为ISO

2021-01-29 19:31:04 15669 18

转载 CSDN Markdown写博客插入空格

在 Markdown 文档中,可以直接采用 HTML 标记插入空格(blank space),而且无需任何其他前缀或分隔符。1、插入一个空格 (non-breaking space):    或   或 #xA0;2、插入两个空格 (en space):    或   或  3、插入四个空格 (em space):    或   或  4、插入细空格 (thin space)    或   或  注意:不要漏掉分号。转至:https://blog.csdn.net/w

2021-01-25 10:48:53 125

原创 UDS(一)入门概述

概述以经典can来描述。一.什么是UDS       UDS:unified Diagnostic Service, 统一诊断服务。       usd是一个在整个汽车系统上经常使用的设备维护协议。其主要遵循:ISO-15765、ISO-14229,其主要协议模式脱胎于OBD(On-board diagnostic)诊断协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发常用的协议之一二.uds用途&n

2021-01-20 15:05:35 20870 5

转载 C使用宏定义封装printf实现日志功能

问题在日常的开发中,我们经常会在代码中加一些信息便于调试和反查bug,加的这些打印对我们来说是很有帮助的,并且我们在代码发布的时候并不想删除他们,但又不想他们继续打印这些信息;思路如果需要可控的输处日志信息,最好的是我们程序有个日志系统(不是写入内核的环形缓冲区How can I write to dmesg from command line),但嵌入式设备应用一般是轻量级应用,不好带臃肿的日志库,所以最好我们能封装printf;使用宏定义开关C99规范(目前大部分嵌入式开发都基于该标准)后,编

2020-10-19 11:34:49 1362

原创 Ubuntu 18.04安装Samba服务器及配置

局域网下使用samba服务在Linux系统与Windows系统直接共享文件是一项很方便的操作。以Ubuntu为例配置samba服务,Linux服务器的版本是Ubuntu 18.04.1 LTS1.安装samba服务器。sudo apt-get install samba2.创建一个用于分享的samba目录。sudo mkdir /home/username/share3.给创建的这个目录设置权限sudo chmod 777 /home/linuxidc/linuxidc.com/share4.

2020-09-08 11:17:18 244

转载 10个ADC滤波算法

1、限幅滤波法(又称程序判断滤波法)A、方法:  根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:  如果本次值与上次值之差<=A,则本次值有效  如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:  能有效克服因偶然因素引起的脉冲干扰...

2020-03-23 11:25:30 3069

转载 CCS编译器报错

一、前言CCS,即Code Composer Studio,学过DSP的同学应该都对这个软件耳熟能详。虽然利用官方提供的库和例程编写代码并不困难,但是常常会遇到各种奇怪的报错。比如从其他电脑上导入项目,甚至是导入官方的例程项目,有时候都会出现动辄几十上百条报错,令不少初学者(包括我)头疼不已,这篇文章想要梳理一下我在导入项目的时候出现的报错,以及我的分析和解决办法,不定期更新,希望可以帮助到大家...

2019-12-26 11:03:23 6207

转载 C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)

转载地址 : http://blog.csdn.net/21aspnet/article/details/6729724     https://www.cnblogs.com/ransn/p/5081198.html例子:__align(),__attribute((aligned (n))),#pragma pack(n)#include <stdio.h> main()...

2019-12-13 16:09:19 302

转载 C语言中volatile关键字的使用

volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。作用编辑简单地说就是防止编译器对代码进行优化。比如如下程...

2019-12-13 11:48:41 678

原创 内存管理

内存管理分配:类似于单片机使用库时,库对单片机片上外设寄存器地址的封装成结构体来操作//系统参数结构体typedef struct{ unsigned int parameter0; unsigned int parameter1; unsigned int parameter2; unsigned int parameter3; ....... unsigned...

2019-12-12 18:13:21 191

原创 __attribute__(at(绝对地址) )

#define UsartRxBuffAddressArmEntry 0X20001000#define UsartRxBuffSize 0x400unsigned char USART_RX_BUF[UsartRxBuffSize ] __ attribute __((at(UsartBuffAddressArmEntry ))); //将串口接收的数据定位存放到RAM中...

2019-12-12 17:28:32 789

原创 递归-快速排序

快速排序: #define SWAP(a, b) {int temp; temp = a; a = b; b = temp;}void quick_sort_sub(int *data, int left, int right){ int left_index = left; int right_index = right; int pivot = data[(left + rig...

2019-09-17 10:43:29 239

stm32_sd_hex_boot

stm32f1程序升级SD卡hex文件写到flash,bootloader读取SD卡中的hex文件并转换成bin写入flash中,最后切换到app程序。

2019-01-14

空空如也

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

TA关注的人

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