2024/5/22 学习杂记

 为什么功率放大电路在模电中经常提到?

  • 模拟信号:它是连续变化的电信号,它在时间上和幅度上都是连续的,能够代表信息的连续变化。
  • 大多数物理量为模拟信号,如:温度、压力、流量…
    非电物理量通过传感器变换成电信号。
  • 模拟电路:对模拟信号进行处理的电路。最基本的处理是对信号的放大,有功能和性能各异的放大电路,其他模拟电路多以放大电路为基础。
  • 只有将模拟信号放大到足够大,才能够进行数字化处理;而只有将处理好的数字信号转换为模拟信号并进行功率放大,才能驱动某些负载。

上拉电阻和下拉电阻长什么样?有什么用?

上拉电阻:用于确保在没有外部输入信号或者信号浮动时,输入端口有一个确定的电压状态,通常是高电平(逻辑1或+Vcc)。可以防止不确定的状态引发错误的信号读取值,增加了电路的稳定性。

下图中:按键没有按下:端口读取为高电平。
              当按键按下: 端口读取为低电平。

R2为上拉电阻。

R1是保护电路所用的,一方面是保护单片机GPIO,若GPIO不小心被配置成了输出,按下按键可能会损坏GPIO,而串接电阻R1后,即使出现这种情况,也不会损坏GPIO,另一方面可以按键消抖。 

下拉电阻:确保在没有外部信号输入或信号浮动的情况下,输入端保持在一个确定的低电平(逻辑0或GND)状态。

按键没有按下:端口读取为低电平
当按键按下: 端口读取为高电平

图中,R2为下拉电阻 。

定义和声明

 (A) int i;

(B) extern int i;

什么是定义?所谓的定义就是(编译器)创建一个对象,为这个对象分配一块 内存并给它取上一个名字,这个名字就是我们经常所说的变扯名或对象名。

什么是声明::告诉编译器,这个名字巳经匹配到一块内存上了。声明可以出现多次。告诉编译器,这个名字已被预定了,别的地方再也不能用它来 作为变量名或对象名。

上述举例中:(A) 是定义;(B) 是声明

定义和声明最重要的区别:定义创建了对象并为这个对象分配了内存,而声明没有分配内存

static关键字(******非常重要)

static用来控制变量的存储方式和可见性

第 1 个作用:修饰变量

static 关键字修饰的变量,

1.在全局作用域下声明称为静态全局变量,

静态全局变量的作用域仅限于定义它的文件内部。这意味着,从变量定义处开始,直到文件结尾处,该变量都可以被访问和使用。

静态全局变量在其他文件中是不可见的,即使使用 extern 声明也不能在其他文件中直接使用。这是因为 extern 声明是告诉编译器该变量是在其他文件中定义的,而静态全局变量的作用域仅限于当前文件,因此在其他文件中无法访问它。

extern 是用来在另一个文件中声明一个全局变量或函数

静态局部变量:在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被 static修饰的变量总是存在内存的静态区, 所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时仍然能用到这个值

1)用static修饰局部变量:使其变为静态存储方式(静态数据区),那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中。

2)用static修饰全局变量:使其只在本文件内部有效,而其他文件不可连接或引用该变量。

3)用static修饰函数:对函数的连接方式产生影响,使得函数只在本文件内部有效,对其他文件是不可见的(这一点在大工程中很重要很重要,避免很多麻烦,很常见)。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。                       

static 修饰全局变量和局部变量的应用:

#include <stdio.h> /* 函数声明 */ void func1(void); 
static int count=10; /* 全局变量 - static 是默认的 */ 
int main(){while (count--) { func1(); }return 0; 
} 
void func1(void) 
{ /* 'thingy' 是 'func1' 的局部变量 - 只初始化一次 * 每次调用函数 'func1' 'thingy' 值不会被重置。 */static int thingy=5; thingy++;printf(" thingy 为 %d , count 为 %d\n", thingy, count); 
}

  count 作为全局变量可以在函数内使用,thingy 使用 static 修饰后,不会在每次调用时重置。

static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

 thingy 为 6 , count 为 9thingy 为 7 , count 为 8thingy 为 8 , count 为 7thingy 为 9 , count 为 6thingy 为 10 , count 为 5thingy 为 11 , count 为 4thingy 为 12 , count 为 3thingy 为 13 , count 为 2thingy 为 14 , count 为 1thingy 为 15 , count 为 0

第2 个作用:修饰函数->静态函数

是指对函数的作用域仅局限于本文件(所以 又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,静态函数的只能在本文件中调用,不能被其他文件调用。不用担心自已定义的函数是否会与其他文件中的函数同名。

静态全局变量有以下特点:

(1)静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量;


(2)未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为 0);


(3)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。

优点:静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突。

全局变量和全局静态变量的区别

  • 全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用全局变量。
  • 全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用

const关键字(******重要)

const意味着"只读"。

1)用const修饰常量:定义时就初始化,以后不能更改。

2)用const修饰形参:func(const int a){};该形参在函数里不能改变。

