自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 串口通信与全双工、半双工、单工

单工:通信双方只能单向传输 即任何时间都只能A---- >B不能B----->A 半双工:同一时刻只能单向传输,但是可以A--->B也可以B---->A全双工:同一时刻通信双方可以双向传输把上述的概念放到串口通信中(I²C以及SPI)其它的不了解1、无论是I²C还是SPI都不是单工的,应为他们都有收发数据的功能2、SPI通信是全双工的,I²C是半双工的3、SPI是有数据接收线和数据发送线的 两条数据线,也就是说它有两根线是专门用来传输数据的,这两根线...

2020-05-19 16:44:32 218

原创 I²C(易混淆点备忘)

1、两个概念:发送端与接收端;主机与从机;主机(master)与从机(slave)既可以作为发送端也可以作为接收端2、空闲状态高电平(上拉电阻),也就是说I²C无论主机、从机都有拉低数据总线(SDA)的能力3、时钟信号线一直由主机掌握,无论作为接收端还是发送端4、起始信号:SCL高电平,SDA由高变低;结束信号:SCL高电平,SDA由低变高;SCL:时钟信号线 SDA:数据线5、ACK是低电平,NACK是高电平;ACK代表收到,NACK代表没有应答除了读模式(主机收到数据后把SDA线拉高..

2020-05-18 17:45:37 417

原创 I²C的一些常识

至于起源什么的百度或者其他都能介绍的很详细。 IIC总线是一种串行数据总线,IIC主要有两条线,时钟线SCL和数据线SDA。通常IIC空闲时线路电平为高,主要依靠外部上拉电阻来控制,也就是说启动IIC通讯模式之后数据线和时钟线默认是拉高的。 当时钟线保持高电平数据线从高变低是起始信号,意味着主设备准备好通讯了;需要注意的是起始信号过后两条线都会被拉低因为要为收发数据做准备。总线...

2019-12-30 09:29:25 445

原创 MFC出现的“灾难性故障的问题”和“扩展程序提供程序未能为该对象返回扩展程序问题”

先描述一下我的问题:用的是vs2017中的mfc,在对控件习惯性的右键>>添加变量 时出现了上述问题。最近在使用MFC进行界面UI设计时忽然出现标题中的问题,我记得除了新添加了几个slider控件之外没有任何其他的操作,然后就是上网上去找,花了一天时间,相关方面的信息是真少,基本上把网上的所有方法都试了一遍,结果仍然是没有什么用。网上几种办法应该能解决绝大多数出现这个问题的人,但...

2019-08-20 17:15:47 1957 1

原创 MFC

用Windows进行C/C++开发是要比Linux下复杂一点当然功能也多一点。用vs写代码多多少少出现或遇到过Unicode的问题,我看了网上的解释,ascll表中的字符也就是以前的字符全部都是单个字节的字符,所以ansi编码是万能的,后来出现的汉字一个汉语字符占两个字节这就会出现一些乱码,后来为了统一就出现了Unicode编码,他把所有的单个字符变为两个字节长度,里面有个定义 typedef u...

2019-08-12 09:43:13 96

原创 关于extern关键字的备忘录

首先c/c++中有声明和定义的区别,其实我觉得可以加上一个初始化的概念防止混淆。 比如:int a;这句语句就是定义即使它没有被初始化,当然位置不同它是有默认值的(全局变量好像默认是0,局部变量就是乱码); 又比如:int a = 0;这句语句是对a进行了初始化的定义,也算是定义,那么什么才是声明呢? 在普通的.cpp文件中,加了extern 并且没有对变量...

2019-07-29 10:56:57 62

原创 关于vs2017编译时出现的Unicode的问题

用vs编译某个项目时,通常是已有的项目,或者是以前用版本较低的vs编写的项目,有时会报错,或者是警告。解决办法:把出现问题的文件可能是某个源文件(.cpp文件)在文件夹中找到,用系统自带的记事本的方式打开,另存为自己的目录下把编码改为需要的就行如Unicode格式。另外我用的是win7。...

2019-07-25 13:33:08 1892

原创 I²C起始条件和停止条件

当时钟线SCL保持高电平,SDA数据线从高到低,此时达成I²C达成起始条件;当时钟线SCL保持高电平,SDA数据线从低到高,此时达成I²C达成停止条件;I²C只有两条线,一条数据线SDA,一条时钟线SCL。...

2019-07-18 09:48:42 731

原创 I²C

i2c式设备与设备之间通信的一种方式,它有两根线:串行数据线SDA和串行时钟线SCL,每个设备识别的方式是他们的地址,根据设备的功能,既可以做发射机,也可以做接收机。在数据传输时设备是被默认成主从模式,主设备是在总线上启动数据传输的设备,此时所有寻址的设备都是从设备。...

2019-06-26 11:12:43 1435

原创 关于Qt中几个常见控件及常用的函数

在使用Qt时,现在一般都是在“设计”中拖动控件,一般常用的有pushbutton,label,lineEdit,textEdit,combox等。pushbutton就很少的去设置什么属性,一般直接转到槽,编写槽函数也就是当做一个跳板执行函数体内操作。label一般在拖控件的时候就把需要显示的字打上去了,而且运行程序后界面中的label默认的不能修改。lineEdit与textEdit...

2019-06-13 16:49:27 931

原创 Qt学习

想学Qt的强烈建议Qt学习之路2

2019-06-11 10:38:27 57

原创 关于fwrite 读写出现多余字节的问题

近几天,老师给我布置了一个任务,完成把.prn 文件中有效字节片段取出来转化成为pdf格式。其他的都较为简单,主要就是我在用c代码完成提取片段后莫名其妙写到文件中之后多了0d这个字符,这个问题困扰了很久。问题是在于我用fwrite函数打开文件时没有加上二进制打开方式“b”的这个方式打开,用的是w+,正确代码应该是fopen("路径.prn", wb+");因为如果没有用二进制形式打开文...

2018-12-24 16:29:32 1610 4

原创 进程间操作 raise 与 kill

首先进程间进程间操作有raise和kill两种函数。他们的函数原型分别是:int kill(pid_t pid, int signal);int raise(int signal);成功返回0,失败返回-1kill和raise是用来发送信号的:kill把信号发送给进程或进程组;raise把信号发送给(进程)自身.raise = kill(getpid(), sign...

2018-10-08 17:43:50 132

原创 进程间的操作

 vfork 函数创建子进程时永远是子进程先执行,父进程后执行,并且子进程必须要指定退出方式即exit(1);用fork来创建进程时子进程与父进程随机执行,所以要避免子进程成为孤儿进程就需要一个函数wait(&status)这样就能保证父进程比子进程晚结束。僵尸进程:子进程结束之后没有被父进程回收孤儿进程:父进程先死子进程却没有结束;#include <stdio....

2018-08-17 19:21:46 83

原创 通讯录3.0 (包含文件保存与读取)

#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <string.h>#define BLACK

2018-08-16 19:39:57 93

原创 用栈和队列实现停车场

声明两个栈一个是停车栈一个是让路栈,当停车栈存满时,自动进入等候队列。当车进入停车场和离开停车场时都分别记录下时间,保存在栈和链表中,用链表去保存完整的信息。该项目有三个难点:1、出车时,也就是当车需要出去时需要通过让路栈实现出车。原理是要出中间某个元素就把这个元素之上的所有元素依次出栈并压入让路栈,然后保存一下时间并把他的所有信息保存到链表之中。最后把让路栈中的元素在出栈并压入原有栈中。此时需要...

2018-08-15 20:55:40 611 2

原创 两种文件操作

Linuxc中读写文件都是用的文件I/O模式,C语言也就是c库中用的是标准I/O模式,区别在于前者是直接对磁盘进行操作,后者是先保存大缓冲区中,针对流操作的。今天代码如下:功能是实现cp也就是Linuxc下的复制操作#include<stdio.h>#include <sys/types.h>#include <sys/stat.h>#inc...

2018-08-13 21:26:55 103

原创 八大排序-堆排序

重点主要在于调整函数,其中的for循环:for(tmp = a[pos]; 2*pos + 1 < len;  pos = child)   它不是一次循环,而是每次进入这个循环之后,只要有交换过的非叶子节点都会再一次循环。#include <stdio.h>void AdjustMinHeap(int *a, int pos, int len){ int temp...

2018-08-12 20:53:27 72

原创 链式队列

链式队列由队列指针,和各个节点组成。链式队列含有头结点。初始化的的代码如下:int queueinit(Q **q){ (*q) = (Q *)malloc(sizeof(Q)); // 先给队列指针分配空间 if((*q) == NULL) { return FAILURE; } Node *p=(Node *)malloc(sizeof(Node)); //新建一个头结...

2018-08-10 20:21:44 77

原创 用队列实现杨辉三角

今天先敲了一遍循环队列,理解之后写了杨辉三角。我用的算法是建两个队列,然后给第一个队列插入 0 1 0(这边解释一下为什么插入的是 0 1 0而不是1,主要是一个数据不好写循环语句;因为杨辉三角每一行要比前一行多一个数据,第一行1个,第二行2个,如果是单一个数据1,后面没办法实现加一因为根本没有两个数据可以加,如果是0 1 0,那么第一个是0直接置入,第二个就是0 + 1 = 1,后面一个就是...

2018-08-09 22:46:02 931 1

原创 用栈实现计算器

我们平时用swith语句写的计算器,只能处理简单的两个操作数和一个运算符,这样其实和日常应用方面差的有点远,所以我们今天学习了一种用栈来实现一条复杂运算式的计算。这个需要用到栈的相关知识,除此之外我们还需要学会如何把中缀转换成后缀表达式,比如:3+(4+5*2)-3这样一个表达式,从左至右遇到操作数压入栈1,遇到操作符压入栈2,当栈2的栈顶元素为空或者栈顶为‘(’ 时无脑压进栈,遇到右括号‘)’时...

2018-08-08 20:43:39 1121

原创 链表实现通讯录

#include<stdio.h>#include<stdlib.h>#include<string.h>#define BLACK "\e[0;30m"#define L_BLACK "\e[1;30m"#define RED "\e[0;31m"#defi..

2018-08-07 20:09:11 122

转载 中缀和前缀表达式

中缀与前缀表达式:首先他们都是表达式的一种记忆方法,区别在于运算符与操作数的相对位置的不同,前缀表达式的运算符位于与其相关的操作数之前,中缀在操作数之间,后缀就是位于操作数后面的意思。比如: 2 + 3  *5 - 4    是中缀表达式            +   -  * 3 5 4  2  是前缀表达式            3 5 * 2 + 4 -      是后缀表达式...

2018-08-06 21:14:08 173

原创 无头结点的链表实现

链表的插入(任何位置):int Link1Insert(Node **l, int p, int e){ int i = 1, count = 1; if((NULL == *l) && (p == 1)) { (*l) = (Node *)malloc(sizeof(Node)); (*l)->next = N...

2018-08-05 20:00:51 303

原创 链表基本操作

链表的定义:struct Link{ int data; struct Link *next;};链表和顺序表区别就在下面的*next,这是指向下一个结构体的,里面存放的是下一个结构体的地址。初始化链表(含头结点)int LinkInit(Node **s){ *s = (Node *)malloc(sizeof(Node)); if(*s...

2018-08-04 21:30:32 91

原创 数据结构学习总结

线性表是一种逻辑结构分为顺序表和链表,而顺序表和链表是两种存储结构。顺序表和链表的区别:顺序表的地址是连续的,即相邻的元素之间地址连续,存储方式是连续存储方式,而链表是一种链式存储方式。共同点是:它们元素个数都有限,而且逻辑上元素有先后次序,数据类型相同。顺序存储方式:使用数组实现,一组地址连续的存储单元,大小分配分为两种。一是 静态分配;二是动态扩展;与数组的区别在于数组是用的下标法...

2018-08-03 20:58:19 138

原创 通讯录完善版

历时几天的通讯录总算是告一段落了,可能有些地方没有达到最好的效果,不过逻辑还算完整,基本不会出现什么bug;  #include<stdio.h>#include<stdlib.h>#include<string.h>#define BLACK "\e[0;30m"#define L_BLACK ...

2018-08-02 20:04:13 93

原创 通讯录的基本功能的实现

#include<stdio.h>#include<stdlib.h>#include<string.h> # define size 1000int count = 0;int number;struct person { int no; char name[20]; int age; char sex[10]...

2018-07-31 23:15:16 592

原创 关于malloc()及内存的一些理解

今天尝试写了一下通讯录,过程中发现了一些问题。我们用的是结构体指针数组,结构体指针数组其实就是指针数组。它的元素是一群指向结构体数组元素地址的地址。先看一下定义吧:struct person{ int num; char name[20];};int main(){ struct person *p[10] = (struct person*)malloc...

2018-07-30 22:49:54 335

原创 指针、数组、结构体

const 修饰只读变量,用法如下几种:1、const int p;2、int *const q;3、int const *z;4、const int *a;5、const int * const b;第一个 是把p定义为一个只读变量,p的值不会改变,但是可以通过地址改变里面内容的值,但是不能通过p来修改对应内存的值;第二个是给指针q做了只读修饰,效果是q不能变,q原本是什么...

2018-07-29 20:54:08 198

原创 关于指针的一些看法

这几天复习了指针、数组、函数,所以联系起来可能比较混乱;不多说先上几个例子:#include<stdio.h>#include<string.h>#include<stdlib.h>void contri(char *str) // 这是一个给字符指针分配空间的子函数{ str = (cha...

2018-07-28 21:27:39 72

原创 7.27 学习心得

函数指针:格式形如  int (*p)(形参数据类型);相当于定义了一个指针指向了一个函数,在主函数中调用如下:void print(int x, int y);int main(){ int a, b; char (*p)(); //定义了一个函数指针; p = print; // 把print函数地址赋给p; p...

2018-07-27 20:32:19 67

原创 7.26学习日报

今天复习了一下指针与数组,结构体的一些内容。指针数组:是一个数组里面元素全是指针即地址,所以改变里面的元素要想操作指针一样,指针数组元素用之前应当进行初始化,不然编译时容易出现段错误;打印数组指针就是打印元素当前指向的地址内的内容。例如: char *str[10] = {"i", "am","from", "shanghai"};  int i;for(i = 0; i <...

2018-07-26 20:13:08 69

原创 7.25学习总结

static的两个要点:1、修饰全局变量时,改变变量的作用域,不能被其他文件调用这能被当前文件调用;2修饰局部变量时可以改变变量周期,知道程序结束时才释放栈空间,被static修饰的局部变量存放在静态数据区。printf()这个函数用的时候最好都加上\n换行,因为\n不仅有换行的作用,还有刷新缓冲区的作用;或者用完之后用fflush(stdout)函数。头文件中#include<st...

2018-07-25 19:31:47 71

原创 字符串及数组的相关算法

1、输入一串字符,在指定的位置插入一个字符: 4 main() 5 { 6 int i, p, length; 7 char c, a[20], b[100] ={'0'}; 8 printf("please input address:\n "); 9 scanf("%d",&p); 10 getchar(); 11...

2018-07-24 20:37:20 137

原创 7.23 学习日报

一维数组:格式 int  a[10] ;注意初始化数组之后机器会给数组分配地址空间,比如a[0]地址为 0x100,则a[1]为0x104 a[2]为0x108以此类推,其实里面的0x100,0x104与我们平时理解的还不一样他不是简单的‘位’,而是以字节为单位的,因为是用int来声明的所以元素之间相差4字节,并且低位的一定是a[0]。另外定义一个变量时 比如 int  b = 10;也是四个字节...

2018-07-23 20:45:20 62

原创 7.22 学习总结

1、这是把十进制转化成二进制的代码,并且可以选择修改某一位;#include<stdio.h>main(){    int a, p1, v, i, b[32];    printf("please input a number\n");    scanf("%d",&a);    printf("please input p1, v\n");    sca...

2018-07-22 22:13:33 71

原创 7.21 学习总结

今天主要是复习了C语言,C语言我们基本上都学过。但是都学的不怎么样,今天又重新复习了一下C语言中关于数据结构这块的知识。1、int  4字节  (-2^31-2^31-1)            double    8字节        short  2字节      long    4字节      char 1字节  (-128-127)                unsigned...

2018-07-21 20:02:09 87

原创 7.20学习总结

今天复习了gdb,shell。要想能用gdb进行调试,必须编译时加上  -g ;如gcc -g xxx.c -o xxx 。gdb xxx进入之后可以用 run 来运行;用list来显示每一行代码,next 向前执行一句,不进入子函数,step向前直行一句,有子函数的视乎自动进入子函数;break用来设置断点;return直接返回不管执行到哪一句;continue 从断点处执行;.sh...

2018-07-20 19:25:09 66

原创 7.19 学习心得

今日复习了一些vim编辑编译的相关知识与应用。vim的三种模式:插入模式 (i);命令模式(打开文件即可);底行模式(esc+:)。处于命令模式时有这样几个快捷键:数字+x 删除几个字符;数字+dd 剪切几行;数字+yy  复制几行 ;p粘贴;/之后可以查找内容,n下一个,shift+n上一个;u 撤销;shift+zz可以退出文本编辑。底行模式: +数字  将鼠标光标移动至数字行数处...

2018-07-19 19:32:37 407

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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