01 2022 档案

合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试
摘要:合宙AIR105(一): Keil MDK开发环境, DAP-Link 烧录和调试AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售. 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz, 片上内建640KB SRAM和4MB Flash. QFN88封装, 尺寸10x10mm, 56个可编程GPIO PIN. 合宙提供了这个芯片及开发板的 LuatOS 开发环境和工具链, 但还是有很多开发用户希望能使用纯C语言的环境和工具链. 以下说明如何在Keil5 MDK中使用 DAP-Link 和 WCH-Link 烧录 AIR105 开发板. 阅读全文

posted @ 2022-01-31 15:30 Milton 阅读(7098) 评论(2) 推荐(1) 编辑

MySQL专题2: 事务和锁
摘要:合集目录 MySQL专题2: 事务和锁 说说数据库事务特性及存在的问题 这属于数据库事务的基础概念了, 就是ACID Atomicity, 原子性, 事务包含的所有操作要么全部成功, 要么全部失败回滚. Consistency, 一致性, 事务执行前后, 数据库的数据要保持一致性. Isolatio 阅读全文

posted @ 2022-01-30 17:59 Milton 阅读(150) 评论(0) 推荐(0) 编辑

MySQL专题1: 字段和索引
摘要:架构师专题的数据库和存储部分, MySQL的字段和索引问题合集. Float、Decimal 存储金额的区别? Datetime、Timestamp 存储时间的区别? CHAR, VARCHAR, BINARY, VARBINARY 存储字符的区别? MySQL 有哪些存储引擎? 都有什么区别? MySQL 几种存储引擎的应用场景? MySQL索引类型有? 对比一下B+树索引和 Hash索引 聚簇索引和非聚簇索引的区别? 非聚集索引中的聚集索引键 B+tree 如何进行优化? 索引遵循哪些原则? 还有什么其他的索引类型, 各自索引有哪些优缺点? 如何管理 MySQL索引? 对Explain 结果中参数的理解? 索引与锁有什么关系? 阅读全文

posted @ 2022-01-30 16:57 Milton 阅读(537) 评论(0) 推荐(0) 编辑

STC8H开发(八): NRF24L01无线传输音频(对讲机原型)
摘要:STC8H使用NRF24L01无线传输音频, 发送部分需要实现的是8kHz采样, 并通过NRF24L01将每秒的8000字节数据发送出去. 语音输入MAX9814. NRF24L01在设置为1Mbps带宽时实际传输速度能达到23k字节每秒, 因此对于8bit 8kHz采样的传输是没问题的. 因为NRF24L01传输时的响应和重发机制, 在信号不好时, 容易卡顿, 为了避免中间传输时间的波动影响, 在实际实现中使用了双数组做缓冲. 阅读全文

posted @ 2022-01-28 10:58 Milton 阅读(3497) 评论(0) 推荐(2) 编辑

沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置
摘要:沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置DAP-Link 是ARM官方的一款开源的调试仿真器,也叫CMSIS-DAP, 几乎支持所有Cortex-M内核的MCU,不挑品牌厂家. 其功能等价于ST的ST-Link. 在 Linux 的 PlatformIO 中, 需要做一些配置才能对 CH32F103C8T6 进行烧录. WCH-Link是基于WCH549芯片的下载和调试模块, 支持3.3V/5V双电源输出, 支持USB转TTL串口, 用LED指示灯标识工作状态, CMSIS-DAP模式可以用于带有SWD接口的 ARM 内核MCU的调试和下载 阅读全文

posted @ 2022-01-27 00:44 Milton 阅读(5534) 评论(1) 推荐(2) 编辑

沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录
摘要:StdPeriphLib_CH32F1 是用于 CH32F1 系列MCU的 SPL 风格封装库, 使用 arm-none-eabi-gcc 工具链, 兼容 Linux 下的 VSCode+PlatformIO 开发环境 阅读全文

posted @ 2022-01-25 19:03 Milton 阅读(1701) 评论(0) 推荐(0) 编辑

沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录
摘要:沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录CH32F1系列是沁恒生产的32位Cortex-M3 MCU, 片上集成了时钟安全机制、多级电源管理、 通用DMA控制器等. 此系列具有 2 路 USB2.0接口、多通道 TouchKey、 12 位 DAC 转换模块, 多通道 12 位 ADC、 多组定时器、 CAN 通讯控制器、 I2C/USART/SPI 等丰富的外设资源. 与STM32F103系列芯片相比, 管脚和寄存器兼容, 增加了USB功能, 有2个USB, 一个Host, 一个Device, 增加了DAC, 供电兼容5V, flash下载算法和内部BootLoader和STM32不兼容, 需要使用沁恒提供的算法, 或者使用沁恒的下载软件通过串口和USB下载. 阅读全文