3)用const修饰类成员函数:该函数对成员变量只能进行只读操作,就是const类成员函数是不能修改成员变量的数值的。

被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

const int a;
int const a;
const int *a;
int * const a;
int const * a const;

 

前两个的作用是一样,a是一个常整型数。
第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

sizeof关键字 

int i=0;

(A) sizeof(int); (B) sizeof(i); (C) sizeof int; (D) sizeof i

其中ABD的结果都为4  而C会编译报错,为什么?

因为sizeof是关键字 它不是一个函数,sizeof int表示什么啊? int前面加一个关键字? 类型扩展?明显不正确。

sizeof 在计算变量所占空间大小时,括号可以省略,而计算数据类型(int 、short、 long等)大小时不能省略。

sizeof<(i+ +)与 sizof(i) 的结果一样,所以没有必要且不允许写这样的代码。

sizeof(int) * p 表示什么意思?

sizeof(int) 表示 int 类型在当前系统中所占用的字节数,通常是 4 个字节(32位系统)或 8 个字节(64位系统)。而 p 则是一个指针变量(可能指向某种类型的数据),sizeof(int) * p 表示将指针 p 所指向的数据类型的大小,即 sizeof(int))乘以 p 的值。

这种操作可能是不明智的,因为乘以一个指针通常并不符合正常的编程逻辑,可能会导致不确定的结果或错误。

32位系统下:

int * p = NULL;

sizeof(p) 的值是多少? sizeof( * p) 呢?

假设 int 类型占 4 字节。

  1. int * p = NULL;

    • p 是指向 int 类型的指针,初始化为 NULL,表示空指针。
    • sizeof(p) 的值是指针类型本身的大小,通常为 4 字节。
  2. sizeof(*p)

    • *p 表示指针 p 所指向的内容,但由于 p 是空指针,解引用空指针是未定义行为,因此无法得出确切的大小

int a[100];

sizeof (a) 的值是多少? sizeof(a[100]) 呢? sizeof(&a)呢? sizeof(&a[0])呢?

  1. int a[100];

    • a 是一个包含 100 个 int 类型元素的数组。
    • sizeof(a) 的值是整个数组占用的内存空间大小,即 100 * sizeof(int),为 400 字节。
  2. sizeof(a[100])

    • a[100] 表示数组 a 的第 101 个元素,由于数组索引从 0 开始,因此超出了数组的范围。
    • 访问超出数组范围的元素是未定义行为,所以无法准确计算 sizeof(a[100])
  3. sizeof(&a)

    • &a 表示数组 a 的地址,即指向整个数组的指针。
    • sizeof(&a) 的值是指向数组的指针的大小,通常为 4 字节。
  4. sizeof(&a[0])

    • &a[0] 表示数组 a 的第一个元素 a[0] 的地址。
    • sizeof(&a[0]) 的值是指向数组元素的指针的大小,通常为 4 字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙 DevEcoStudio:发布进度条通知

