- 博客(172)
- 资源 (10)
- 收藏
- 关注
转载 C++中常用的四种类型转换方式:static_cast、const_cast、dynamic_cast 和 reinterpret_cast
掌握C++类型转换:static_cast、const_cast、dynamic_cast 和 reinterpret_cast-优快云博客
2024-07-08 15:45:13
79
原创 C++宏定义中几个殊字符的含义及用法(“#”、“##”、“#@“、“\”)
#include #define makechar(x) #@x //#@连在一起作字符化,int main() {std::cout
2024-07-08 15:22:03
292
转载 MD5是用来加密的吗?BCrypt又是什么呢
最近经常看到一种关于 MD5 的说法,比如某某系统的登录模块使用了 MD5 加密算法,保证了用户密码的安全。那么 MD5 究竟是不是一种加密算法呢?从概念上来说『加密』对应的是『解密』,我们把数据采用某种方式加密之后,可以在之后的某一时刻进行解密来获得原始数据,照此观点来说 MD5 并不是一种加密算法,它只能把原文加密成密文,而不能将密文解密成原文。但是 MD5 确实把明文变成了不容易被破解的密文,达到了 “加密” 的目的,好像说它可以用来加密勉强也可以。
2024-01-03 16:58:26
200
转载 对称加密、非对称加密、公钥、私钥究竟是个啥?
世界上有没有不能破解的密码或加密方式?还真有一种,叫做一次性密码本,这时唯一一种不能破解的加密方式,而其他的密码只要时间无限理论上都是可破解的,如果你也对加密这个领域感兴趣,可以简单了解下这些概念。进入正题之前先唠叨几句,不久前听到一个名词叫——费曼学习法,核心思想就是用通俗的话语把复杂道理或技术讲清楚,如果你已经明白了这个方法的含义,那么我好像离成功又进了一步。其实这个方法一直在尝试使用,但是没想到它居然有个“洋气”的名字。
2024-01-03 16:50:09
311
转载 公钥/私钥,加密/解密 和 签名
所以只能保证身份验证和加密内容的完整性(因为如果被篡改了,是无法对验证签名的完整性),并不能保证加密内容会不会被窃取)如果甲想给乙发一个安全的保密的数据,那么应该甲乙各自有一个私钥,甲先用乙的公钥加密这段数据,再用自己的私钥加密这段加密后的数据.最后再发给乙,这样确保了内容即不会被读取,也不会被篡改.” 是指私钥只掌握在某个人手里,这段信息可能会被人窃取过去,但也是用公钥加密后的信息,没有私钥解密,就无法知道信息的具体内容)换种说法,公钥和私钥是一对,谁都可以加解密,只不过谁加密谁解密是看情景来用的。
2024-01-03 15:41:55
1424
转载 Ubuntu升级Cmake的正确方式
详细参考:(151条消息) Ubuntu升级Cmake的正确方式_cmake 升级_Liangtao`的博客-优快云博客
2023-06-23 18:18:50
493
转载 交叉编译工具查看支持c或者c++标准
提示 error: unrecognized command line option '-std=c++17’即是不支持。工具后面输入 -std=c版本或者c++版本。只提示 no input files。如下查看是否支持c++17。正常支持的版本c++11。
2023-06-17 23:39:32
1216
原创 查看当前编译器(或交叉编译器)支持的C/C++标准
如果已经配置到系统环境中则直接使用;如果没有配置到系统环境中,找到当前使用的交叉编译器的路径;或者编写一段小代码:对应关系如下如果没查到,则默认是c89的标准;如果是#define __STDC_VERSION__ 199901L,则默认支持的是c99标准;如果是#define __STDC_VERSION__ 201112L,则默认支持的c11标准;
2023-06-17 23:31:46
3980
转载 关于把类放到结构体中
一、注意两点1.C++中struct和class的语法是一致的,但public\private属性相反2.语法成份的嵌套:class嵌套class没有问题,class嵌套struct或者相反都是没有问题C++中struct和class的区别仅仅在于前者默认成员为Public而后者为Private.........
2022-04-11 11:48:25
757
原创 shell变量$#,$@,$0,$1,$2的含义解释
变量说明:$$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。$@所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。$#添加到Shell的参数个数$0Shell本身的文件名$1~$n添加到Shell的各参
2022-04-08 18:17:00
397
转载 shell之通过判断上次程序是否执行成功
shell之通过if [ $? != 0 ]判断上次程序是否执行成功1、问题在shell脚本里面有时候我们需要判断上一个程序有没有执行成功,比如用chomd 777 file命令,我们可以用通过if [ $? != 0 ]判断$?这里表示上一次运行的结果:2、代码实现#!/bin/bash test(){ return 2; } test result=$? echo "result is:"$result echo "chenyu" #这里不能写
2022-04-08 18:12:07
1284
转载 Shell中特殊的字符串测试符号: =~
关于字符串测试运算符,咱们都知道有 : -a 、-n、 =、!=、> 、< 。-a : # 判断是否为空字符串,是空则为 true。-n : # 判断是否为非空字符串,非空则为 true。= :# 判断两个字符串是否相等,等于为 true 。!= :# 判断两个字符串是否不相等,不等于为 true 。> : # 从字典上看,如果 string1 排在 string2 之后,则为 true 。< : # 从字典上看,如果 string1 排在 string2.
2022-04-08 18:09:21
7029
转载 shell判断是否为root权限
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1fi
2022-04-08 10:44:58
711
转载 linux自解压安装脚本
下面整理一些自解压安装脚本,可以用来做生产环境的一键安装配置包。省得登录每个服务器去做安装配置1,从指定行开始自解压#!/bin/bashrm -rf /root/lnmpARCHIVE=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' $0`tail -n+$ARCHIVE $0 | tar xzvmv lnmp0.7 /root/lnmpexit 0__ARCHIVE_BELOW__2,从指定字符开始自解压#!/bi
2022-04-07 15:13:05
865
转载 Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val"运行实例 »执行脚
2022-04-07 15:04:48
485
转载 shell中的特殊符号
# 注释作用, #!除外,在参数替换echo ${PATH#*:}这里不表示注释,数制转换,不表示注释echo $((2#101011)) ; 命令行分隔符, 可以在一行中写多个命令.例如p1;p2表示先执行p1,再执行p2 ;; 连续分号,终止 case 选项 . . 隐藏文件前缀 . 命令等价...
2022-04-07 14:57:57
999
1
转载 eFuse技术
1. 概念eFuse的概念最早来源于2004年IBM工程师的发现。该发现表明:与更旧的激光熔断技术相比,电子迁移(EM)特性可以用来生成小得多的熔丝结构。EM熔丝可以在芯片上编程,不论是在晶圆探测阶段还是在封装中。采用I/O电路的片上电压(通常为2.5V),一个持续200微秒的10毫安直流脉冲就足以编程单根熔丝。通过运用eFuse技术,允许计算机芯片的动态实时重新编程。抽象地说计算机逻辑通常是“蚀刻”或“硬编码”到芯片上,在芯片完成后不能改变。通过使用eFuse技术,芯片制造商可以允许..
2022-04-02 15:52:37
4954
转载 NVM, PROM, OTP, eFuse傻傻分不清楚
1. 什么是NVM?NVM: Non-Volatile Memory,非易失性存储器NVM 的特点是存储的数据不会因为电源关闭而消失,像 Mask ROM、PROM、EPROM、EEPROM、NAND / NOR 闪存 (Flash Memory) 等传统 NVM,以及,目前许多正在研发的新型态存储器,如磁性存储器 (MRAM)、阻变存储器 (RRAM)、相变存储器 (PRAM)、铁电存储器 (FeRAM) 等等都属于 NVM。所以NVM的概念很大。从可编程次数来看,NVM可以分为3类:MTP:
2022-04-02 15:48:56
3127
转载 安全加密 - 秘钥和算法关系
密钥和加密算法之间关系按照密码学原则:所有算法都是公开的,只有密钥是保密的,攻击者无法破解密文的算法才是好的算法。明文+加密密钥,经过加密运算 得到 密文。 密文+解密密钥,经过解密运算 得到明文。大部分密码算法,加密运算和解密运算是完全一样的,只是所用秘钥不同。对称加密,加密解密的秘钥相同。非对称加密,加密解密的秘钥不同。...
2022-04-02 11:37:50
1524
1
转载 nxp i.mx6系列处理器修改和查看eFuse的方法
博主在发此博文前,已经在i.mx6ul和i.mx6ull处理器验证过了。在uboot阶段进行查看或修改eFuse,语法如下。=> fuse read <bank> <word> [<cnt>]//从影子寄存器中读取eFuse的值=> fuse sense <bank> <word> [<cnt>]Reads the eFuse value directly from the fusebox.=> f
2022-04-01 19:41:26
859
转载 浅析安全启动(Secure Boot) —写得很好
前言安全启动的根本目的是为了防止消费者从软硬件层面对产品的部分关键系统进行读写、调试等高权限的操作。以限制消费者的能力,来达到保护产品的商业机密、知识产权等厂家权益的目的。当然,厂家是不会这样宣传 Secure Boot 的。他们的文案通常都是通过这项技术保护用户的隐私,防止恶意软件修改系统软硬件等等。不过不论如何,随着 ARM 架构的广泛授权,基于 TrustZone 的 Secure Boot 也越来越普遍了。本文是通过我自己对市面上的一些基于 ARM TrustZone 的 Sec...
2022-04-01 18:45:45
20034
5
转载 使用dd命令快速生成大文件或者小文件的方法
1. dd命令可以轻易实现创建指定大小的文件,如dd if=/dev/zero of=test bs=1M count=1000在当前目录下会生成一个1000M的test文件,文件内容为全0(因从/dev/zero中读取,/dev/zero为0源),但是这样为实际写入硬盘,文件产生速度取决于硬盘读写速度,如果欲产生超大文件,速度很慢。2.在某种场景下,我们只想让文件系统认为存在一个超大文件在此,但是并不实际写入硬盘dd if=/dev/zero of=test bs=1M cou..
2022-03-24 18:09:08
10371
转载 linux 命令 pushd popd cd 的区别
与linuxcd命令相似,用pushd实现在不同目录间切换 在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径名,这难免让人有些难以忍受但你可以用以下的一个或两个步骤来避免所有多余的输入:用命令行解释器中的历史记录,或者用命令行函数pushd 用命令行解释器中的历史记录的好处是只需按很少的键在命令行中用向上的箭头来查找你用过的命令,直到你找到,然后按回车键如果你所切换的两个目录在整个驱动器的子目录结构中很接.
2022-03-24 16:32:51
278
转载 echo >”和“echo >>”的区别
> 输出重定向>> 输出追加重定向---------------------------------------------------------------------------------------------------------------------echo hello A将字符串hello A输出到屏幕---------------------------------------------------------------------------
2022-03-24 16:29:06
472
原创 进程间通信的发布订阅模型注意事项
1. 进程间通信,根据通信数据量的多少,选择通信方式。2. 在数据量比较大的情况下,首选socket通信。3. 进程模块的业务都是异步的,发布订阅模型相对比较方便。4. 加入进程A为发布端,进程B为订阅端。5. B进程关心A进程中的某些数据,所以A进程数据变化的时候,需要主动告知到B进程。6. 而A进程中的所有数据,B进程未必全部关心,可能B进程只关注A进程的某部分数据,所以需要B进程先向A进程订阅 所关注的数据项 和 B进程标识(统一规定)。7. 进程模块的业务都是异步的,所.
2022-02-18 15:48:22
552
原创 关于i2c_msg的一点注意事项
首先对于i2c_msg的说明:一个i2c_msg结构变量,代表着一次单方向的完整传输。 正确理解上面这句话的意思,就能正确使用linux中使用i2c_msg对于i2c的读写操作。 来看一下i2c_msg的定义(位于:linux-3.10\include\uapi\linux):/** * struct i2c_msg - an I2C transaction segment beginning with START * @addr: Slave address, ...
2022-01-18 10:42:40
2541
转载 I2C中关于ACK和NACK的几点东西
I2C的数据格式无数据(空闲):SCL=1,SDA=1; 开始位(Start):当SCL=1时,SDA由1向0跳变; 停止位(Stop):当SCL=1时,SDA由0向1跳变; 数据位:当SCL由0向1跳变时,由发送方控制SDA,此时SDA为有效数据,不可随意改变SDA;当SCL保持为0时,SDA上的数据可随意改变; 地址位:定义同数据位,但只由Master发给Slave; 应答位(ACK):当发送方传送完8位时,发送方释放SDA,由接收方控制SDA,且SDA=0; 否应答位(NACK):当发
2022-01-18 10:02:48
3769
转载 i2c驱动中关于i2c_msg的标志位说明
I2C_M_IGNORE_NAK:设置这个标志意味当前i2c_msg忽略I2C器件的ack和nack信号。I2C_M_NOSTART:设置这个标志意味当前i2c_msg不发送start信号。如果一个i2c_msg没有定义I2C_M_NOSTART而且又不是msgs序列里的第一个 i2c_msg,则回发送重复start信号,我想这就是这个标志起这个名的原因。我们可以猜想,1.msgs序列第一个数据必须是地址,同时必须不定义这个标志位2.在进行读数据,要从写操作转变为读操作时,会发重复star
2022-01-15 17:07:57
548
原创 解析linux中模拟IIC的iic-gpio.c实现代码
/* * Bitbanging I2C bus driver using the GPIO API * * Copyright (C) 2007 Atmel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by t.
2022-01-15 16:52:52
1060
原创 解析linux中使用gpio口模拟IIC的实现代码
/* ------------------------------------------------------------------------- * i2c-algo-bit.c i2c driver algorithms for bit-shift adapters * ------------------------------------------------------------------------- * Copyright (C) 1995-2000 Simon G. .
2022-01-15 16:44:34
817
转载 Linux 驱动面试题总结
1、 Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备。 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少实现open,close,read和write系统调用。字符终端、串口、鼠标、键盘、摄像头、声卡和显卡等就是典型的字符设备。 块设备:和字符设备类似,块设备也是通过/dev目录下的文件系统节点来访问。块设备上能够容纳文件系统,如:u盘,SD卡,磁盘等。 ...
2021-12-31 08:18:46
294
转载 Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
前面我们学习了字符设备结构体cdevLinux 字符设备驱动开发 (一)—— 字符设备驱动结构(上) 下面继续学习字符设备另外几个重要的数据结构。 先看下面这张图,这是Linux 中虚拟文件系统、一般的设备文件与设备驱动程序值间的函数调用关系;上面这张图展现了一个应用程序调用字符设备驱动的过程, 在设备驱动程序的设计中,一般而言,会关心 file 和 inode 这两个结构体 用户空间使用 open() 函数打开一个字符设备 fd = open("/dev/h...
2021-12-30 20:22:28
531
转载 Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。 具体udev相关知识这里不详细阐述,可以移步Linux 文件系统与设备文件系统 —— udev 设备文件系统,这里主要讲使用方法。 在...
2021-12-30 20:17:22
736
转载 Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
我们已经介绍了两种重要的数据结构 struct inode{...}与 struct file{...} ,下面来介绍另一个比较重要数据结构 struct _file_operationsstruct _file_operations在Fs.h这个文件里面被定义的,如下所示:struct file_operations { struct module *owner;//拥有该结构的模块的指针,一般为THIS_MODULES lo...
2021-12-30 20:12:47
1486
转载 Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等。每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设...
2021-12-30 19:43:20
2201
原创 malloc,calloc 和 realloc 的实现原理
malloc,calloc 和 realloc是应用层用于开辟内存的三个函数。 实现原理 malloc / calloc 函数的实现原理:它维护一个可用内存链表(即所谓空闲链表)。调用时,它在该链表中寻找一个满足用户请求所需要的内存块,这样就会出现三种情况:如果找到一块与用户请求所需要大小相同的内存块,那就将该块内存返还给用户。 如果找到一块比用户请求所需要大小更大的内存块,则将该内存块一分为二(一块的大小与用户申请的大小一样,另一块就是剩下的字节),将分配给用户的那块内存传递给用户,将
2021-12-30 10:13:22
795
2021嵌入式发展与数字化营销调研20210125.pdf
2021-02-01
2021中国嵌入式产业发展现状及趋势分析.pdf
2021-02-01
电力行业62056标准全套.rar
2019-12-27
详析GPS漂移现象与定位不精准的诸多因素.docx
2019-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人