posted @ 2022-01-24 21:09 Milton 阅读(7479) 评论(1) 推荐(2) 编辑

SDCC 的 MCS-51 汇编基础概念和传参方式
摘要:SDCC汇编函数参数传递, 第一个参数和返回值总是使用全局寄存器 DPL, DPH, B 和 ACC, 对于第二个及之后的参数, 分非重入方法和重入方法两种情况, 可能存储在全局变量中也可能存储在堆栈上 阅读全文

posted @ 2022-01-23 21:06 Milton 阅读(2205) 评论(0) 推荐(0) 编辑

STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
摘要:STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块MPU-6050是InvenSense生产的六轴运动跟踪芯片, 芯片尺寸4×4×0.9mm, QFN封装. 整合了三轴陀螺仪, 三轴加速度计, 片内温度传感器和数字运动处理器(DMP), 可以使用I2C接口外接三轴电子罗盘的输入,提供完整的九轴运动融合输出. 阅读全文

posted @ 2022-01-22 12:54 Milton 阅读(2521) 评论(0) 推荐(0) 编辑

STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
摘要:STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块ADXL345是一款常见的的3轴加速度计, Analog Device生产. 13位分辨率, ±16 g测量范围, 分辨率3.9 mg/LSB. 可通过SPI(3线或4线)或I2C接口访问. 主要用于倾斜检测, 静态重力加速度测量, 以及运动或冲击导致的动态加速度测量. 能够测量不到1.0°的倾斜角度变化. 可以对单击, 双击, 自由落体等情况设置中断. 市面上的模块, 一般是8个pin脚, 在使用SPI接线方式的情况下, 与STC8H的接线方式如下. 除了SPI用到的CS, MISO, MOSI, SCLK以外, STC8H还需要提供两个中断输入, 因为INT0, INT1已经被SPI接口占用, 所以只能用INT2和INT3, 这两个外部中断只支持低电平触发, 所以在ADXL345中需要设置中断输出为active low. 阅读全文

posted @ 2022-01-19 11:51 Milton 阅读(2577) 评论(0) 推荐(3) 编辑

Spring专题2: DI,IOC 控制反转和依赖注入
摘要:合集目录 Spring专题2: DI,IOC 控制反转和依赖注入 https://docs.spring.io/spring/docs/2.5.x/reference/aop.html https://docs.spring.io/spring/docs/2.5.x/reference/aop.ht 阅读全文

posted @ 2022-01-15 21:29 Milton 阅读(69) 评论(0) 推荐(0) 编辑

Spring专题1: 静态代理和动态代理
摘要:合集目录 Spring专题1: 静态代理和动态代理 为什么需要代理模式? 代理对象处于访问者和被访问者之间,可以隔离这两者之间的直接交互,访问者与代理对象打交道就好像在跟被访者者打交道一样,因为代理者通常几乎会拥有全部被代理者的职能,代理对象能够处理的访问请求就不必要劳烦被访问者来处理了. 代理对象 阅读全文

posted @ 2022-01-15 21:17 Milton 阅读(127) 评论(0) 推荐(0) 编辑

JVM专题3: GC 垃圾回收
摘要:合集目录 JVM专题3: GC 垃圾回收 什么是GC? 为什么要有 GC? Garbage Collection, 用于内存回收. 简述一下 Java 垃圾回收机制? 那些内存需要回收 虚拟机中程序计数器, 本地方法区, 虚拟机栈随着线程而消亡. 栈中的栈帧随着方法调入和调出而产生和消亡, 垃圾回收 阅读全文

posted @ 2022-01-15 21:16 Milton 阅读(145) 评论(0) 推荐(0) 编辑

JVM专题2: JVM内存结构
摘要:合集目录 JVM专题2: JVM内存结构 Java 内存分配 JVM 内存结构 The JVM is an abstract computing machine that enables a computer to run a Java program. There are three notion 阅读全文

posted @ 2022-01-15 21:15 Milton 阅读(218) 评论(0) 推荐(0) 编辑

