- 博客(36)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 [RTOS 学习记录] 预备知识:C语言结构体
指定结构体类型分为两个步骤:首先声明类型,然后定义它。注意,此时没有创建任何变量!我们在此仅使用“声明”和“定义”术语来指代结构体类型本身:结构体类型的声明只是告知编译器有一个特定的结构体数据类型存在及其名称。结构体类型的定义完整地指定了结构体数据类型。结构体的确切内存布局及其所有成员。结构体实例在内存中占用的空间(当我们声明并定义一个结构体变量时,就会创建一个“结构体实例”。我们将在第 2 节中进行学习了解)。// 声明数据类型 'struct Point'
2024-08-05 22:14:17
717
翻译 [RTOS 学习记录] 预备知识:C指针
声明:告诉编译器一个具有特定名称、类型和大小的变量存在。编译器随后知道足够的信息来与变量交互。然而,这一阶段不会进行内存分配。定义:编译器在 RAM 内存中寻找一些空闲空间,并为变量分配一个或多个字节。变量现在有一个地址了。事实上,这一阶段变量具有一个相对地址,绝对地址在链接阶段解析,但现在我们可以忘记这些。初始化:我们给变量赋一个值。这一步并不是严格必需的。如果我们不初始化变量,它将包含一个随机值。
2024-06-27 15:50:47
49
原创 [RTOS 学习记录] 开发工具 Borland C/C++ 3.1 精简版
这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,目的是作为个人后续回顾复习使用。
2024-04-20 16:58:15
924
原创 [STM32] 使用 STM32CubeMX 创建 STM32 工程模板
点击“Project Manager”进入工程管理界面,在该界面先设置工程名字"Template",再设置导出目标IDE为“MDK-ARM”,版本默认V5.27。在搜索框输入“STM32F103C8”,右边选择“LQFP48”封装,最后点击右上角的“Start Project”,开始创建工程,如下图所示。随后,将使用 Keil 自动打开工程,点击编译测试,编译成功,没有错误,如图所示。再点击“Code Generator”,勾选如下图所示的两个选项,最后点击“GENERATE CODE”。
2024-03-25 08:30:58
779
原创 [STM32] Keil MDK 新建工程编译不通过(warning: #2803-D和Error: L6218E)解决方法备忘
新建 Keil MDK 工程,工程设置完成后点击编译按钮,编译不通过:如下图所示:搜索了一下发现了解决方法,在这里做个备忘。
2024-03-21 01:48:03
1181
原创 [FPGA 学习记录] 快速开发的法宝——IP核
为了解决这个问题,将一些在数字电路中常用的但是比较复杂的功能块,比如说前面提到的 FIFO、RAM、SDRAM 控制器设计成可修改的参数模块,就是前面提到的 IP 核,然后在开发过程中使用 IP 核,这样就可以避免重复劳动、提高开发效率、减少设计和调试的时间,加速开发进程、降低开发成本,这样也大大缩短了产品上市时间、减轻了工程师的一个负担,也是业内的一个发展趋势。软核通常是以加密的形式提供,实际的用户是看不到内部的 RTL 代码的,但是它的布局布线是十分灵活的;同时,软核也是有缺点的。
2023-12-06 15:47:25
2265
原创 [FPGA 学习记录] 数码管动态显示
接下来就需要实现动态显示驱动模块。在实现动态显示驱动模块之前,我们这儿要补充一个知识点:BCD 码。在这里为什么要补充 BCD 码的相关知识呢?动态显示驱动模块的作用是将传入的待显示的十进制数据data[19:0]转化为可以输出的位选信号sel[5:0]和段选信号seg[7:0],传入的数据data[19:0]是由数据生成模块data_gen产生并传入的,data[19:0]是使用二进制表示的多位十进制数,这种编码方式并不能够直接用于产生位选信号sel[5:0]和段选信号seg[7:0];我们需要将。
2023-12-05 14:02:24
1796
原创 [FPGA 学习记录] 数码管动态显示
在上一小节当中,我们对数码管的静态显示做了一个详细的讲解;但是如果单单只掌握数码管的静态显示这种显示方式是远远不够的,因为数码管的静态显示当中,被选中的数码位它们显示的内容都是相同的,这种显示方式在我们的实际应用当中显然是不合适的;我们希望控制每个数码位能够独立的显示我们想要显示的内容,如何实现这一操作呢?就是本小节所要讲解的内容:数码管的动态显示。首先是理论学习。
2023-12-03 17:35:16
2289
原创 [FPGA 学习记录] 数码管静态显示
数码管它是一种半导体发光器件,其基本单元是发光二极管。我们常见的数码管有七段数码管和八段数码管,那么八段数码管如下图1所示七段数码管比八段数码管少一个小数点位除了常见的七段管和八段管之外,还有其他类型的数码管:比如说:米字管,如下图2所示还有 N 型管,以及工业科研领域用的 16 段管、24 段管等但是我们还是觉得使用 14 个I/O口占用资源比较多,所以说在征途系列开发板上我们使用了位移缓存器,就是我们的 74HC595。
2023-11-23 22:22:32
1659
原创 [FPGA 学习记录] 无源蜂鸣器驱动实验
那么蜂鸣器大家都见过,它是一种一体化结构的电子讯响器,具有体积小、重量轻、价格低、结构牢靠的特点,被广泛应用在报警器、电子玩具、定时器等电子产品当中,作为一个发声器件;那么蜂鸣器按照它的结构可以分为电磁式蜂鸣器、压电式蜂鸣器两种,如果说按照其是否带有信号源又可以分为有源蜂鸣器和无源蜂鸣器,那么有源蜂鸣器它内部是装有集成电路的,不需要音频驱动电路,只要接通直流电源就能够直接发出声响;
2023-11-20 22:28:15
841
原创 [FPGA 学习记录] 呼吸灯
那么在上一章节当中,我们使用板载的 LED 灯设计并实现了一个流水灯的实验效果。那么在本章节当中,我们将带领各位朋友设计并实现一个呼吸灯的实验效果。那么呼吸灯在我们的日常生活中很常见,比如说我们手机上。在手机上一般作为消息提醒指示灯被广泛地使用,那么它的效果是小灯在一段时间内从完全熄灭慢慢到完全点亮,同样的时间内再由完全点亮到完全熄灭这样一个过程;这个过程循环往复,感觉就像呼吸一样一张一弛,那么人们看了特别舒服。
2023-11-02 23:36:43
249
原创 [FPGA 学习记录] 流水灯
就是在这个位置,当我们的输出信号是 4’b0111 而且我们的 cnt_flag 信号有效时,再把这个初值赋给我们的输出信号,就是这个位置,我们这样编写:当我们的输出信号等于 4’b0111 而且我们的标志信号有效,那这个位置就给它一个初值。但是它是补 0,所以说这儿是有问题的,而且与我们的波形图是不对应的。我们的流水灯的实现其实和我们前面的计数器和我们的分频器没有多大的差别,差别之处就在于:我们的 LED 灯是怎么实现流水的一个效果,就用到了我们前面讲到的左移、右移的语法,那么希望大家能够掌握这个语法。
2023-11-02 16:48:26
250
原创 [FPGA 学习记录] 触摸按键控制LED灯
当按键被按下时,就是右边这种情况,那么我们人体的寄生电容将耦合到这个静态电容上,使按键的最终电容变大,我们的按键 IC 会将电容的变化转化为电信号,那么电信号的变化超过了这个阈值就判定为按键按下。当触摸按键没有被按下时,我们的输出信号保持原来的值,当检测到这个下降沿,进行取反,然后保持它的电平不变;如果说我们使用的是组合逻辑,在这个时钟周期内我们的上升沿标志信号应该保持一个时钟周期的高电平,但是我们使用的是时序逻辑,所以说应该有一个延迟一拍的一个效果,那么我们的高脉冲应该保持在这个时钟周期。
2023-11-02 11:32:12
471
原创 [FPGA 学习记录] 按键消抖
在前面几章节当中,我们讲解了计数器、分频器,那么分频器又讲解了偶数分频和奇数分频。那么在本章节当中,我们来讲一下按键的消抖。按键消抖的内容分为两个部分:理论学习和实战演练。那么在理论学习部分,我们会对按键消抖的相关知识做一个讲解;在实战演练部分我们通过实验工程,设计并实现一个具有按键消抖功能的电路。那么首先是理论学习。
2023-11-01 17:26:44
294
3
原创 [FPGA 学习记录] 分频器---奇分频
当我们的复位信号无效时,就是复位信号为高电平无效时,我们的计数器并没有计数到最大值,没有计数到最大值就是 0、1、2、3 的时候,让它进行自加一。那么在上一章节当中,我们对分频器的相关理论知识做了一个系统性的讲解,那么重点讲解了我们的偶数分频,并且通过实验工程使用分频和降频两种方法,设计并实现了将系统时钟进行六分频的偶数分频电路,而且通过了上板验证。那么输入信号和输出信号与我们六分频是一样的,那么输入信号只有时钟信号和我们的复位信号,那么输出信号是连接到我们开发板的扩展 I/O 口,方便我们的测量。
2023-11-01 06:00:56
660
1
原创 [FPGA 学习记录] 分频器---偶分频
所谓的分频,就是把输入信号的频率变成成倍数低于输入频率的输出信号,它的原理是:把输入的信号作为计数脉冲,由于计数器的输出端口是按一定规律输出脉冲的,所以说对不同的端口输出的信号脉冲就可以看作是对输入信号的分频。那么分频后的时钟,我们输出到开发板的扩展 I/O 口,在那儿可以使用逻辑分析仪对它的频率进行测量,我们输出到 F15 端口;那么这两种方法最终的效果都是相同的,而第二种方法的信号 a 是在我们系统时钟的控制下产生的,所以说它和所有的在系统时钟下产生的信号都保持几乎相同的时钟关系,方法是更好的。
2023-11-01 02:14:29
366
1
原创 [FPGA 学习记录] 计数器
在前面的组合逻辑的设计当中,虽然我们也进行了波形图的绘制,但是大家可以感觉到,在前面组合逻辑的设计当中,波形图的绘制它的作用并不是很大,因为我们波形图的绘制,目的有两个:第一是帮助我们对模块功能加以理解,第二是有助于我们代码的编写。然后,我们使用 cnt_flag 信号作为条件对我们的输出信号进行取反,我们的输出信号同样使用的是寄存器,有一个延迟一拍的一个效果,所以说我们输出信号的电平保持,刚好与我们计数器的一个完整的周期是对应的。首先在我们的复位信号有效时,我们让它保持一个低电平,就初值是 0。
2023-10-31 16:26:53
363
1
原创 [FPGA 学习记录] 阻塞赋值与非阻塞赋值
那么经过上次的了解,有的朋友可能还没有理解阻塞赋值与非阻塞赋值的概念,那么有的朋友可能理解了,但是他们不知道应该怎么使用,也就是说不知道什么时候使用阻塞赋值,什么时候使用非阻塞赋值。它俩却没有延迟一拍的一个关系了,而是在同一时刻变化的,这是因为我们使用的是阻塞赋值,也就是说赋值号右边的表达式它的值有变化,赋值号左边的表达式立刻发生变化。一个时钟周期,是因为使用的是非阻塞赋值,也就是说,只要赋值号右边的表达式的值有变化了,赋值号左边的表达式的值不会立刻发生变化,需要等待下一个时钟沿到来时一起变化,所以说。
2023-10-29 22:06:29
377
原创 [FPGA 学习记录] 时序逻辑的开始---寄存器
在前面几小节当中,我们重点使用 Verilog 语言,实现了几种简单的组合逻辑。目的是让大家熟悉一下语法,学会设计的思想方法和步骤。那么从本小节开始,我们就进入到时序逻辑的设计。那么时序逻辑的设计,必不可少的就是我们的寄存器。那么寄存器的讲解可以分为两个部分:同样是理论部分和实战部分。在理论部分我们会对寄存器的相关知识做一个讲解,在实战演练部分,我们会通过实验向大家展示时序逻辑的设计。下面就是第一部分:理论部分的学习。
2023-10-29 17:47:34
870
1
原创 [FPGA 学习记录] 避免latch的产生
latch 其实就是锁存器。它是一种在异步电路系统中对输入信号电平敏感的单元,可以用来存储信息。那么锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器一样。但是一旦我们的锁存信号有效时,数据就被锁存,输入信号是不起作用的。因此,锁存器也被称为透明锁存器,它指的是:不锁存时输出对于输入是透明的。那么以上就是 latch 的概念解析。在这个概念解析当中,我们提到了一个词叫做异步电路。既然提到了异步电路,与它对应的就是同步电路。这两种电路有什么区别呢?我们来比较一下异步电路与同步电路。
2023-10-27 13:22:00
356
1
原创 [FPGA 学习记录] 层次化设计
在前面几小节当中,我们已经对简单组合逻辑中的多路选择器、3-8译码器以及半加器,它们的理论知识做了一个讲解,而且通过实验设计并实现了它们的功能,在我们的征途系列开发板上也得到了功能的验证。在本小节当中,我们将会为大家讲解一种设计思想,就是我们的层次化设计思想。在我们基础篇当中涉及的实验例程,它们的功能都是比较简单的,模块划分也是相对较少的,有些工程只需要一个模块就可以实现它的功能,比如说我们前面提到的多路选择器、3-8译码器和半加器,它们并不能很明显的体现我们的层次化设计思想。
2023-10-25 03:37:31
459
原创 [FPGA 学习记录] 简单组合逻辑——半加器
在前面两小节当中,我们设计并实现了简单组合逻辑中的多路选择器和3-8译码器。那么本小节我们将使用 Verilog 语言描绘一个具有半加器功能的电路,同样使用的是简单组合逻辑,为什么要实现半加器功能呢?我们是想通过半加器引入我们的全加器,进而引入层次化设计的方法。本小节的主要内容分为两个部分:第一部分是理论学习,第二部分是实战演练。在理论学习部分,我们会讲解一下半加器的相关内容;在实战演练部分,我们会设计并实现一个半加器。首先开始理论学习。
2023-10-24 02:25:09
513
原创 [FPGA 学习记录] 简单组合逻辑——译码器
在本小节我们继续使用简单组合逻辑,设计并实现一个具有译码器功能的电路。我们这样做的目的是为了继续巩固整个设计流程,以及我们语法的使用。本小节的主要内容分为两个部分:第一部分是理论学习,在这一部分我们会学习译码器的相关知识;第二部分是实战演练,通过实际操作,设计并实现一个3-8译码器。下面就是第一部分理论学习的内容。
2023-10-23 12:04:26
340
原创 [FPGA 学习记录] 简单组合逻辑——多路选择器
选择困难症患者是不是经常面临这种情况:在餐馆点餐时,面对菜单上的不同口味菜品,无法立即下定决心吃哪个菜?如果在FPGA内部,我们需要它选择不同的数据线路,那么它必须实时准确的做出选择。这里就需要使用到多路选择器进行判断选择了。可以这样对应起来:输入到多路选择器的不同的数据线路对应菜单上的不同菜品,输入选择器的选通信号对应我们的口味,从多路选择器输出的线路就对应我们下单的那份菜品了。看来我们的大脑里应该就有一个多路选择器🤔
2023-10-10 17:49:02
1943
1
原创 [FPGA 学习记录] 点亮你的 LED 灯
在前面的章节我们已经将FPGA开发软件安装完毕,这一章里我们将通过建立一个完整的工程来验证软件安装是否正确,是否可以实现软件的基本操作。同时,我们以点亮一个led的工程为例,来了解一下完整的FPGA开发流程。
2023-10-09 23:19:36
481
1
原创 [FPGA 学习记录] 初识 Verilog
Verilog HDL 是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。1怎么理解?假如说,如果想要实现计数器的一个逻辑功能,那么可以使用我们的 Verilog HDL 语言,通过代码的编写对计数器的逻辑功能进行一个描述。代码编写完成之后使用我们前面安装的 Quartus II 开发软件对 Verilog HDL 语言编写的代码进行一个分析综合、布局布线等一系列操作,然后将生成的网表文件下载到 FPGA 开发板中
2023-10-08 19:47:35
308
1
原创 新建Typora File添加到Win10系统右键新建快捷选项
在浏览文件夹时,如果你想要新建 Markdown 文档并使用 Typora 打开,如果你的右键新建菜单中还没有添加 Markdown File 选项,那么这个过程可能比较麻烦一些:打开Typora软件(或者其它的Markdown编辑器)-->另存为-->查找存放路径。但是,你可以通过这个方法来简化这个过程。
2023-10-07 13:44:24
930
3
原创 [FPGA 学习记录] FPGA 开发环境的搭建
FPGA 开发环境的搭建文章目录一、Quartus II 主体软件安装[^1][^2]1.1 选择软件安装位置1.2 找到安装包存放位置1.3 运行安装程序1.4 开始安装1.5 安装位置的选择1.6 安装组件的选择1.7 显示安装的整体信息1.8 等待软件安装1.9 软件安装完成二、器件库的安装2.1 找到器件库安装程序2.2 开始安装2.3 选择器件库2.4 器件库组件的选择2.5 安装的整体信息2.6 等待软件安装2.7 器件库安装完成三、USB-Blaster 驱动的安装3.1 连接 USB-Bl
2021-12-15 23:46:20
5931
5
原创 【笔记】安装 TensorFlow
【笔记】安装 TensorFlow封面来源:Electronic-Comics: 电子漫画系列2.3.11 手把手教你安装TensorFlow 学习笔记TensorFlow 的安装过程记录一、创建环境二、安装 tensorflow三、安装 IPython四、安装 Jupyter一、创建环境1、打开 Anaconda Prompt在 Win10 桌面左下角的搜索栏????输入 Anaconda Prompt,搜索栏上方出现应用 “Anaconda Prompt”,鼠标????左键点击进入。如下图所
2021-10-08 08:57:47
335
原创 【笔记】使用 Jupyter notebook
封面来源:Electronic-Comics: 电子漫画系列使用 Jupyter notebook在 Anaconda 中打开 Jupyter notebook 后,浏览器中出现主页:点击右上角New ▼,在下拉列表中选择 Other: Folder,新建一个文件夹选择点击左上角 Rename,重命名文件夹,我这里命名为 captainbedAINotes:点击右上角 Rename,重命名成功:点击该文件夹,进入:点击右上角 New ▼,下拉列表中选择 Notebook: Pyt
2021-10-02 19:35:42
225
原创 【笔记】安装 Anaconda3
封面来源:Electronic-Comics: 电子漫画系列安装 Anaconda目前 Anaconda 公司已经不允许清华镜像站提供下载链接了~但是去官网下载又很慢,所以我把 Anaconda 安装包放到云盘中了,可以方便大家下载!地址是:https://share.weiyun.com/5SVv4aM。注意,这个安装包是 64 位的,具体是 64 位的还是 x86 的,根据你自己的电脑选择,一般电脑都是 64 位的了吧。 如果你的电脑是 x86 的,那么看下一段文字!如果你不知道你的电脑是 64
2021-10-02 19:18:23
667
原创 【笔记】Head First Python 01 基础知识:快速入门
基础知识01 基础知识:快速入门1、第一个程序2、标准库认识创建文件编辑已有文件3、使用 `if/elif/else` 语句完成判定:4、代码组:要点[^1]5、在 Shell 里执行代码6、for 循环例1例2例37、使代码暂停后再执行8、生成随机整数导入模块shell 可以帮助罗列模块中的函数名shell 可以将帮助文档直接显示randint 函数的上手使用9、odd2.py要点[^2]10、beersong.pyhelp(range)STOP 值允许你控制范围何时结束STEP 值允许你控制如何生成范围
2021-09-29 19:26:40
1014
原创 【编程练习】《全国计算机考试二级教程—— C 语言程序设计(2019年版)》第 6 章 字符型数据,习题:三、编程题
编程题6.19 请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的 ASCII 代码值,每行输出三对。5.20 请编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格。请编程,把这一行中的数字转换成一个整数。例如,若输入:6.19 请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的 ASCII 代码值,每行输出三对。输出时分别用格式控制符 %c 和 %d 就能将输入的每个字符及对应的 ASCII 码值输出。环境:Microsoft Visual C++
2021-09-22 09:05:20
1217
字符变量与字符常量的比较问题
2021-09-14
if...else...用法的逻辑问题
2021-09-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人