初始化

新金宝

依然范特西╮ 提交于 2020-02-18 03:38:18
目前只实现了主设备模式,一般也只用到主设备模式,IIC如果不能使用硬件方式,读取大量数据的时候效率很大,由于只有1个字节的缓冲区,根本不能使用中断模式(实际使用过程中,IIC会造成100us以内间隔的中断,单片机根本扛不住的),所以建议数据少就直接阻塞,1个字节也就几十us,数据多直接用DMA,将线程阻塞,等待DMA传输完成,而不会阻塞CPU(上传的代码没有实现DMA部分,便于理解)。 目前已经做了完善的错误处理,读写操作前都会清除中断,遇到错误会软复位,所有位置均做了超时处理,防止程序卡死,目前只测试了几个字节的读写,大量的,长时间的读写均表现稳定,目前手上开发板没有eeprom,无法做大数据的连续读写,如果你在使用过程中遇到问题,欢迎指正。 下面是IIC读写的时序例子,可以先熟悉一下,这样比较容易上手,哪一个环节出了问题也要调试。 正在上传…重新上传取消 下面简要说明一下STM32F7硬件IIC的驱动设计方式(建议先百度学习一下IIC的时序要求): [基本的初始化] 1.初始化IIC时钟,IO(IIC IO必须设置为复用开漏输出,这个很重要)。 2.CR1先赋值为0,复位IIC. 3.除了TIMINGR寄存器需要自己计算设置好,其余寄存器全部复位为0 4.设置CR1使能IIC。 注意:上面说到,IIC的IO必须初始化为复用开漏输出,我之前初始化为复用推挽输出,测试很久

java类及实例初始化顺序

匆匆过客 提交于 2020-02-18 00:02:43
1、静态变量、静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只在类加载时,初始化一次) 2、非静态变量、非静态代码块初始化顺序级别一致,谁在前,就先初始化谁。从上而下初始化(只要对象实例化一次,就初始化一次) 3、构造方法在非静态变量、非静态代码块之后执行。 4、子类非静态变量、非静态代码块在父类构造方法之后执行。 5、子类构造方法在父类构造方法之后执行。 6、静态方法不会被子类重写。 来源: https://www.cnblogs.com/yuefeng123/p/12324333.html

mybatis-plus - TableInfo

