初始化

基于stm32mini开发板的简易函数发生器和简易示波器

五迷三道 提交于 2020-02-27 11:00:48
基于stm32 mini开发板的简易函数发生器和简易示波器 前言:这是我学习完stm32基础知识后做的第一个比较综合的项目,由于本人学习时间不长,在程序设计方面能力不强,故展示的代码或者方法可能有误,还请各位大佬海涵,我也很高兴大家能在评论区提出建议和意见,谢谢。 一、项目整体思路和实现的功能 这个项目是基于正点原子stm32 mini开发板设计的,使用芯片为STM32F103RCT6,相关配置步骤和基础知识,可以在正点原子论坛找到。 (一)、简易示波器思路和功能 利用stm32强大的ADC功能,在一定时间内采集IO口电压,将采集到的一定数值保存在数组中,经过数据处理后,显示在LCD上。 能实现正电压下,0~3.3v电压的显示,以及最高10KHZ的频率显示(10K以上显示将不清晰)。能通过两个按键实现对ADC采样周期的转换,分为us级和ms级。 (二)、简易函数发生器思路和功能 利用stm32强大的DAC和DMA功能,以定时器2触发DAC转换,以DMA传送需要转换的数值,以达到目标波形的输出。 能实现正弦波,三角波,方波,锯齿波,甚至模拟噪声波等多种波形的输出,可以调节输出波形的幅值和频率。 二、程序设计和部分原理解释 (一)、外围按键设计 这部分主要涉及改变ADC采样周期,由于整个程序有延时,必须采用中断的方式读取键值并改变采样周期标志位,这样才能达到按一次改变一次的效果

C++中指针和引用的区别

和自甴很熟 提交于 2020-02-27 10:27:17
1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来 的变量实质上是同一个东西,只不过是原变量的一个别名而已。如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。 而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单 元。 (2)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。 (3)可以有const指针,但是没有const引用; (4)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的) (5)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化; (6)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。 (7)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小; (8)指针和引用的自增(++)运算意义不一样; (9)如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏; 来源: https://www.cnblogs.com

Java高频面试题

谁说胖子不能爱 提交于 2020-02-27 10:20:35
前言 疫情确诊的人数每天都在增加,离去的人也在增多,这个世界上有很多事我们无能为力也无从选择,日升日落,白昼黑夜,我们能看见白昼中的光芒,我们也能看见黑暗里的流氓。暮色四合,龌龊八开。鲜花还是塑料花,香或臭,当潮水散去,现在即历史,而历史通常是由后人说的。 所以还是上次跟乡亲们说的,我们不要传播未经证实或者不该传播的消息,舆论的力量是我们无法估计的,有些也是我们无法承担的,所以乡亲们也要重视起来,点到即止。无法控制别人,但可以做好自己,帮不了别人,但可以不祸害别人。 我不是个喜欢蹭热度的人,上面那段话乡亲们看看就好,现阶段最重要的就是老老实实待在家里,不聚集,也尽量不出门,自己和家人都要做好安全防护,老百姓经历了太多风风雨雨,相信这次一定也会安然无恙的渡过此劫。那待在家里的这段时间,如果能远程办公的,就做好公司交代的事,无法办公的乡亲们也不要停止学习,因为疫情过去之后,一定会有巨大的变动或者机会来临,而到那时,你准备好了吗? 这几天一直在想,码之初能做点什么?最终决定在这个期间就推出一个面试系列,都是经过我精心整理的,希望能给乡亲们一点帮助。下面进入正题。 高频面试题 1、说说对象的四中引用? 1) 强引用 只要引用存在,垃圾回收器永远不会回收。 Object obj = new Object(); User user=new User(); 可直接通过obj取得对应的对象 如

(二)系统移植之uboot

我只是一个虾纸丫 提交于 2020-02-27 09:26:21
BootLoader:嵌入式系统从开始上电到系统启动需要一个引导过程,这个引导程序就叫作启动加载程序,即BootLoader。它在操作系统运行之前运行,它负责初始化硬件设备,建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。最常用的一种就是uboot。 uboot的配置编译:uboot的编译是基于GNU Makefile组织编译的,顶层的Makefile完成对开发板整体配置,然后递归调用各级子目录下的Makefile,最后把所有编译过的程序链接成u-boot映像。 具体的配置流程: 解压uboot源码:"$ tar -xvf u-boot-2013.01.tar.bz2" 修改顶层的Makefile(改为自己交叉编译工具链):ifeq (arm, $(ARCH)) CROSS_COMPILE ?= /opt/arm-linux-gcc-4.8.3/bin/arm-none-linux-gnueabi- 进入源码目录,并配置:"$make exynos4412_config" 编译:make 编译好的uboot就可以烧写到开发板中。 串口调试命令:uboot烧写好后,还需要串口调试设置相关环境变量,主要有: 设置内核启动参数:setenv bootargs root=/dev/nfs nfsroot=192.168.9.120:/source

Git初始化及仓库创建和操作

妖精的绣舞 提交于 2020-02-27 08:40:43
Git的三棵树 工作区(Working Directory) 暂存区(stage) Git仓库(git repository) /*基本信息设置,该设置在GitHub仓库主页显示谁提交了该文件*/ $ git config --global user.name 'WhatIsYourIdeality' # 设置用户名 $ git config --global user.name 'blingbling@126.com' # 设置用户邮箱 /*初始化一个新的Git仓库*/ $ mkdir filename # 创建新的文件夹 $ cd filename # 进入该文件夹 $ pwd # 显示当前位置(文件夹) $ git init # 在该文件夹内初始化(创建)仓库,可以看到一个'.git'隐藏文件,它是用来存储本地仓库信息的 ​ $ touch a1.c # 创建新文件fileneme.extensionname $ rm a1.c # 删除文件 $ touch a1.c $ git status # 查看进程状况 No commits yet Untracked files: ( use "git add <file>..." to include in what will be committed ) a1.c nothing added to commit but

