自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 STM32 标准库中的assert_param() 断言函数

1. STM32 提供的标准函数库中使用了断言功能来检测函数输入参数的正确性,我们来看下是如何实现的?void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct){uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;/* Check the parameters */assert_param(IS_GPI...

2021-08-28 11:32:28 804 1

原创 Microchip PIC系列8位单片机入门教程(七)PWM

Microchip PIC系列8位单片机入门教程(七)PWM知识点:(1)捕捉/ 比较/PWM (CCP)模块PIC18F2420/2520/4420/4520 器件配有两个CCP (捕捉/ 比较/PWM)模块。每个模块包含一个16 位寄存器,它可以用作16 位捕捉寄存器、16 位比较寄存器或PWM 主/ 从占空比寄存器。(2)PWM模式在脉宽调制(Pulse Width Modulation,PWM)模式下,CCPx 引脚可输出分辨率高达10 位的PWM输出。 由于CCP2 引脚与PORTB 或

2021-03-21 12:01:47 1565 2

原创 Microchip PIC系列8位单片机入门教程(六)ADC

Microchip PIC系列8位单片机入门教程(六)ADC第一节 知识点ADC(1)10 位模数转换器(A/D)模块:28 引脚器件的模数(Analog-to-Digital,A/D)转换器具有10 路输入,而40/44 引脚器件的模数转换器则具有13 路输入。A/D 模块能将一个模拟输入信号转换成相应的10 位数字信号。(2)此模块有五个寄存器:• A/D 转换结果高位寄存器(ADRESH)• A/D 转换结果低位寄存器(ADRESL)• A/D 转换控制寄存器0 (ADCON0):A

2021-03-21 11:47:48 1089

原创 Microchip PIC系列8位单片机入门教程(五)定时器

Microchip PIC系列8位单片机入门教程(五)定时器第一节 知识点我们通过定时器0的讲解来实现多个定时器的定时功能。(1)Timer0 模块具有以下特征:• 可通过软件选择,作为8 位或16 位定时器/ 计数器• 可读写的寄存器• 专用的8 位软件可编程预分频器• 可选的时钟源(内部或外部)• 外部时钟的边沿选择• 溢出中断(2)TImer0工作原理Timer0 既可用作定时器亦可用作计数器;具体的模式由TOCS 位(T0CON<5>)选择。在定时器模式下(T0CS

2021-03-21 11:29:07 739

原创 Microchip PIC系列8位单片机入门教程(四)中断

Microchip PIC系列8位单片机入门教程(三)第一节 知识点(1)中断PIC18F2420/2520/4420/4520 器件提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高优先级或者低优先级。高优先级中断向量地址为0008h,低优先级中断向量地址为0018h。高优先级中断事件将中断所有可能正在进行的低优先级中断。(2)中断相关寄存器有10 个寄存器用于控制中断的操作。它们是:• RCON :• INTCON• INTCON2• INTCON3• PIR1 和PIR2

2021-03-21 11:16:59 1060

原创 Microchip PIC系列8位单片机入门教程(三)UART串口的使用

Microchip PIC系列8位单片机入门教程(三)UART串口的使用第一节 知识点关键点(1)增强型通用同步/ 异步收发器(EUSART):增强型通用同步/ 异步收发器(Universal Synchronous Asynchronous Receiver Transmitter,EUSART)模块是两个串行I/O 模块之一。(通常,USART 也被称为串行通信接口或SCI。)可以将EUSART 配置为能与CRT终端和个人计算机等外设通信的全双工异步系统;也可以将它配置成能够和A/D 或D/A

2021-03-20 23:21:50 1328

原创 Microchip PIC系列8位单片机入门教程(二)点亮LED灯

Microchip PIC系列8位单片机入门教程(二)点亮LED灯前言:器件选择PIC18F4520第一节 配置字(1)配置字的含义:PIC系列的单片机都有配置字,这是从宏观设置单片机功能的寄存器,我们不需要手动配置。首先我们新建一个源文件main.c在包含头文件的前面单击,让光标在前面。在工具栏中点击Production->set Configutation Bits配置好之后点击红色框就将配置的信息插入到main.c 的头文件包含语句的前面了。这个必须在包含头文件的语句之前。(

2021-03-20 20:26:03 1279 1

原创 Microchip PIC系列8位单片机入门教程(一)开发环境建立

Microchip PIC系列8位单片机入门教程(一)开发环境建立作者:Greg第一节 开发环境建立条件软件:(1)MPLAB X:集成开发环境下载地址:https://www.microchip.com/content/dam/mchp/documents/DEV/ProductDocuments/SoftwareTools/MPLABX-v5.45-windows-installer.exe ;(2)XC8: 下载地址:https://www.microchip.com/en-us/deve

2021-03-20 18:12:48 2660

原创 RTThread内核思维导图(全)

标题

2020-03-21 22:01:56 1023 1

原创 Linux字符驱动开发从简单模型-架构-平台

一、嵌入式驱动开发中的字符设备驱动开发(1)1.前学习字符驱动开发总是有些概念是模糊的,现在我们在这重新理解下设备、驱动的概念。一个字符设备就是像led灯、蜂鸣器等这样的设备,驱动是要这样的设备进行工作(包括初始化)、操作的方法。在Linux字符设备驱动程序中,完成设备如何工作的方法。在应用程序中,我们编写程序通过驱动程序中实现的方法来达到设备在应用中的使用。而应用程序对驱动实现的方法...

2019-12-15 19:33:12 176

原创 优化算法—解决约束问题

1.种群优化算法种群优化算法是一种基于生物生长、进化等理论抽象出来的数学优化问题的求解方法,这类方法现在很多,主要还是基于三大优化算法而改进、变化、发展的。本文基于粒子群算法为例,介绍如果使用此类算法求解有约束问题的优化问题,主要原因是很多博客、论坛都只是在介绍或展示此类算法,但对于约束问题的求解介绍的很少,但是这个在具体的实际问题中却是很关键的问题。对于粒子群算法(PSO)大家可以我的写...

2019-08-18 18:40:27 6132 2

原创 java实现差分进化算法

import java.util.*;/** @author Greg* @date 2018* @content DE* @function DE优化最大值*/public class DE{ private int population_size; // population numbers private int iter_num; // numbe...

2019-08-13 20:12:38 622

原创 Linux 驱动platform (驱动架构理解)

前言:对于博客,由于能力有限,很多问题都是自己的学习过程和笔记,现在还没有能力说下自己的独特见解;前面的几个博客都记录了自己对Linux设备驱动的基础知识,但是现实中的Linux驱动不是那个样子的,要复杂的多些。简单的驱动是device 和driver 一对一的结合,但是现实中一种驱动driver可能够被多个device使用,总不能给一个设备单独写一个独特的driver吧,Linux驱动架构出...

2019-08-05 23:28:50 449

原创 STM32 学习笔记(5)I2C

基础:(1)I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps 公司开发的,是一条总线,上面可以挂在多个I2C设备实现通讯功能;(2)一个I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL);(3)各个设备都用自己的地址,来实现访问;传输过程:I2C 协议规定设备地址可以是7 位或10 ...

2019-08-04 15:41:28 205

原创 STM32 学习笔记(5)USART

usart 异步串口通信需要两个引脚,TX、RX,如果和电脑通讯需要usb转串口线。usart 的编程要点是:(1)知道使用的是哪个串口,初始化RX、TX的GPIO时钟 和USART时钟;(2)GPIO初始化,复用USART(3)配置USART参数(波特率、位数、校验等)(4)配置NVIC中断,USART中断配置(中断源、中断服务函数、使能)(5) USART使能(6)...

2019-08-04 10:37:10 1413

原创 STM32 学习笔记(4)系统时钟

Cortex-M3中,有个SysTick 系统时钟,SysTick 是CM3内核的外设,相关定义在Core_CM3.h中。系统定时器内嵌在NVIC中,是24位的向下递减的计数器,每记一次数的时间是1/SYSCLK。一般设置SYSCLK=72M。而系统时钟一般用于操作系统产生时基。与SYSTick相关的寄存器有四个,CTRL控制及状态寄存器、LOAD重装数值寄存器、VAL当前数值寄存器、CA...

2019-08-03 22:14:03 505

原创 STM32 学习笔记(3)中断

stm32的中断功能比较丰富,首先要了解下NVIC(嵌套向量中断控制器),在core_CM3.h中有定义NVIC_Type。关键使用这三个寄存器,ISER 中断使能寄存器、ICER中断清除(失能)寄存器、IP优先级寄存器8位。NVIC有个专用的寄存器来配置外部中断的优先级,NVIC_IPRx。F103使用了高4位,低四位没有使用。注意:(1)这四位有分成了抢占优先级和子优先级。1)多个...

2019-08-03 17:03:47 481

原创 STM32 学习笔记(2)KEY按键

简单的按键没有用到中断,所以还是简单的GPIO引脚的操作,注意:(1)按键操作是通过对引脚电平的检测轮询来判断是否按下键。(2)和LED GPIO配置基本相同,不过要把引脚的模式配置为悬浮输入:GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING;(3)判断是否按下就是检测GPIO输入寄存器的值是否为1. ...

2019-08-03 11:16:45 2740

原创 STM32 学习笔记(1)简单GPIO

前言前一节中写了stm32 使用寄存器可以控制外设,但是寄存器一步一步的操作比较麻烦,ST公司提供了函数接口来操作外设,使用很方便。(1)CMSIS标准 :是ARM与芯片厂商建立的解决Cortex微控器软件兼容性的标准接口,芯片厂商内核是相同的,外设差异化。stm32是32位单片机,操作寄存器比较复杂,使用函数库是一种很好的方式。(2)函数库:STM32F10X_StdPeriph...

2019-08-03 10:38:38 290

原创 STM32 学习笔记 简单入门分析

在研究生时段时,曾经对STM32进行了学习,在本科时段学习51系列的简单单片机,这种单片机功能比较单一,也没有多外设来使用,在进入研究生阶段由于实验室的关系,接触了PIC系列的单片机,PIC单片机编程比较简单,外设也丰富,完全可以按照数据手册使用起来。这种单片机价格也比较贵,适合在工业场合使用。而在32位的单片机中,STM32比较流行,STM32是使用的ARM内核,不同于51 和PIC,因此学习的...

2019-08-02 22:23:29 312

原创 Linux设备驱动中的阻塞和非阻塞IO

这篇文章我们来了解下Linux设备驱动中阻塞和非阻塞。阻塞:阻塞是指执行设备操作时,如果不能获得设备资源,则挂起进程,是进程进入休眠模式,直到设备资源可以获取。非阻塞:非阻塞是在不能获取设备资源时,要么放弃获取,要么一直不停的查询,直到可以获取资源。这两种操作能够为为应用程序提供这样的能力:(1)当应用程序对设备资源进行read(), write()操作时,如果设备资源不能获取,用...

2019-07-09 23:04:49 778

原创 Linux 设备驱动并发控制实例

在前面的笔记中,学习了Linux设备驱动中的并发控制,其中有中断屏蔽、原子操作、自旋锁、信号量、互斥体及完成量。这几种并发控制的技术就是解决多进程或多CPU之间对共享资源的同时访问引起的竞态问题。它们之间根据各自的性质使用在不同的场合中,这里就不重复的介绍了,下面来分析《Linux设备驱动开发详解》中举例的并发控制。(1)首先要知道我们在Linux简单的驱动中使用的globalmem设备的例子...

2019-07-08 22:45:55 204

原创 Linux 设备驱动中的并发控制

首先我们来了解下为什么要对设备驱动中引入并发控制,这个问题简单的理解就是设备资源只有一个,但是在同时间内,有好多的进程需要访问它。对设备资源进行并发控制,让其在同一时间只能被一个进程访问,这样就不能造成访问的紊乱问题,解决了访问资源的竞态。例如有一段内存空间,存储了数据,有多个进程能够对这段资源进行读写,当一个进程对资源进行写操作的时候,来了另一个进程对资源进行读操作,在没有写完这段内存的时候...

2019-07-07 22:45:44 223

原创 linux 字符驱动简单的总结

这里我们读字符设备简单驱动的编写进行总结:(1) 包含必要的头文件(2)定义一个设备结构体 struct xxx_cdev, 这个结构体包含字符设备结构体,struct cdev和自己定义的一些数据量。(3)设备号的申请、释放,可以是固定的设备号,亦可以是动态的设备号。 静态的设备号通过MKDEV(int major, int minor)产生。 在调用cdev...

2019-07-07 18:45:17 145

原创 linux 字符驱动简单实例

在Linux字符驱动模板的一篇中,我们简单的书写的Linux字符设备驱动模块的模板,这个模板具有一定的通用性,但是对我们初学者来说,最好能有一个实例来增加我们的理解。通过对《Linux设备驱动开发详解》这本书的学习,有一个例子在很多的驱动开发教程成都有讲解,可见这个例子的功效了,因此,在这儿我们再一次的理解这个例子(globalmem)。这个例子是一个抽象的设备,这个设备主要功能是在内存...

2019-07-07 18:22:48 394

原创 linux 字符设备驱动模板

学习Linux设备驱动已经有一段时间了,但是发现学习后很多的知识点记忆模糊了,因此对学习过的知识进行了梳理和总结。1.一般的驱动都是以模块的形式存在的,那么在字符设备的模块加载函数中要完成设备号的申请(静态、动态两种方法)和cdev的注册,而在卸载函数中实现设备号的释放和cdev的注销。2. 驱动编写模板:/*这个设备结构体是自己定义的结构体,包含字符设备结构体和自己定义的其他的成...

2019-07-07 16:58:15 306

原创 栈 stack C语言(简单实现)

栈,是数据结构中重要的一种,在这儿简单的实现栈的定义,使用。栈最重要的两个操作是压栈和出栈。就像堆东西一样,越堆越高,但是取东西的时候,必须从最上面的取,否侧栈会坍塌。知道简单的含义后,使用C语言实现栈。有什么错误的地方可以指正批评。#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;// 定义栈的最大容量#define MAX_SIZE_...

2018-12-06 23:32:00 781

原创 Java 实现DE算法2

import java.util.*;/** @author Gong* @date 2018* @content DE* @function DE优化最大值*/public class DifferentialEvolutionSearch{ private int population_size; // population numbers private int ...

2018-12-01 22:18:47 538

原创 Java 实现粒子群算法

/*粒子群算法JAVA的简单实现作者:G Greg */import java.util.Random;import java.io.*;/*粒子的类*/class Particle{ public int nVar; // 变量的个数 public double [] position; // 粒子的位置,包含解的信息 publi...

2018-12-01 22:18:29 2242 4

原创 python 实现差分进化算法

对于种群优化算法来说,最著名的为粒子群算法、遗传算法及差分进化算法,在前面的博客中实现了其中基本型。应在用C语言编写的运行速度快,但是Python近年来越来越流行,所以蟒蛇实现差分进化算法,通过函数测试运行很快速。主要是用到了numpy库来实现,绘图显示使用的是matplotlib库。差分进化算法总的有四步骤:(1)种群初始化(2)变异操作(3)交叉操作(4)贪婪选择操作...

2018-12-01 22:17:54 2730 1

原创 python 实现粒子群算法(基本型)

最近的学习python,尝试了python实现粒子群算法的基本过程,定义了变量的上下界,利用pso 求解简单约束的问题,Spere 函数进行了检验。感觉利用MATLAB的矩阵形式编写的pso 较快。适应值函数通过对象的方式传递给pso class。#-*- coding:utf-8 -*-# 作者:gongxu# 时间:20181111# 基本的粒子群算法,能够解决约束问题,约...

2018-12-01 22:17:00 1468

原创 C语言双向链表的实现(简单实现)

最近有时间看了数据结构的双向链表,其实和单向链表的规则是一样的,只不过在定义节点的时候比单向链表多定义i一个指向前一个节点的指针就可以了,在插入节点和删除节点的时候要注意,画图是最好的方法。双向使用的时候重要的是获得链表头和链表尾,下面有获取的相关函数。// copyright reserved by GongXu// doubly linked list for simple usi...

2018-12-01 22:14:33 874 1

原创 C 语言单链表的实现(简单实现)

简单的实现单链表的增删遍历操作,还有一些功能需要实现。我感觉难理解的时候画图来搞清楚逻辑,先画个图比划就行。 // @author:Gong// @single Linked list// @ 增、删、遍历#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;/*从新定义节点的数据域数据类型,以后好修改具体的链表*/typedef in...

2018-11-18 10:55:31 1056

原创 差分进化算法 C语言实现

之前的一篇中贴出了自己研究生期间C实现的基本粒子群算法,执行速度显然要比其他的高级语言快,这也是各个编程语言之间的差别,现在对于曾经辉煌过的差分进化算法进行C语言实现。变异策略采用DE/rand/1,这个是最常见的。有错误之处请之处。/***************Differential Evolution Algorithm*************************//** ...

2018-09-15 21:38:07 5390 5

原创 粒子群算法-C 语言的实现

最近开始重新学习C语言,在研究生期间,坐在DSPA实验室编写了基本的粒子群算法,当时是MATLAB语言实现的,相对而言比较简单,C语言是比较原始的基础性的语言,所以执行速度是非常快的,因此贴上C实现基本粒子群算法的程序,有不对的地方请指教。/***************Particle Swarm Algorithm*************************//** @Auth...

2018-09-15 18:07:18 678

原创 Ubuntu 联网 eht0没有问题

查了好多文章终于ubuntu联网了。总结如下对于Ubuntu无法连接互联网问题总结:首先 察看网卡:sudo ifconfig -a如果显示的网卡不是eth0, 是其他的ethx。sudo nano /etc/network/interfacesauto ethxiface ethx inet dhcpauto ethyiface ethy inet static

2017-09-25 22:07:31 215

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除