JVM专题1: 类和类加载机制
摘要:合集目录 JVM专题1: 类和类加载机制 Java对象的结构 在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域 对象头Header 实例数据Instance Data 对齐填充Padding 对象头包含的数据有 markword 用于存储对象自身的运行时数据, 如HashCode, 阅读全文

posted @ 2022-01-15 21:11 Milton 阅读(100) 评论(0) 推荐(0) 编辑

Java多线程专题6: Queue和List
摘要:合集目录 Java多线程专题6: Queue和List CopyOnWriteArrayList 如何通过写时拷贝实现并发安全的 List? CopyOnWrite(COW), 是计算机程序设计领域中的一种优化策略, 即写入时复制. 其机制当有多个线程同时去请求一个资源时(可以是内存中的一个数据), 阅读全文

posted @ 2022-01-15 21:09 Milton 阅读(349) 评论(0) 推荐(0) 编辑

Java多线程专题5: JUC, 锁
摘要:合集目录 Java多线程专题5: JUC, 锁 什么是可重入锁、公平锁、非公平锁、独占锁、共享锁 可重入锁 ReentrantLock A ReentrantLock is owned by the thread last successfully locking, but not yet unlo 阅读全文

posted @ 2022-01-15 21:02 Milton 阅读(76) 评论(0) 推荐(0) 编辑