子类构造、析构时调用父类的构造、析构函数顺序

不羁的心 提交于 2020-02-27 07:03:31
析构函数调用的次序是 先派生类的析构后基类的析构 ,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。 而 定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。 原因: 派生类构造函数中的某些初始化可能是基于基类的,所以规定构造在类层次的 最根处 开始,而在 每一层,首先调用基类构造函数,然后调用成员( 此处的成员只指各种类对象如QString a,不含基本类型变量如int n、指针变量如QString *a )对象构造函数 ( 因为C++的成员变量是不会自动初始化的,只能使用初始化列表初始化(调用成员的构造函数,如果不在初始化列表中显式调用的话,则会隐式调用成员变量的默认构造函数,通过汇编可以发现)或在本层构造函数内初始化) 参考:http://www.cnblogs.com/lidabo/p/3790606.html )。 如果没有显式调用基类的构造函数,会自动调用基类的无参构造函数。而如果基类只有带参数的构造函数,则会报错。不一定要显式的无参构造函数,可以显式调用基类带参数的构造函数。 #include<iostream> using namespace std; class Base{ public: Base(int c){cout<< "基类带参构造函数" << c << endl

java 基础之异常

倖福魔咒の 提交于 2020-02-27 06:06:46
1.构造函数中的异常 在一个项目中多个方法中都用到了外部的配置文件,所以想写一个单例模式来读取一次外部配置文件,而不是每次用的时候都读一次. 代码如下: //实际本质上就是只返回一个SingletonProps 实例. public class SingletonProps { private Properties properties; private SingletonProps() throws IOException { InputStream in = this.getClass().getResourceAsStream("/System.properties"); //注意,这里不能改成参数的形式!!!,因为会初始化一次. properties = new Properties(); properties.load(in); }; //私有 //静态私有内部类 private static class SingletonHolder { private static final SingletonProps singleton_Props =new SingletonProps(); } public static final SingletonProps getInstance() { return SingletonHolder.singleton_Props;

类加载机制与反射

☆樱花仙子☆ 提交于 2020-02-27 02:43:40
1、类的加载、连接和初始化 加载类的时机 第一次使用该类 采用预加载机制加载类 Java虚拟机进程(JVM进程) 同一个JVM里的所有线程、所有变量都处于同一个进程里,都使用该JVM进程的内存区 JVM进程终止时机 程序运行到最后正常结束。 程序运行到使用System.exit()或Runtime.getRuntime().exit()代码处结束程序。 程序执行过程中遇到未捕捉的异常或错误而结束。 程序所在平台强行结束了JVM进程。 两个JVM进程间并不会共享数据 类的加载 加载、连接、初始化(当程序使用某个类时,如果该类还未加载进内存中,执行这三个步骤来对类进行初始化。)(这三个步骤通常连续完成,故统称为类加载、类初始化) 类加载:将类的class文件读入内存,并为之创建一个java.lang.Class对象。 类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是java程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。 开发者可以通过继承ClassLoader基类来创建自己的类加载器。 通过使用不同的类加载器,可以从不同来源加载类的二进制数据 从本地文件系统加载class文件 从JAR包加载class文件 通过网络加载class文件 把一个java源文件动态编译,并执行加载 类加载器通常无需等到“首次使用”该类时才加载该类

设计模式-单例

被刻印的时光 ゝ 提交于 2020-02-27 02:28:15
一、前言 1.单例模式 保证一个类只有一个实例。 常见的应用场景:线程池,方便对池中的线程进行管理 2.单例优缺点: 优点 : ①在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就 防止其它对象对自己的实例化,确保所有的对象都访问一个实例 ②单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。 ③提供了对唯一实例的受控访问。 ④由于在系统内存中只存在一个对象,因此可以 节约系统资源,当 需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能。 ⑤允许可变数目的实例。 ⑥避免对共享资源的多重占用。 缺点: ①不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。 ②由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。 ③单例类的职责过重,在一定程度上违背了“单一职责原则”。 ④滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢 二、饿汉式单例 --立即加载 /** * 饿汉式单例 * 初始化时就已经实例化对象了 * 缺点:一初始化就会实例静态变量,JVM方法区就会为变量分配内存

【基础】属性赋值

僤鯓⒐⒋嵵緔 提交于 2020-02-27 00:28:42
属性赋值 * 1. 在类的属性中,可以有哪些位置给属性赋值? * * ① 默认初始化 * ② 显式初始化 * ③ 构造器中初始化 * ④ 通过"对象.属性"或"对象.方法"的方式,给属性赋值 * * 2.这些位置执行的先后顺序是怎样? * ① - ② - ③ - ④ * * 3.说明:上述中的①、②、③在对象创建过程中,只执行一次。 * ④ 是在对象创建后执行的,可以根据需求多次执行。 public class UserTest { public static void main ( String [ ] args ) { User user = new User ( ) ; System . out . println ( user . name ) ; System . out . println ( user . age ) ; User u1 = new User ( 2 ) ; System . out . println ( u1 . age ) ; //2 u1 . age = 4 ; u1 . age = 8 ; System . out . println ( u1 . age ) ; //4 } } class User { String name ; int age = 1 ; public User ( ) { // name = "Tom"; }