使用notificationManager及wantAgent实现功能import notificationManager from ohos.notificationManager import wantAgent from ohos.app.ability.wantAgent Entry Component struct Index {State message: string 发布进度条通知progressValue: number0async publicDownloa…

基于DdddOcr通用验证码离线本地识别SDK搭建个人云打码接口Api

前言 最近介绍了一款免费的验证码识别网站,识别效率太低,考虑到ddddocr是开源的,决定搭建搭建一个,发现原作者sml2h3已经推出好久了,但是网上没有宝塔安装的教程,于是本次通过宝塔搭建属于自己的带带弟弟OCR通用验证码离线本地识别 原项目地址:https://github.com/sml2…

Serverless应用引擎SAE评测|一分钟部署在线游戏

Serverless应用引擎SAE评测|一分钟部署在线游戏 什么是Serverless应用引擎SAE一分钟部署在线游戏SAE控制台 资源释放其他操作 在进行Serverless应用引擎SAE评测之前&#xff0c;首先需要了解一下什么是SAE。 什么是Serverless应用引擎SAE Serverless应用引擎SAE&#xff08;Se…

【EXCEL_VBA_基础知识】15 使用ADO操作外部数据

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 使用ADO链接外部数据源 2. 常用SQL语句&#xff08;Execute(SQL语句)&#xff09; 2.1 查询数据、查询某几个字段、带条件查询、合并两表数据、插…

手把手教你解决 Hive 的数据倾斜

文章目录 数据倾斜是什么&#xff1f;产生数据倾斜的场景1.空值引发的数据倾斜2.不可拆分的大文件产生的数据倾斜3.数值膨胀引发的数据倾斜4.不同数据类型引发的数据倾斜5.Count(distinct) 引发的数据倾斜6.表 Join 操作时引发数据倾斜7.group by 引发的数据倾斜 解决数据倾斜数…

Python | Leetcode Python题解之第100题相同的树

题目&#xff1a; 题解&#xff1a; class Solution:def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:if not p and not q:return Trueif not p or not q:return Falsequeue1 collections.deque([p])queue2 collections.deque([q])while queue1 and queue2:node…

网络拓扑—FTP服务搭建

文章目录 FTP服务搭建网络拓扑配置网络FTPPC 安装FTP服务配置FTP服务FTP用户配置—1PC机访问FTP站点IE浏览器访问终端访问 FTP用户配置—2PC机访问ftp站点IE浏览器访问终端访问 FTP服务搭建 网络拓扑 //交换机忽略不计 FTP服务IP&#xff1a;192.168.1.1 PC机IP&#xff1a;19…

多级留言/评论的功能实现——Vue3前端篇

文章目录 思路分析封装组件父组件模板逻辑样式 子组件——二级留言模板逻辑样式 子组件——三级留言以上模板逻辑样式 留言组件的使用 写完论文了&#xff0c;来把评论的前端部分补一下。 前端的实现思路是自己摸索出来的&#xff0c;没找到可以符合自己需求的参考&#xff0c;…

windows 7 10 11快捷键到启动页面

1.快速打开用户启动文件夹 shell:startup 方式2&#xff1a;快速打开系统启动文件夹 shell:Common Startup shell:Common Startup

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO inline bazel增量编译

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO Theory Shared Library Symbol Conflicts (on Linux) 从左往右查找:Note that the linker only looks further down the line when looking for symbols used by but not defined in the current lib.Linux 下…

统计信号处理基础 习题解答10-4

题目&#xff1a; 重复习题10.3&#xff0c;但条件PDF变为&#xff1a; 以及均匀先验。如果非常大&#xff0c;这样先验知识很少&#xff0c;则会出现什么情况。 解答&#xff1a; 如果记 那么&#xff0c;根据条件独立性质&#xff0c;得到&#xff1a; 其中&#xff0c;&am…

SwiftUI中的组合动画(Simultaneous, Sequenced, Exclusive)

了解了常见的几种手势后&#xff0c;接下来我们了解一下组合手势的操作&#xff0c;当一个视图存在多个手势的时候&#xff0c;为了避免手势冲突&#xff0c;SwiftUI提供了自定义手势的方法&#xff0c;比如同时进行&#xff0c;顺序进行等等。 以下是一些常见的多种手势组合使…

关于AI绘画的模型、开源项目、工具、技巧的学习

目录 一、AI绘画的大模型有哪些&#xff1f; 二、Stable Diffusion是一个流行的AI绘画开源项目。 三、AI绘画的开源工具有哪些&#xff1f; 四、AI绘画的技巧 五、最简单的实践 一、AI绘画的大模型有哪些&#xff1f; AI绘画领域中存在多种大模型&#xff0c;每种模型都有…

渗透测试 一个很奇怪的支付漏洞

新手实战刷课网站、好玩又有趣&#xff01; 第一步 打开网站、任意账户名密码登陆发现验证码可重复利用 这时候我们可以试试admin账号、发现如果账号正确会提示账户已存在、反之回显账户密码错误 第二步 既然验证码可以重复利用&#xff1b;而且账号名有回显 这时候我们试…

学习使用博客记录生活

学习使用博客记录生活 新的改变 今天新的开始&#xff0c;让我用图片开始记录吧 看这个背景图片怎么样

人生苦短,我学python之数据类型(上)

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 一.元组 &#xff08;tuple&#xff09; 二.集合&#xff08;set&#xff09; 三.字典(dict) 一.元组 &#…

MySQL存储过程for循环处理查询结果

在MySQL数据库中&#xff0c;存储过程是一种预编译的SQL语句集&#xff0c;可以被多次调用。在MySQL中使用存储过程查询到结果后&#xff0c;有时候需要对这些结果进行循环处理。 1. 创建表 CREATE TABLE t_job (job_id int(11) unsigned NOT NULL AUTO_INCREMENT,job_name v…

崆峒酥饼:端午佳节的美味之选

崆峒酥饼&#xff1a;端午佳节的美味之选 在端午佳节来临之际&#xff0c;崆峒酥饼成为了备受瞩目的佳节之选。崆峒酥饼以其独特的制作工艺和口感&#xff0c;为这个传统节日增添了一份美味与温馨。 崆峒酥饼源自甘肃平凉&#xff0c;是当地的传统名点。它选用优质的面粉、油脂…

Linux——进程与线程

进程与线程 前言一、Linux线程概念线程的优点线程的缺点线程异常线程用途 二、Linux进程VS线程进程和线程 三、Linux线程控制创建线程线程ID及进程地址空间布局线程终止线程等待分离线程 四、习题巩固请简述什么是LWP请简述LWP与pthread_create创建的线程之间的关系简述轻量级进…

云端升级,智能适配——LDR6282,USB-C接口显示器的最佳选择

华为MateView USB-C接口显示器技术深度解析与科普 随着科技的飞速发展&#xff0c;终端显示产品也迎来了全新的变革。在众多更新迭代中&#xff0c;华为MateView显示器凭借其独特的USB-C接口设计&#xff0c;为用户带来了前所未有的便捷体验。本文将带您深入探索这款显示器的技…