Java多线程专题4: 锁的实现基础 AQS
摘要:合集目录 Java多线程专题4: 锁的实现基础 AQS 对 AQS(AbstractQueuedSynchronizer)的理解 Provides a framework for implementing blocking locks and related synchronizers (semap 阅读全文

posted @ 2022-01-15 21:00 Milton 阅读(102) 评论(0) 推荐(0) 编辑

Java多线程专题3: Thread和ThreadLocal
摘要:合集目录 Java多线程专题3: Thread和ThreadLocal 进程, 线程, 协程的区别 进程 Process 进程提供了执行一个程序所需要的所有资源, 一个进程的资源包括虚拟的地址空间, 可执行的代码区, 可用的系统接口, 本地存储, 系统保障的安全上下文(security contex 阅读全文

posted @ 2022-01-15 20:55 Milton 阅读(500) 评论(0) 推荐(0) 编辑

Java多线程专题2: JMM(Java内存模型)
摘要:合集目录 Java多线程专题2: JMM(Java内存模型) Java中Synchronized关键字的内存语义是什么? If two or more threads share an object, and more than one thread updates variables in tha 阅读全文

posted @ 2022-01-15 20:46 Milton 阅读(111) 评论(0) 推荐(0) 编辑

Java多线程专题1: 并发与并行的基础概念
摘要:合集目录 Java多线程专题1: 并发与并行的基础概念 什么是多线程并发和并行? 并发: Concurrency 特指单核可以处理多任务, 这种机制主要实现于操作系统层面, 用于充分利用单CPU的性能, 时分复用同时处理多个任务 并行: Parallelism 特指使用多核处理单任务或多任务, 这种 阅读全文

posted @ 2022-01-15 20:45 Milton 阅读(247) 评论(0) 推荐(0) 编辑

Java语法专题2: 类变量的初始化顺序
摘要:合集目录 Java语法专题2: 类变量的初始化顺序 问题 这也是Java面试中出镜率很高的基础概念问题 描述一下多级继承中字段初始化顺序 描述一下多级继承中类变量初始化顺序 写出运行以下代码时的控制台输出 public class Base { public static int v1 = meth 阅读全文

posted @ 2022-01-15 20:44 Milton 阅读(199) 评论(0) 推荐(0) 编辑

Java语法专题1: 类的构造顺序
摘要:下面的第二个问题来源于Oracle的笔试题, 非常经典的一个问题, 我从07年开始用了十几年. 看似简单, 做对的比例不到2/10. 问题: 描述一下多级继承中类的构造顺序, 给定两段代码, 分别是父类和子类, 写出(或选择)正确的输出 阅读全文

posted @ 2022-01-15 20:43 Milton 阅读(248) 评论(0) 推荐(0) 编辑

Java架构系列问题合集-目录
摘要:接下来会做一个系列, 分类说明关于Java项目研发和架构工作需要了解的问题 Java语法 Java语法专题1: 类初始化的构造顺序 https://www.cnblogs.com/milton/p/15804995.html 描述一下多级继承中类的构造顺序 给定两段代码, 分别是父类和子类, 写出( 阅读全文

posted @ 2022-01-15 00:48 Milton 阅读(230) 评论(0) 推荐(0) 编辑

STC8H开发(五): SPI驱动nRF24L01无线模块
摘要:对应nRF24L01的SPI通信部分. 这里对发送作了一些优化: 1. 将命令和后续数据合并为字节数组一并发出, 节约发送开销, 2. 发送和接收使用同一段内存地址, 节约内存开销, 3. 每次交互后, 地址的第一个字节都是当前nRF24L01的状态数据, 在某些场景可以避免二次调用. 发送间隔1ms时发送速率最高, 能达到720~748个package每秒, 每个package是32字节, 差不多23K字节每秒 阅读全文

posted @ 2022-01-13 20:54 Milton 阅读(2499) 评论(0) 推荐(0) 编辑

联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡
摘要:联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡FatFs已经将Fat格式的操作作了抽象化, 在新环境下运行FatFs, 只需要实现 diskio.c 中的几个方法, 还需要实现RTC接口, 这样才能在创建文件时写入正确的时间. 完整的代码在演示用例下, 使用了最新的R0.14b版本的FatFs. 在选项中开启了长文件名支持, 开启了对exfat格式的支持, 能正常挂载和读写64GB的大容量TF卡. 阅读全文

posted @ 2022-01-13 16:32 Milton 阅读(1929) 评论(0) 推荐(0) 编辑

STC8H开发(四): FwLib_STC8 封装库的介绍和注意事项
摘要:前面已经介绍了如何在Keil5和PlatformIO环境下使用FwLib_STC8, 展示了ADC数模转换的例子. 这篇整体介绍一下这个封装库, 以及使用这个封装库进行开发的注意事项. 写这个封装库的初衷是希望知识和经验能复用, 避免每次在做STC8G和STC8H的开发时去查手册, 这个是最主要的动机; 其次是要在复用的情况下还能使程序接近直接操作寄存器的效率, 不能因为引入封装库造成明显的资源开销. 阅读全文

posted @ 2022-01-11 01:20 Milton 阅读(3061) 评论(1) 推荐(1) 编辑

STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明
摘要:前面介绍了在Keil5和PlatformIO环境下使用FwLib_STC8, 接下来以STC8H系列为主, 结合demo中的演示用例介绍ADC(模数转换). STC8G和STC8H的ADC部分在寄存器设置上基本上一致, 但是不同型号对应的通道编号, 通道数量和精度有区别. ADC采样的精度实际上是不能设置的, 采样都是用的当前型号的最大精度, 结果存储在[ADC_RES, ADC_RESL]这两个寄存器. 为方便不同场合使用不同精度的结果, 可以将结果设置为左对齐或右对齐. 当设置为左对齐时, 可以只取ADC_RES的值(8位), 忽略最后两位. 当设置位右对齐时, 根据实际的精度, 可以取ADC_RES的低4位(12位精度)或低2位(10位精度), 加上ADC_RESL得到最终结果. 阅读全文

posted @ 2022-01-09 21:50 Milton 阅读(3374) 评论(9) 推荐(0) 编辑

STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)
摘要:STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证. 基于FwLib_STC8的项目, 可以在Linux下使用SDCC编译, 也可以在Windows下使用Keil C51环境进行编译. 前面介绍了在Windows的Keil5环境下使用FwLib_STC8, 以下介绍在Linux(本文使用Ubuntu20.04)的VSCode下的环境搭建 阅读全文

posted @ 2022-01-07 16:32 Milton 阅读(3073) 评论(0) 推荐(2) 编辑

STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
摘要:STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)FwLib_STC8 是一个针对STC8G, STC8H系列MCU的C语言封装库, 适用于基于这些MCU的快速原型验证. 基于FwLib_STC8的项目, 可以在Linux下使用SDCC编译, 也可以在Windows下使用Keil C51环境进行编译. FwLib_STC12封装库较多采样函数方式对寄存器进行封装, 而函数与函数间的层级调用都会增加栈开支, 这样一方面容易对8位MCU的内存造成占用, 另一方面增加了固件尺寸. 在FwLib_STC8封装库中, 尽可能使用宏的方式对寄存器操作进行封装, 控制方法间的层级调用深度, 相比较FwLib_STC12, 节省了固件体积和堆栈占用. 阅读全文

posted @ 2022-01-05 14:00 Milton 阅读(7994) 评论(0) 推荐(1) 编辑

导航