烈酒焚心 提交于 2020-02-17 19:53:16
在前面 的 inject() 方法中, 调用了一个 TableInfoHelper.initTableInfo(builderAssistant, modelClass) 方法, 来获取 表信息: TableInfo /** * <p> * 实体类反射获取表信息【初始化】 * <p> * * @param clazz 反射实体类 * @return 数据库表反射信息 */ public synchronized static TableInfo initTableInfo(MapperBuilderAssistant builderAssistant, Class<?> clazz) { TableInfo tableInfo = TABLE_INFO_CACHE.get(clazz); if (tableInfo != null) { if (tableInfo.getConfigMark() == null && builderAssistant != null) { tableInfo.setConfigMark(builderAssistant.getConfiguration()); } return tableInfo; } /* 没有获取到缓存信息,则初始化 */ tableInfo = new TableInfo(); GlobalConfig

Dijkstra迪杰斯特拉算法原理

雨燕双飞 提交于 2020-02-17 16:39:54
定义集合S,初始化只有源点s.把一个个顶点不断往里面收敛; 定义距离的数组dist.初始化为无穷; 时间复杂度:根据不同的实现 1.扫描所有未被收入的顶点,o:v^2+E,对于稠密图效果好。e=v^2(边的条数为点的平方级别,边多为稠密) 2.dist存储在 最小堆 中,取dist只要堆的根节点弹出就行,但是更新时候还要调节堆logv。复杂度elogv;对于稀疏图效果好。 e=v(边的条数与点的个数同级别) 来源: CSDN 作者: Ulez_柚子 链接: https://blog.csdn.net/s122ktyt/article/details/104357753

C++中类成员变量的初始化问题

ⅰ亾dé卋堺 提交于 2020-02-17 16:37:38
C++11之后允许对非静态成员变量进行初始化(in-class initialization),不过对于 非fundamental(非基本数据) 类型需要采用的是initializer_list来实现的 所以如下代码是错误的: class A{ public: int x=1; string s="qweqetfqw"; vector<int>p(1,0);//这句错了,vector不是基本数据类型,必须用大括号初始化 }; 改成下面这样就正确了: class A{ public: int x=1; string s="qweqetfqw"; vector<int> p{0};//用大括号直接初始化 }; 或者: class A{ public: int x=1; string s="qweqetfqw"; vector<int> p={0};//用复制拷贝函数初始化 }; 来源: https://www.cnblogs.com/FdWzy/p/12322161.html

【翻译】C#编程语言和JAVA编程语言的比较(上)

僤鯓⒐⒋嵵緔 提交于 2020-02-17 15:56:34
原文地址: http://www.25hoursaday.com/CsharpVsJava.html 简介 C#语言是一门面向对象的语言,开发者可以使用C#和微软.NET平台快速构建各种应用程序。C#和.NET平台的目标是把开发者从一些诸如内存管理、类型安全问题、底层类库、数组边界检查等等的底层问题中解放出来并节约大量的时间,这样开发者就可以真正把时间和精力放在他们的应用程序和业务逻辑上。对于Java开发者来说,把前面那句话的开头改为“Java语言和平台”,这句话也同样可以总结Java语言和平台。 后面的内容介绍了C#和Java编程语言的异同,这些都是基于我使用两个语言的经历。所有代码都经过微软.NET框架2.0以及Java SE 6的测试。 注意:作者有些代码不符合.NET 3.5或JAVA SE 7(或以上)版本的最佳实践写法并且也不能覆盖它们所提供的新语法和新特性,但不影响本文的重点也就是平台的比较。 第一部分:C#和JAVA基本一致的地方 1、我们都是Object C#的类层次中有一个根,也就是所有C#的类都是System.Object的子类,Java也是这样,所有类都是java.lang.Object的子类。两个语言的Object类的方法有些相同(比如System.Object的ToString()和java.lang.Object的toString()),也有一些不同

《JSP应用开发详解》学习:Servlet实现相关

坚强是说给别人听的谎言 提交于 2020-02-17 15:38:15
Servlet实现相关的类和接口 1、Servlet public interface Servlet 所有Servlet必须直接或间接实现的接口。 方法: init(ServletConfig config)用于初始化Servlet destroy()销毁Servlet getServletInfo()获得Servlet的信息 getServletConfig()获得Servlet的相关配置 servier(ServletRequest req,ServletResponse res)运行应用程序逻辑的入口点。 2、GenericServlet public abstract class GenericServlet implements Servlet,ServletConfig,java.io.Serializable 提供了对Servlet接口的基本实现。是一个抽象类,service()是一个抽象方法。 3、HttpServlet public abstract class HttpServlet extends GenericServlet implements java.io.Serializable 针对使用Http协议的web服务器的Servlet类。其子类实现doGet(),doPost(),doPut(),doDelete(),int()destroy()

单片机启动文件

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-17 14:47:58
初始化堆栈指针SP 初始化PC指针 初始化中断向量表 配置系统时钟 调用C库函数_main,最终去到C的世界 启动代码通常都烧写在flash中,它是系统一上电就执行的一段程序,它运行在任何用户c代码之前。上电后,arm处理器处于arm态,运行于管理模式,同时系统所有中断被禁止,pc到地址0处取指令执行。一个可执行映像文件必须有个入口点,而能放在rom起始处的映像文件的入口地址也必须设置为0.在汇编语言中,我们已经说过怎样定义一个程序的入口点,当工程中有多个入口点时,需要在连接器中使用-entry指出程序的入口点。如果用户创建的程序中,包含了main函数,则与c库初始化代码对应的也会有个入口点。 总的来说,启动代码主要完成两方面的工作,一是初始化执行环境,例如中断向量表、堆栈、i/o等;二是初始化c库和用户应用程序。在第一阶段,启动代码的人物可以描述为: (1)建立中断向量表; (2)初始化存储器; (3)初始化堆栈寄存器; (4)初始化i/o以及其他必要的设备; (5)根据需要改变处理器的状态。 -->建立中断向量表 初始化代码必须建立好中断向量表,以备应用程序后续使用。如果系统的地址0处是rom,则中断向量表直接是一些跳转指令就可以了,他们转到相应的中断处理函数执行。如果系统的0地址处不是rom,则中断向量表是通过动态的方式创建的,这主要是通过存储器映射的方式来实现:即上电后

C/C++ 全局变量初始化

一世执手 提交于 2020-02-17 09:08:05
C语言全局变量只能用常量表达式初始化,不能用一个数学函数或者其他的需要在运行时才能计算出结果的表达式进行初始化。 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊,main 函数执行前到底具体是什么时候呢?是编译时还是运行时?答案是既有编译时,也可能会有运行时(seriously), 从语言的层面来说,全局变量的初始化可以划分为以下两个阶段(c++11 N3690 3.6.2): static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero initialization 和 const initialization,静态初始化在程序加载的过程中完成,对简单类型(内建类型,POD等)来说,从具体实现上看,zero initialization 的变量会被保存在 bss 段,const initialization 的变量则放在 data 段内,程序加载即可完成初始化,这和 c 语言里的全局变量初始化基本是一致的。 dynamic initialization:动态初始化主要是指需要经过函数调用才能完成的初始化,比如说:int a = foo(),或者是复杂类型(类)的初始化(需要调用构造函数)等。这些变量的初始化会在 main 函数执行前由运行时调用相应的代码从而得以进行(函数内的 static

Java数组

柔情痞子 提交于 2020-02-17 08:05:49
1.Java中的数组   数组是一种引用类型。数组用于存放一组数据类型统一的数据。 1.1.一维数组   定义一个数组:     数据类型[] 数组名称;   动态初始化:     数据类型[] 数组名称 = new 数组类型[数组长度]; 1 int[] javaCore = new int[74];   静态初始化:     数据类型[] 数组名称 = new 数组类型[]{元素1,元素2,...};   静态初始化(简化格式,常选择这样初始化数组):     数据类型[] 数组名称 = {元素1,元素2,...}; 1 double[] salary = new double[] {3500.0, 5500.0, 7000.0}; 2 double[] salary = {3500.0, 5500.0, 7000.0}; //简便格式   数组的长度:属性length 1 int[] ar = { 3, 2, 45, 455, 4, 45, }; 2 System.out.println(ar.length);    注意 :     一旦数组被创建,数组的长度就不能发生改变。 1.2.二维数组   二维数组,就是元素为一维数组的数组。   定义格式:     A.数据类型[][] 数组名; (推荐方式)     B.数据类型 数组名[][];     C.数据类型[]