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 为 9
 thingy 为 7 , count 为 8
 thingy 为 8 , count 为 7
 thingy 为 9 , count 为 6
 thingy 为 10 , count 为 5
 thingy 为 11 , count 为 4
 thingy 为 12 , count 为 3
 thingy 为 13 , count 为 2
 thingy 为 14 , count 为 1
 thingy 为 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 字节。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx - 健康检查终极指南:探索Upstream Check模块

文章目录 概述upstream_check_module模块安装和配置指南模块安装步骤基本配置示例详细配置说明检查类型和参数常见问题及解决方案 SSL检查和DNS解析功能SSL检查配置示例和说明配置示例 DNS解析配置示例和说明配置示例 结合实际应用场景的高级配置示例综合SSL检查与DNS解析 总结…

Discourse 中可能使用的 HMAC 算法 Java 实现

在 DiscourseConnect 中&#xff0c;对数据的签名使用的是 HMAC 算法。 实际使用的算法为 HmacSHA256。 Java 生成签名的方法很简单。 String hmac new HmacUtils(HmacAlgorithms.HMAC_SHA_256, "55619458534897682511405307018226").hmacHex(ssoPayload);HmacUti…

robosuite导入自定义机器人

目录 目的&#xff1a;案例一&#xff1a;成果展示具体步骤&#xff1a;URDF文件准备xml文件生成xml修改机器人构建 目的&#xff1a; 实现其他标准/非标准机器人的构建 案例一&#xff1a; 成果展示 添加机器人JAKA ZU 7 这个模型 具体步骤&#xff1a; URDF文件准备 从…

在深度学习中常见的初始化操作

目录 截断正态分布来初始化张量 逐行代码解释 相关理论解释 截断正态分布函数 截断正态分布的定义 截断正态分布的作用 计算截断点的作用 具体步骤 正态分布的累积分布函数&#xff08;CDF&#xff09; 正态分布的累积分布函数与误差函数的关系 示例计算 误差函数 应…

切换分支报错:Untracked Files Prevent Checkout

切换分支报错&#xff1a;Untracked Files Prevent Checkout 分支切换 Untracked Files Prevent Checkout 新起的项目在切换master分支到工作分支时&#xff0c;出现下图的问题&#xff1a; Untracked Files Prevent Checkout Move or commit them before checkout 网上的解决…

pip(包管理器) for Python

pip是什么 pip是Python的包安装程序&#xff0c;即python包管理器。您可以使用 pip 从Python包索引和其他索引安装包。 1. pip 安装 python 包 pip install 包名 例如&#xff1a;pip install pymssql &#xff1a; 使用pip安装数据库驱动包 pymssql 2.pip 卸载 python 包 pi…

数据结构2(初):顺序表和链表

目录 1、线性表 2、顺序表 2.1、概念及结构 2.2、顺序表的实现 2.3、顺序表的问题及思考 3、链表 3.1、链表的概念及结构 3.2、链表的分类 3.3、无头单向非循环链表的实现 3.4、带头双向循环链表的实现 4、顺序表和链表的区别和联系 1、线性表 线性表是n个具有相同特…

200+有趣的HTML前端游戏项目合集(5月17日更新,持续更新中)

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

工作干到抑郁了,要不要辞职?

在知乎上看到以为网友提问&#xff1a;工作干到抑郁&#xff0c;该不该辞职&#xff1f; 今天和大家聊聊这个话题&#xff0c;如果你也有类似的情况&#xff0c;希望这篇文章能帮到你。 熟悉瑶琴的朋友&#xff0c;都知道瑶琴在去年有一次裸辞的经历。离职前&#xff0c;严重的…

多台Centos快速区分,让Centos开机自动显示它的IP地址!

背景说明&#xff1a;当公司拥有多台Centos服务器&#xff0c;管理员很容易弄混淆导致不好区分&#xff0c;在这样的情况下我们可以写个简单脚本来实现开机自动显示它的IP地址&#xff0c;从而达到区分开来的结果&#xff01; 首先我们来开下效果&#xff0c;登录之前的 下面是…

【加密与解密(第四版)】第十八章笔记

第十八章 反跟踪技术 18.1 由BeginDebugged引发的蝴蝶效应 IsDebuggerPresent()函数读取当前进程PEB中的BeginDebugged标志 CheckRemoteDebuggerPresent() 反调试总结&#xff1a;https://bbs.kanxue.com/thread-225740.htm https://www.freebuf.com/articles/others-articl…

细胞冻存——让你的细胞“长生不老”

《星际穿越》电影中提到漫长的太空旅程中&#xff0c;宇航员可以进入休眠水床休眠&#xff0c;并自行设定唤醒时间。在《异形》《深空失忆》《三体》等科幻作品中&#xff0c;都出现此类技术。《三体》中&#xff0c;休眠后来成为人类最普遍的一项技术。技术上的人类低温休眠&a…

JavaEE-网络初识

文章目录 一、网络背景1.1 起源1.2 国内网络的发展 二、关键概念2.1 网络2.2 设备2.3 ip地址与端口号 三、协议3.1 协议分层3.2 OSI七层模型3.3 TCP/IP五层模型3.4 数据传输过程的简单叙述 一、网络背景 1.1 起源 在国外大概时上世纪70年代左右&#xff0c;网络就出现了&…

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…

【LeetCode:496. 下一个更大元素 I + 单调栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

深度学习——图像分类(CNN)—训练模型

训练模型 1.导入必要的库2.定义超参数3.读取训练和测试标签CSV文件4.确保标签是字符串类型5.显示两个数据框的前几行以了解它们的结构6.定义图像处理参数7.创建图像数据生成器8.设置目录路径9.创建训练和验证数据生成器10.构建模型11.编译模型12.训练模型并收集历史13.绘制损失…

【AD21】PCB板尺寸与层名称标注

PCB绘制完成后&#xff0c;需要给上级或生产制造商发送输出文件&#xff0c;输出文件中包含板尺寸标识和层标识可以方便工作的交接。 1. 板尺寸标识 首先板尺寸标识所在的层要在与板框不同的机械层&#xff0c;这里我选择机械5层。 点击放置->尺寸->线性尺寸 这里板尺…

微信小程序uniapp+django洗脚按摩足浴城消费系统springboot

原生wxml开发对Node、预编译器、webpack支持不好&#xff0c;影响开发效率和工程构建。所以都会用uniapp框架开发 前后端分离&#xff0c;后端给接口和API文档&#xff0c;注重前端,接近原生系统 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0…

利用大模型构造数据集,并微调大模型

一、前言 目前大模型的微调方法有很多&#xff0c;而且大多可以在消费级显卡上进行&#xff0c;每个人都可以在自己的电脑上微调自己的大模型。 但是在微调时我们时常面对一个问题&#xff0c;就是数据集问题。网络上有许多开源数据集&#xff0c;但是很多时候我们并不想用这…

Gerchberg-Saxton (GS) 和混合输入输出(Hybrid Input-Output, HIO)算法

文章目录 1. 简介2. 算法描述3. 混合输入输出&#xff08;Hybrid Input-Output, HIO&#xff09;算法3.1 HIO算法步骤3.2 HIO算法的优势3.3 算法描述 4. 算法实现与对比5. 总结参考文献 1. 简介 Gerchberg-Saxton (GS) 算法是一种常用于相位恢复和光学成像的迭代算法。该算法最…