
C语言
Xueqian E
这个作者很懒,什么都没留下…
展开
-
git checkout到指定的commit ID
格式就是git checkout + commit IDgit checkout最主要就是切换分支来用的有关 Git 中 commit 的原理 理解 及 reset、checkout 命令详解_WWWWWWWWolf的博客-优快云博客git checkout 切 commit_前端精髓的博客-优快云博客使用git checkout命令切换到指定的commit_汪子熙的博客-优快云博客_git切换到某个commit原创 2022-12-08 10:06:26 · 3078 阅读 · 0 评论 -
系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)
这里需要特别注意的是,关于用户态或是system态的守护进程,是在systemd里面就开始界定了的,可以ps | ef grep systemd来看到。红色警报一出来玩家没有选定的目标,不知道自己在哪,还要自己去找到基地车,然后在地图里找一块风水宝地来展开基地车,才能开局;星际争霸就不一样,一出来就在自己家里,知道自己农民和基地在哪,直接开始搞建设就行了。其他启动中涉及到的各种东西,什么BIOS,MBR,GRUB等等本质都是在做这两步。计算机启动先启动bios,再去读MBR,MBR动了才会启动操作系统。原创 2022-11-26 13:37:31 · 1084 阅读 · 0 评论 -
定时器的使用和线程安全
在linux下如果对定时要求不太精确的话,使用alarm()和signal()就行了; 但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数。核心api:int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);调用成功返回0,否则返回-1;which为定时器类型,setitimer支持3种类型的定时器:ITIMER_REAL: 以系统真实的时间来计算,它送出SIGALRM原创 2022-11-17 16:03:29 · 535 阅读 · 0 评论 -
ubuntu上运行make menuconfig两种报错
1) 如果如上报错,没有target,这是因为运行这个make的时候没在对应的目录下运行,通常是有make的目录,这种系统性的编译的,则是应该在代码的根目录。我这里先看arm-linux-gcc -v 发现arm-linux-gcc:command not found,说明这里没合适的编译器。先装libgl1-mesa-dri:i386,显示这个的确是需要装,共386M(这个mesa也是linux的图形系统)个lib32ncurses5 lib32z1,拉成功了,这个东西是负责图形化make的。原创 2022-11-15 15:58:42 · 2952 阅读 · 0 评论 -
switch里面,一开头就放default是什么意思
注:不会一进去就退出,而是会去进行匹配的。(一般来说default都是放最后的类似return)这是因为default只有在case失败的情况下才会去执行,所以这个default在哪里都可以。2.如果这里面没有break,那么程序会先去跑default下面的case,会一直循环。5.这是一个无线状态机,华为里面是把所有状态写进一个数组,然后匹配数组调用回调函数。4.switch case比if 效率更高,所以讲究人一般用这个。1.会第一个去找case,case都找完了才会去找default。原创 2022-11-10 17:01:24 · 3508 阅读 · 0 评论 -
imx6获取和同步时间
imx8到自己客制的文件夹目录里面,配置好当前层的mk和设备树的mk后,到顶部目录export导入环境变量,然后source ,lunch,之后到对应的修改好的目录里面mm单编,编成功后的Log会提示编出来的东西在哪个目录里,一般是out/里面。2)adb push进去的时候,不要push到imx8的/storage下面,去这下面跑应用程序是permission denied,最后是挪到/data下面才跑通的,确保跑之前把应用程序chmod 777一下。对应接收端,imx8这边的还需要按上面所说的配mk。原创 2022-11-02 20:03:28 · 795 阅读 · 0 评论 -
设备树文件里的aliases和chosen
也就是所谓的label,这样一来的话,以后在给它们这些设备都编了号之后,以后访问设备就通过&label就可以了。有点类似于define,但是这个在设备树里面编号了之后的话,起作用的范围就是全局性的了。是因为它里面的东西一般是boot在启动的时候,在boot的源码里面会有专门的函数调用来填入东西进去。其次,它和前面的aliases一样,虽然是设备节点的书写格式存在于设备树文件里,但是它也不是一个真实的设备。这个其中往里的写的函数的逻辑一般都是先看里面有没有内容,没有内容会自己往里写的。原创 2022-11-01 13:53:36 · 1428 阅读 · 1 评论 -
dtsi---dts即设备树的头文件(公共部分)
11原创 2022-11-01 11:15:23 · 842 阅读 · 0 评论 -
pcan的dbc和project等的配置
2.只有project还不行,还需要新建一个connection,如果此时没有实际连线的连接,就新建一个virtual connection,这个virtual connection是不依赖于实际的物理线路连接的,意思就是,你还没连上线也可以新建并且用它。4.然后到project browser里面,点receiver/transmitter,进入进去,再在这个里面用把xmt文件apply来翻译dbc文件。1.先要新建一个Project,因为后面的dbc和xmt的文件都需要附庸于一个project才行。原创 2022-10-31 18:07:30 · 2445 阅读 · 0 评论 -
IMX6上获取时间的补充(io的宏定义)
这里面看到实际上rtc-dev.c这是驱动层的,rtc.h\uapi是用户层的,然后Linux下的include里面的rtc.h实际是包含了前面的,直接去拉前面的,这个的话实际可有可无。实际是在下面找到的:rtc-dev.c 和rtc.h\uapi和rtc.h\include\linux里面。也就是定义的这些东西, 这些东西哪里找的呢,也就是这RTC_等等这些define。看这里是去拉的用户层的rtc.h\uapi。原创 2022-10-31 17:57:37 · 138 阅读 · 0 评论 -
IMX6ULL上获取RTC时间
这里的rtcfd就是struct device,RTC_RD_TIME在这里就是控制的io,后面的&tm就是unsigned long,然后这个函数 ioctl本身就是对上面ops里面的函数指针(int)(ioctl *)(XXXX)的调用,这里相当于省略了ioctl=ioctl这一步,他们的首地址是一样的,因为名字都ioctl。然后前面的define定义的宏,就是对cmd里面的RTC_RD_TIME这样的IO进行的定义。原创 2022-10-31 17:38:57 · 697 阅读 · 0 评论 -
添加默认网关route add default gw
使用route add default gw 10.64.64.64 ,添加对应的此地址进去后,再ping外网可通。这样的提示,这后面的default to 的地址就是网关的默认指向,需要把这个手动添加到网络配置里面。如果碰到连接时,无法determine IP address,即网关无法解析地址的情况。如果不添加此默认网关,则只能ping本地inet和127.0.0.1。需要手动配置路由网关的指向。原创 2022-10-08 17:39:24 · 7439 阅读 · 0 评论 -
can盒子信息流程轨迹(pcan工具+imx8qm为例)
PC-->can盒-->mcu-->(内核-安卓)soc。原创 2022-08-25 14:46:18 · 418 阅读 · 0 评论 -
micro微内核和mono宏内核
他的进程间通讯依靠----消息。用户态如果要这些相关服务,就会给内核发消息 ,内核再把这条小心转发给用户态里面的,原本是内核里的这些特殊服务进程,由他们来最终完成相关服务。内存管理服务收到信息,就开始工作,割一块内存分出来,然后把这块内存首地址发给内核,也是通过消息;因为在微内核里面整个内存管理模块都被丢出去到用户层变成了服务,不再是系统内核级别的系统调用了,因此也无法被称为“内核接口”。其他模块如进程,文件系统,存储不放入内核,而是变成了一个用户态的服务进程,在用户空间作为一种特殊的服务进程存在。...原创 2022-08-12 15:08:25 · 238 阅读 · 0 评论 -
ubuntu20.04下android-tools-fsutils安装问题
国内镜像源里,这个东西直到18.04版本有,以后的都没有源可以直接安装下载。需要自己去下载它的deb文件,用dpkg -i +路径安装。安装的时候会提升安装这个东西需要依赖任意版本的python环境,检查python环境,如果安装了python还是不行,就用apt --fix-broken install来修复。修复完了回到deb文件,继续dpkg -i ,安装成功。...原创 2022-07-14 14:29:42 · 3564 阅读 · 1 评论 -
ubuntu装机分区
系统原创 2022-07-06 19:57:57 · 729 阅读 · 0 评论 -
EFI和Legacy启动方式
【小白装系统】——BIOS中的UEFI和Legacy启动模式_周士豪的博客-优快云博客_uefi和legacy的区别原创 2022-07-06 17:10:16 · 417 阅读 · 0 评论 -
文件.so,.ko,.a,.o
.so用户态的动态链接库,内核态代码不能访问.ko内核态的动态链接库,负责内核模块之间互相调用。用户态代码不能直接访问,只能间接与之通信。.a静态库文件,静态链接时使用的.o编译生成的目标文件,.o文件被打包后就是.a文件...原创 2022-06-13 11:44:01 · 235 阅读 · 0 评论 -
电动车高转效率递减原因
1.电动车多使用单级减速电机2.电池会持续高放电,这就会使得电量消耗增大电机在高转速下会有一个效率的骤降原创 2022-06-10 13:12:30 · 1223 阅读 · 0 评论 -
数据链路层封装的帧的结构
数据链路层负责将位组合成字节,并将字节组合成帧。帧被用在数据链路层,从网络层传递过来的数据包被封装成帧,以根据介质访问的类型进行传输。以太网站点的功能是使用一组称为MAC帧格式的位,在站点之间传送数据帧。在帧格式中,采用循环冗余校验(CRC)进行差错检测。但记住,这是差错检测,不是差错纠正————————————————太网封装IP数据包的最大长度是1500字节。也就是说以太网最大帧长应该是以太网首部加上1500,再加上7字节的前导同步码和1字节的帧开始定界符。具体就是:7字节前导同步吗+1字节帧开始定原创 2022-06-08 15:18:02 · 1684 阅读 · 0 评论 -
开发日志_1
基于nxp的imx8qm 的智能座舱系统1.给的资料里面并没有完整的子板的原理图,需要到论坛进行下载。论坛也没有,自己开帖询问管理人员,获得了datasheet2.根据datasheet显示,或者两个信息:a)我需要bringup的几个基本sensor是焊在板子上了的,无需另外接。sensor在这个板子上走的是i2cb)GPS模块在这个板子上是没有的,需要另外购买另外接,它一般走的是串口(通过论坛查找信息了解到)。走的软件协议一般是NMEA。可参见:null一、GPS 简...原创 2022-05-18 15:26:28 · 426 阅读 · 0 评论 -
EXQ_信号量集合相关函数 semget.c
#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>union semun { int val; /* cmd为SETVAL需要的整数值 */ struct semid_ds *buf; /* cmd填IPC_STAT, IPC_SET需要的缓冲区首地址 */ unsigned s.原创 2021-09-28 00:29:00 · 157 阅读 · 0 评论 -
EXQ_互斥实现多进程写同一文件
#include <stdio.h> //这个是sem_init.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>union semun { int val; /* cmd为SETVAL需要的整数值 */ struct semid_ds *buf; /* cmd填IPC_STAT, IPC_SE.原创 2021-09-28 00:27:44 · 294 阅读 · 0 评论 -
EXQ_同步互斥相关函数
1.创建集合semget() int semget(key_t key, int nsems, int semflg); 功能:创建信号量集合 参数:@key 唯一的秘钥,由ftok()合成 @nsems 信号量个数 @semflg 创建标志,选填如下: IPC_CREAT //创建,常用IPC_CREAT|0666 IPC_EXCL //检查唯一性,常用IPC_CREAT|IPC_EXCL|0...原创 2021-09-28 00:23:48 · 165 阅读 · 0 评论 -
EXQ_消息队列收发
#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <errno.h>struct msgbuf{ long mtype;//'消息类型',必须大于0 char mtext[126];//消息文本,长度可更改,不一定是126};int main(int argc, const char .原创 2021-09-28 00:20:45 · 164 阅读 · 0 评论 -
EXQ_信号相关函数
1.发送信号kill()raise() int kill(pid_t pid, int sig); 功能:发送sig这个信号给pid这个进程 参数:@pid 指定要接收信号的进程 @sig 指定发送信号的编号 返回:成功0,失败-1并设置errno int raise(int sig); 功能:发送sig这个信号给自己 参数:@sig 指定发送信号的编号 返回:成功0,失败非0 2.信号处理函数 ...原创 2021-09-28 00:16:33 · 136 阅读 · 0 评论 -
EXQ_进程同步和互斥讲义
1.读进程如何知道写进程写过数据? 写进程写完数据之后'应该主动通知读进程'读数据,而不是让读进程一直读空数据!2.信号通知 —— 是一种异步机制,接收方可以做自己的事情的,但通知方会不定期通知接收应该干什么! 1)生活中的信号 //老板和秘书 2)linux中的信号 //Ctrl + C就是信号 3)信号的查看及发送kill指令 //kill -l 4)常用信号 //通过kill -l查看 2) SIGINT //中断进程的信号 ...原创 2021-09-28 00:15:14 · 175 阅读 · 0 评论 -
SAMBA配置详解
配置Samba服务器配置现实文件共享(详解)_末班车的技术博客_51CTO博客转载 2021-09-24 19:36:32 · 93 阅读 · 0 评论 -
SAMBA服务器配置的踩坑
SAMBA服务器安装,网上都有,简单。需要注意的是1.如果一开始的yum那里走不通就先apt-get install update 在apt-get install upgrade2.到增加SAMBA用户的时候,即:第二步需要配置samba服务器,使用如下命令打开samba的配置文件 sudo vi /etc/samba/smb.conf加入配置信息[share] comment = share folder browseable = yes pa...原创 2021-09-24 18:01:58 · 283 阅读 · 0 评论 -
C语言函数的底层实现
【动画详解】C语言 函数基础及其底层原理_哔哩哔哩_bilibili我们所写的代码实际上是保存在一段连续的内存空间中,所以处理器为了保证代码能够不间断的执行下去,必须使用一定的手段来确定下一条指令的地址,这便是程序计数器PC1.程序计数器中永远存放下一条指令的地址,从而为CPU指明方向(把CPU想象成为一个蒙着眼睛只会干活的人)。所以如果想要CPU跳转到某个位置,只需要修改程序计数器PC的值,变成你想要跳转的目的地址即可。2.顾名思义就是古时候暂时安置人和货物的地方,即客栈。也就是数原创 2021-09-18 00:35:10 · 1090 阅读 · 0 评论 -
补码有什么好处
this指针是什么: C++里面每个类的对象都默认包含一个指向对象自己的指针,这个指针叫做this指针 相当于英语里面的me原创 2021-09-13 23:58:39 · 5544 阅读 · 0 评论 -
进程的3种基本状态
1.就绪2.执行3.阻塞就绪:已经具备运行条件,但是还没分配CPU,即CPU还没来运行自己运行:占用CPU正在执行阻塞:相对运行而言的,就是等待,不能运行。是低于就绪的一种状态。三种状态互相切换的原因:运行--->就绪:1. 时间片用完了 2.被更高优先级的进程抢占,被迫让出CPU就绪--->阻塞:不可能发生,因为就绪根本就没运行就谈不上阻塞 。阻塞--->运行:不可能发生...原创 2021-09-07 20:11:02 · 2445 阅读 · 0 评论 -
局部变量和函数参数为什么要放在栈中
局部变量和函数参数为什么要放在栈中 - 简书 (jianshu.com)局部变量,顾名思义其作用域属于局部。全局的变量,意味着谁都随时随地可以访问,所以其放在数据段中。而局部变量只是自己在用,放在数据段中纯属浪费空间,没有必要,故将其放在自己的栈中,随时可以清理,真正体现了局部的意义。这个就是堆栈框架,栈由于是向下生长的,堆栈框架就是把esp指针提前加一个数,原esp指针到新esp指针之间的栈空间用来存储局部变量。解释一个概念,堆是程序运行过程中用于动态内存分配的内存空间,是操作系统为每个用户进转载 2021-08-20 15:32:50 · 3718 阅读 · 1 评论 -
FILE *fp是什么?FILE是一种类型,是一个预写的结构体
FILE 是C语言的stdio.h里面预定义的一个结构体,是管理文件流的一种结构。本质是对设备的文件IO操作的一种封装,根据操作类型的不同有stdin,stdout,stderr ;根据对象设备的不同有stdprn ,stdaux(文件是池子,文件流就是流入流出的水)fp是它的一个结构体指针变量,要进行文件流操作的时候,需要先定义出一个它的指针变量: FILE *fp因此,标准库中提供了通用的函数来读取和写入流,如fopen,fclose等等,如果要进行具体的操作,那么接下来就...原创 2021-08-15 18:27:43 · 47515 阅读 · 3 评论 -
五子棋项目的UML思路图
原创 2021-08-15 16:52:09 · 1149 阅读 · 0 评论 -
错题:char的取值范围
就是问 char 0x99 =i; int j; j=i; 问此时char转成int后,值是多少,应该是0x99 这个16进制数就是:9*16+9=153-256=-103 因为char的取值范围是-128到127之间。0x99是153,都超过了取值范围。然后就要用-128+25就是-103 (越了127就从-128开始就相当于剪256)...原创 2021-08-01 00:10:56 · 356 阅读 · 0 评论 -
学生管理系统,C语言
#include<iostream>#include<string.h>#include<cstdlib>using namespace std;struct student { char name[20]; char gender[20]; int old; char tel[20];};struct node { struct student data; struct node* next;};//建...原创 2021-07-22 07:45:06 · 116 阅读 · 0 评论 -
define和typedef区别
意义和地位不一样:#define是预处理,进行简单替换,不做正确性检查,预处理完就没了;typedef是起别名,编译的时候处理的,是代码内容的一部分;作用域不一样;#define作为预处理命令,写在头文件部分里面,在那里定义的,就从那里开始一直作用到整个文件的结尾;typedef则是,除非定义在函数外,可以一直作用到文件结尾,如果定义在函数里面,则函数结束,作用域就结束了。...原创 2021-06-26 17:24:28 · 144 阅读 · 0 评论 -
2021-06-18栈区堆区
栈和堆都在内存上,完整的叫法应该叫栈内存和堆内存。栈: 1.从高地址到低地址生长 2.使用连续的内存区域 3.栈的大小有限(可修改),会溢出栈溢出会造成原有的正常数据被改写。---------------------------------------------------------------------------------------------------------------------------------堆: 1.像高地址生长 2.需要手...原创 2021-06-26 17:18:08 · 82 阅读 · 0 评论 -
makefile和shell有什么不同---笔记
makefile用来组织各种库和代码的关系,组织其流程;shell是脚本程序,makefile和shell可以互相调用具体的用法和规则,语法不同原创 2021-06-26 17:16:51 · 273 阅读 · 0 评论