- 博客(22)
- 资源 (23)
- 收藏
- 关注
原创 为什么89C51的串口中断只能用T1
内部结构决定的。T0工作于方式3时,拆为两个独立的8位定时器,占用了TR1和TF1,而串口波特率发生器使用的定时器为方式2,自动重装初值模式,只要装了初值,启动了定时,就一直工作,其TR1和TF1就可以空出来给T0的方式3使用。...
2020-12-29 13:38:28 1347
原创 error: #130: expected a “{“
..\HARDWARE\Time_1s\time_1s.c(4): error: #130: expected a "{"原因在头文件少了;
2020-12-27 14:32:26 1715
转载 理解频域、时域、FFT和加窗 加深对信号的认识
理解时域、频域、FFT傅立叶变换有助于理解常见的信号,以及如何辨别信号中的错误。尽管傅立叶变换是一个复杂的数学函数,但是通过一个测量信号来理解傅立叶变换的概念并不复杂。从根本上说,傅立叶变换将一个信号分解为不同幅值和频率的正弦波。我们继续来分析这句话的意义所在。所有信号都是若干正弦...
2020-12-24 15:28:41 3334 4
原创 指针星号*的理解
星号*的理解在C语言中, *的用途有两个,一个是用于表示乘号,第二个与指针有关。虽然这两种用途都会用到,但这两者没有任何关系。*在指针中的用途主要有两个方面,第一种是用在指针定义的时候,与前面的类型结合,用于表示被定义指针变量的类型, *的个数表明了定义的指针变量的级数,如下所示。int *p; int* p;*靠前靠后都没关系,这时的“与p是两个不同的东西,星号表明p是一个一级指针变量,用于存放一个一级地址。但是需要注意下面的情况。int *p1, *p2: // p1和p2都是in.
2020-12-23 14:15:59 13662 3
原创 指针使用之三部曲
定义(声明)int *p=NULL;//初始化一下,防止野指针关联int a= 10;p =&a;// a空间的首地址给了p,所以p里面的地址常量指向了a空间,因此简称p->a空间。引用读空间:读值操作,前提是里面存有数据才行。int b=*p; //等价于b = a;写空间:向空间写入新的值。*p =30;//等价于a=30;...
2020-12-23 14:09:13 159
原创 高级语言如Java,C#的指针到哪里去了
C++里面保留了指针的使用,初学Java,C#等高级语言的同学,都会因为里面没有指针而困惑,甚至在想,难道这些高级语言就不需要访问内存空间了吗?凡是遇到过Java异常处理的同学,都会发现Java中有一种空指针异常,大多是因为我们使用了没有实例化的对象名导致的,因为没有实例化就没有为对象分配内存空间。既然有空指针异常,就证明Java是使用了指针的,只是全部都由类的底层封装好了,不需要我们关心, 目的就是跳过指针这一难点,使得Java简单实用。但是由于不能直接操作指针,面对频繁使用指针的底层开发而言,.
2020-12-23 14:05:03 303
原创 为什么需要指针
不管多么"高大上”的程序,最终都是在硬件上运行的,所有对于硬件的设置和访问,全部都是通过对内存操作实现的。广义上的内存可以包括寄存器、缓存、常说的内存(内存条)等,这些内存空间都是由一个个的字节构成的,每个字节都有地址,对于这些空间的访问,大多都是通过地址实现的。只站在C语言自身的角度,也可以看到指针的好处。比如fun1函数有一个自动局部变量a,它的作用域被局限在fun1函数内部, fun2函数是无法访问的;如果fun2想要访问fun1中a的话,我们可以将a的地址传递给fun2函数,当然前提是fu.
2020-12-23 14:03:03 193
原创 程序运行的目的
我们知道,驱动程序的目的就是为了管理硬件,驱动程序管理硬件的媒介就是寄存器(一种特殊的内存) ,通过对寄存器这种特殊内存的读(取)写(存) ,从而实现对硬件的功能设置以及数据的存取。所有软件本质上都是基于这样的原理在硬件上运行的,从而达到了软件与硬件融为一体的目的。学习指针的过程: 佛家说, "参透前,看山是山,看水是水;参透时,看山不是山,看水不是水;参透后,看山还是山,看水还是水”。程序运行的目的就是处理数据。...
2020-12-23 13:58:39 520
原创 指针变量的类型作用
对于普通变量来说,其类型的作用主要有以下几个方面。程序员写代码时识别用:不涉及强制转换时,知道该变量中应该存放什么类型的数值。空间大小的说明:比如int为4个字节空间。存储结构说明: float和int虽然空间大小都是4个字节,但是其存储结构完全不同。对于指针变量来说,其类型的作用与上面基本一致,只是其类型是由普通类型+星号构成。星号的个数,表明了指针变量的级数,指针变量用来存放地址。当不涉及强制转换时,其对应关系如下。某类型一级指针变量=该类型一级地址某类型二级指针变量=&a.
2020-12-23 13:56:27 1405 2
原创 指针变量
指针变量广义上说,常说的“指针”隐含两个东西,一个是指针变量,另一个是指针常量。我们一般都是统称它们为指针,在大多数情况下,指针指的都是指针变量。如果指针用得很熟悉的话,没有必要对它们做严格区分。指针变量和普通变量一样,都是用于存放数据的,只是指针变量存放的数据很特殊,是为存地址。一般情况下,如果不考虑指针强制转换的话,我们要求某个类型地址必须放到对应类型的指针变量中,如下所示。int a=10;int *p=&a;// a空间的地址假设为0x07080345以上两句话,对于..
2020-12-23 13:50:02 4959
转载 高精度极限电阻的测试技巧
据是德科技大中国区电源和通用产品市场经理饶骞介绍,电路设计中会用到不同阻值的电阻,小到mΩ、μΩ的大电流分流器,大到GΩ、TΩ的绝缘材料。为了提升设计的可靠性,需要对这些器件做高精度验证和测量,但是这极具挑战性。饶骞分析了传统的极限电阻测试中存在的问题,提出了针对不同阻值的极限电阻的精确测量手段和方法,包括三个部分:小电阻的高精度测量、超高电阻测量、材料漏电流或绝缘阻抗测量。小电阻的高精度测量他介绍说,众所周知的电阻测量方法是采用数字万用表(根据欧姆定律),2线法比较常用,但是要..
2020-12-23 13:28:22 4984
转载 放大器电路的大信号带宽,压摆率是瓶颈
笔者在技术支持过程中,常常遇到工程师质疑放大器的增益带宽积参数“掺水”啦!!!设计中明明预留很大余量,但是电路的输出波形依然出现失真的情况。其实,在交流信号调理电路的带宽评估中,应该区分对待输入信号是小信号,还是大信号。如果输入信号是小信号使用增益带宽积参数是合理的,而当输入信号为大信号时,还使用增益带宽积参数进行评将会导致设计缺陷。本篇将通过一个实例分析,压摆率与大信号带宽(满功率带宽)的关系,以及一种快捷仿真满功率带宽的方式。01、压摆率定义压摆率(Slew Rate,SR)定义为由..
2020-12-23 13:19:28 2657 4
原创 用精妙方案解决按键端口太少问题
外部扩展芯片 这种算是最容易想到的一种IO扩展的方案,通过串行线与扩展芯片通信,从而控制扩展芯片多个输入输出口。 比如远程IO扩展芯片CH423,该芯片可以支持8 个双向输入输出引脚和 16 个通用输出引脚,并且还支持输入电平变化中断。此图源于CH423 中文手册 我们只需要通过MCU的IIC外设或者模拟IIC与CH423进行通信,从而对该芯片进行写入与读取即可完成IO口的读写,实现了IO的扩展需求。 使用CH423外扩主要的缺点是成本...
2020-12-23 12:29:57 556
原创 在C语言中,定义局部变量时如果未初始化,则值是随机的。为什么?
分析一个细节:在C语言中,定义局部变量时如果未初始化,则值是随机的。为什么?定义局部变量,其实就是在栈中通过移动栈指针,来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的) ,所以说使用栈来实现的局部变量定义时如果不初始化,里面的值就是一个垃圾值。由此我们扩展一下,其实不仅仅是局部变量,所有的变量在定义时只是在内存中分配一块空间,并没有对这块空间进行任何的初始化。如果这块内存以前被用过,里面的数据还在,那它对于我们来说是没有任何意义的垃圾值
2020-12-17 14:55:49 2630
原创 结合内存来解析C语言语句的本质
下面结合内存来解析C语言语句的本质:int a:编译器帮我们申请了一个int类型的内存格子(长度是4字节,地址是确定的,但是只有编译器知道,我们是不知道的,也不需要知道) ,并且把符号a和这个格子绑定。a=5:编译器发现我们要给a赋值,就会把这个值5丢到符号a绑定的那个内存格子中a+=4:编译器发现我们要给a加值, a += 4等效于a=a +4,编译器会先把a原来的值读出来,然后给这个值加4,再把加之后的和写入a里面去,最后这个格子里面存储的内容就是9。C语言中数据类型的本质含义,是表示一
2020-12-17 14:17:49 191
原创 指针是什么?
指针是什么?我们的回答是指针就是地址。说得再全面一点,指针是一个变量,且这个变量是专门用来存放地址的。这就好比你想给A打电话,但你不知道A的电话号码,但你知道C有A的电话号码,而且你也有C的电话,这样你就可以间接地通过C来找到A,指针也是如此。通过下面的例子我们就可以看出用指针变量p来间接地获取了变量a的内容。...
2020-12-17 14:12:30 568
原创 指针类型的含义
C语言中的指针,全名叫指针变量,指针变量其实和普通变量没有任何区别(不管intloat等,还是指针类型int "或者float *等) 。只要记住:类型只是对其所修饰的数字或者符号所代表内存空间的长度和解析方法的规定。如int a和int "p其实没有任何区别, a和p都代表一个内存地址(如0x20000000) ,但是这个内存地址0x20000000的长度和解析方法不同。a和b的空间大小虽然都是4个字节(碰I5) ,但是解析方法是截然不同的,前者解析方法是按照int的规定来的;后者按照int *方式解析。
2020-12-15 22:13:41 3148
原创 谈谈C语言中的函数
不知道你是否思考过C语言中函数调用是如何实现的,主调函数是如何找到那些被调函数的。在C语言中,函数就是一段代码的封装。函数名的实质就是这一段代码的首地址,所以说函数名的本质也是一个内存地址。有了函数名(指针) ,也就是有了地址,我们才实现了函数的调用。...
2020-12-15 22:08:24 97
原创 实际编程时,节省内存和提高效率到底谁重要?
在32位系统中定义变量最好用int,这样效率高,因为32位系统中很多硬件本身都是32位的,配合定义的int型变量在内存中恰好分配4个字节,使得软件和硬件对于数据的处理非常契合,这样的工作效率自然就高。32位的硬件配置天生就适合定义32位的int型变量。千万不要单纯地认为定义char型变量由于分配了更少的内存空间,所以效率就更高,因此我们一直强调写程序时要尽量配合硬件特点。在很多32位系统环境下,当定义bool类型变量时,我们基本都是用int来替代。虽然bool型只需要一个位,但是我们定义一个整型替代时,
2020-12-15 22:06:18 441
原创 为什么32位的CPU就比16位的性能强
这里涉及三总线的概念。所谓三总线就是指地址总线、数据总线和控制总线。如我们现在要向内存中写入一个数据,这个过程就是,控制总线上面传输写指令,地址总线上面传输内存地址,而数据总线传输要写入内存的数据。由此可知总线的重要性。我们常常讲多少位CPU,指的就是数据总线位数。数据线越多,一次传输处理的数据就越多,性能也就越好,这也是为什么32位的CPU就比16位的性能强。...
2020-12-15 22:02:42 555
原创 深入思考:如何管理内存(无OS时,有OS时)
对于计算机来说,内存容量越大,能够实现功能的可能性就更大,所以大家都希望自己电脑的内存越大越好。但是不管我们的内存有多大,一旦内存使用管理不善,程序运行时就会消耗过多的内存,这样内存迟早都被程序消耗殆尽。当无内存可用时,程序就会崩溃。因此我们说内存是一种资源,如何高效地管理内存对程序员来说是一个重要技术和话题。 在C语言中定义变量时,就会分配一块内存空间。如果想要获取更大内存空间的话,我们可以通过定义数组来实现。其实在有操作系统(OS)的前提下,我们还可以通过一些操作系统提供的接口来分配内...
2020-12-15 21:59:16 137
声源定位跟踪系统设计装置
2022-07-28
FPGA学习推荐:《HELLO FPGA》v3.0.zip
2021-11-11
数字信号示波器.zip
2021-11-10
信号失真度测量装置.zip
2021-11-04
信号失真度测量装置.zip
2021-11-04
DDS驱动板 PDF 信号发生器.zip
2021-08-29
水位监测系统设计资料.zip
2021-08-29
要想精通java必须看的经典书籍(强顶).zip
2021-04-22
stm32手写绘图板资料.zip
2021-04-22
stm32抢答器制作资料.zip
2021-04-22
(2017年用电器识别装置国赛题)基于stm32_CS5463用电器电流电压功率检测.zip
2021-04-22
stm32F4_4.3寸频谱分析仪 - lib库.zip
2021-03-08
FPGA_32测频.zip
2021-01-07
stm32F4示波器.zip
2021-01-07
F1双机spi通信.zip
2021-01-07
stm32等精度频率计
2021-01-07
多样式酷炫全彩爱心灯.zip
2020-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人