摘要: (一)定义:友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。 (二)使用非友元函数将两个对象中的变量进行相加 1 #include <i 阅读全文
posted @ 2018-09-22 17:38 陆小果哥哥 阅读(171) 评论(0) 推荐(0)
摘要: (一)看程序 1 #include <iostream> 2 #include <string.h> 3 #include <unistd.h> 4 5 using namespace std; 6 7 class Person { 8 private: 9 static int cnt; /*静态 阅读全文
posted @ 2018-09-22 17:11 陆小果哥哥 阅读(556) 评论(0) 推荐(0)
摘要: (一)分配一个输入子系统结构体 static struct input_dev *buttons_dev; /*分配一个input_dev结构体*/ (二)设置这个输入子系统需要的动作 /* 1. 分配一个input_dev结构体 */ buttons_dev = input_allocate_de 阅读全文
posted @ 2018-09-22 16:24 陆小果哥哥 阅读(217) 评论(0) 推荐(0)
摘要: 今天是2018/5/29号,已经学习linux差不多一个多月了,但是由于事情比较多。只花了很少的时间去学习。这第一个博文只是现在无聊的时候写的,在之后的博文中会慢慢的更新自己学习的内容来更新博文,现在只学了C,C++,51单片机还有STM32单片机这几个,当然C#和JAVA这两个语言还了解了一下。 阅读全文
posted @ 2018-09-22 15:50 陆小果哥哥 阅读(214) 评论(0) 推荐(0)
摘要: 012_STM32程序移植之_内部flash开机次数管理lib库建立 1. 测试环境:STM32C8T6 2. 测试接口: 3. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND PA9 RXD PA10 TXD 1. 紧接011,下面进行lib可的移植 2 阅读全文
posted @ 2018-09-22 15:48 陆小果哥哥 阅读(229) 评论(0) 推荐(0)
摘要: STM32之lib库建立 1. 测试环境:STM32C8T6 2. 测试接口: 3.串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND PA9 RXD PA10 TXD 1. 建立lib库原因:LIB 的一个主要用途,就是用在工作上的,当你某些 C 文件不希望 阅读全文
posted @ 2018-09-22 15:47 陆小果哥哥 阅读(859) 评论(0) 推荐(0)
摘要: 011_STM32程序移植之_内部flash开机次数管理 1. 测试环境:STM32C8T6 2. 测试接口: 3. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND PA9 RXD PA10 TXD 1. 功能: 1. 使用STM32内部falsh进行开机 阅读全文
posted @ 2018-09-22 15:47 陆小果哥哥 阅读(541) 评论(0) 推荐(0)
摘要: Program Size: Code=28784 RO-data=6480 RW-data=60 ZI-data=3900 的含义 1. Code: 程序所占用的FLASH大小,存储在FLASH. 2. RO-data: Read-only-data,程序定义的常量,存储在FLASH中。 3. RW 阅读全文
posted @ 2018-09-22 15:46 陆小果哥哥 阅读(2642) 评论(0) 推荐(1)
摘要: flash 模拟 EEPROM 实验 1. 测试环境:STM32C8T6 2. 测试接口: 3. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND PA9 RXD PA10 TXD STM32 本身没有自带 EEPROM,但是 STM32 具有 IAP(在应 阅读全文
posted @ 2018-09-22 15:46 陆小果哥哥 阅读(272) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:SYN6288语音模块 3. 测试接口: SYN6288语音模块: VCC 3.3V GND GND TXD PB11 RXD PB10 BY PB1 2. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND 阅读全文
posted @ 2018-09-22 15:45 陆小果哥哥 阅读(855) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试:使用DMA进行多通道ADC转换 3. 描述:用 ADC 连续采集 12 路模拟信号,并由 DMA 传输到内存。ADC 配置为扫描 并且连续转换模式,ADC 的时钟配置为 12MHZ。在每次转换结束后,由 DMA 循环将转换的数据传输到内存中。ADC 可 阅读全文
posted @ 2018-09-22 15:45 陆小果哥哥 阅读(439) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:DS1302时钟模块 3. 测试接口: SHTXX土壤温湿度: VCC 3.3V GND GND DATA PA6 SCK PA7 2. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND GND PA9 RXD P 阅读全文
posted @ 2018-09-22 15:44 陆小果哥哥 阅读(158) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:RC522读卡模块 3. 测试接口: RC522读卡模块: VCC 3.3V GND GND SDA PA4 SCK PA5 MOSI PA7 MISO PA6 RQ 悬空 RST VCC3.3 2. 串口使用串口一,波特率9600 单片机引脚 C 阅读全文
posted @ 2018-09-22 15:44 陆小果哥哥 阅读(942) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:DS1302时钟模块 3. 测试接口: 1. DS1302模块接口: DS1302引脚 单片机引脚 VCC 3.3V GND GND CE PC13 DIO PC14 SCLK PC15 2. 串口使用串口一,波特率9600 单片机引脚 CH340 阅读全文
posted @ 2018-09-22 15:43 陆小果哥哥 阅读(515) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:DHT11温湿度模块 3. 测试接口: 1. DHT11温湿度模块接口: DS1302引脚 单片机引脚 VCC 3.3V GND GND DATA PA5 2. 串口使用串口一,波特率9600 单片机引脚 CH340引脚 VCC VCC GND G 阅读全文
posted @ 2018-09-22 15:43 陆小果哥哥 阅读(294) 评论(0) 推荐(0)
摘要: 1. 测试环境:STM32C8T6 2. 测试模块:W25Q64FLASH模块 3. 测试接口: 1. W25Q64FLASH模块接口: VCC3.3 VCC3.3 GND GND CS PB12 DO PB14 CLK PB13 DI PB15 2. 串口使用串口一,波特率9600 单片机引脚 C 阅读全文
posted @ 2018-09-22 15:43 陆小果哥哥 阅读(415) 评论(0) 推荐(0)
摘要: 1. 功能:创建以个等待队列头 2. 函数原型 #define DECLARE_WAIT_QUEUE_HEAD (name) / wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) #define __WAIT_QUEUE_HEA 阅读全文
posted @ 2018-09-22 15:42 陆小果哥哥 阅读(1707) 评论(0) 推荐(0)
摘要: linux点灯在汇编版中说明了硬件中点灯的原理,C语言中不再陈述,说白了就是控制GPXCON和GPXDTA寄存器就行了,芯片是S3C2440A芯片,查看芯片手册就能懂了,其他芯片也是一样的。C语言版就只说明了程序,共三个。LED.c是主程序运行的,start.s是汇编启动文件,makefile是编译 阅读全文
posted @ 2018-09-22 15:41 陆小果哥哥 阅读(400) 评论(0) 推荐(0)
摘要: 1. 开发板采用韦山东的开发板 2. 芯片CPU三星S3C2440A 3. 控制引脚:GPF4 4. linux操作系统 5. 芯片手册下载地址:https://eyun.baidu.com/s/3b1UtLc 看芯片手册三星S3C2440A中GPF4的功能:(280/P) 由下面的芯片手册可以看出 阅读全文
posted @ 2018-09-22 15:40 陆小果哥哥 阅读(1103) 评论(0) 推荐(0)
摘要: 今天2018/6/1 今天是六一儿童节,天气凉爽,心情挺好的。然后本着开开心心的心情,将前面忘记写linux的Ubuntu没安装的写一下,以后自己回来看就很方便了。使用的是白问网制作的ubuntu,假如失效了去淘宝找韦山东的淘宝店找客服要 下载飞机票:https://eyun.baidu.com/s 阅读全文
posted @ 2018-09-22 15:39 陆小果哥哥 阅读(180) 评论(0) 推荐(0)
摘要: 开局日常吹牛一小时,今天更新的是linux的基础命令。现在是2018/5/30,晴,心情挺好的。 回归正题,linux基础命令只是一些初学者常用的命令,如果其他更多高级的命令等我学我再发上来,因为这个博文的百度了好像没有上传文档的,所有涉及到的文档自行下载。本人使用的linux教程是韦山东的。文中所 阅读全文
posted @ 2018-09-22 15:39 陆小果哥哥 阅读(168) 评论(0) 推荐(0)
摘要: 阻塞操作 是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。 被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。 非阻塞操作 进程在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。 fd = open("...", 阅读全文
posted @ 2018-09-22 15:38 陆小果哥哥 阅读(160) 评论(0) 推荐(0)
摘要: (一)定义一个timer_list定时器结构体,linux 内核定时器 timer_list详解 (二)初始化定时器,当超时时间expires到之后会调用buttons_timer_function函数 这里我们不设置超时时间,也就是说刚第一次初始化时候会调用buttons_timer_functi 阅读全文
posted @ 2018-09-22 15:38 陆小果哥哥 阅读(207) 评论(0) 推荐(0)
摘要: 2. 信号量 信号量(semaphore)是用于保护临界区的一种常用方法,只有得到信号量的进程才能执行临界区代码。 当获取不到信号量时,进程进入休眠等待状态。 定义信号量 struct semaphore sem; 初始化信号量 void sema_init (struct semaphore *s 阅读全文
posted @ 2018-09-22 15:37 陆小果哥哥 阅读(229) 评论(0) 推荐(0)
摘要: 1. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作。 常用原子操作函数举例: atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0 atomic_read(atomic_t *v); //返回原子变量的值 void atomic_inc(at 阅读全文
posted @ 2018-09-22 15:36 陆小果哥哥 阅读(408) 评论(0) 推荐(0)
摘要: 1. 首先看应用程序 1. 首先分析第二点使用函数signal(SIGIO, my_signal_fun);来设置,当驱动程序传递信号给应用程序时候会调用第一点的程序 2. 第三点是设置相关参数 (二)当应用程序调用到底三点时候,就会在驱动程序中调用到第一点 上面的驱动程序初始化了信号的相关参数,然 阅读全文
posted @ 2018-09-22 15:35 陆小果哥哥 阅读(306) 评论(0) 推荐(0)
摘要: 1. 功能:poll的机制与select相似,与select在本质上没有多大差别。管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制。 2. 技术资料:poll多路复用 这篇文章写得很好 3. 技术资料:poll机制分析 4. 首先我们看应用程 阅读全文
posted @ 2018-09-22 15:34 陆小果哥哥 阅读(234) 评论(0) 推荐(0)
摘要: 符号名 信号值 描述 是否符合POSIX SIGHUP 1 在控制终端上检测到挂断或控制线程死 亡 是 SIGINT 2 交互注意信号 是 SIGQUIT 3 交 互中止信号 是 SIGILL 4 检测到非法硬件的指令 是 SIGTRAP 5 从 陷阱中回朔 否 SIGABRT 6 异常终止信号 是 阅读全文
posted @ 2018-09-22 15:34 陆小果哥哥 阅读(203) 评论(0) 推荐(0)
摘要: 1. 首先这篇博客讲解得挺好的,推荐 wait_event_interruptible 使用方法 2 .函数原型: #define wait_event_interruptible(wq, condition) \ ({ \ int __ret = 0; \ if (!(condition)) \ 阅读全文
posted @ 2018-09-22 15:33 陆小果哥哥 阅读(3099) 评论(0) 推荐(0)
摘要: 1. 功能:获取引脚状态 2. 函数原型: unsigned int s3c2410_gpio_getpin(unsigned int pin) { void __iomem *base = S3C24XX_GPIO_BASE(pin); unsigned long offs = S3C2410_G 阅读全文
posted @ 2018-09-22 15:31 陆小果哥哥 阅读(341) 评论(0) 推荐(0)
摘要: 1. request_irq()函数原型 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 2. 功能:注册中断服务函 阅读全文
posted @ 2018-09-22 15:30 陆小果哥哥 阅读(4626) 评论(0) 推荐(0)
摘要: 1. copy_from_user函数的目的是从用户空间拷贝数据到内核空间 2. 解析原型: copy_from_user(void *to, const void __user *from, unsigned long n) 1. @*to 将数据拷贝到内核的地址 2. @*from 需要拷贝数据 阅读全文
posted @ 2018-09-22 15:29 陆小果哥哥 阅读(3814) 评论(0) 推荐(1)
摘要: 1. 测试:配置S3C2440的GPF4,5,6为输出 2. 测试IO的地址从芯片手册中获取以下资料 3. 从上面可以看出配置输出对应的设置是01=输出,那么对应位如:[9:8]需要设置成=01 4. 解析配置之前我们需要先将对应IO使用命令“&”设置成00,然后使用命令“|”设置成01 5. 则可 阅读全文
posted @ 2018-09-22 15:29 陆小果哥哥 阅读(817) 评论(0) 推荐(0)
摘要: (一)解析class_device_create函数 (二)当我们使用class_create创建一个类之后我们就可以使用class_device_create函数在这个类下面创建一个设备了,class_create创建查看004_linux驱动之_class_create创建一个设备类 (三)cl 阅读全文
posted @ 2018-09-22 15:28 陆小果哥哥 阅读(3203) 评论(0) 推荐(0)
摘要: (一)学习linux驱动之初,对ioremap函数的个人理解 (二)博客:实验探究 ioremap 这篇文章作者通过验证来阐述自己的观点,个人觉得挺好的 (三)函数原型 基本简介 void * __ioremap(unsigned long phys_addr, unsigned long size 阅读全文
posted @ 2018-09-22 15:28 陆小果哥哥 阅读(2040) 评论(0) 推荐(1)
摘要: (一)解析:class_create函数和class_destroy函数 创建一个类 和 删除一个类。 (二)class_create函数原型 struct class *class_create(struct module *owner, const char *name); 1. 查看函数注释: 阅读全文
posted @ 2018-09-22 15:27 陆小果哥哥 阅读(5503) 评论(0) 推荐(0)
摘要: (一)解析file_operations函数 解析002_linux驱动之_register_chrdev注册字符设备中的问题 (二) 1. file_operations结构原型 2. 使用举例 (三)从上面的原型可以看出file_operations函数有很多类型,下面将解析一部分 1. 以.o 阅读全文
posted @ 2018-09-22 15:26 陆小果哥哥 阅读(474) 评论(0) 推荐(0)
摘要: (一)解析:register_chrdev函数和unregister_chrdev函数 (二)register_chrdev函数原型 int register_chrdev(unsigned int major, const char *name,const struct file_operatio 阅读全文
posted @ 2018-09-22 15:24 陆小果哥哥 阅读(3107) 评论(0) 推荐(0)
摘要: (一)驱动的安装: 1. 可以将驱动程序静态编译进内内核中 2. 也可以将它作为模块在使用的时候再加载 注:在配置内核时候,如果某个配置被设置为m,就表示它将会被编译成模块 (二)加载和卸载驱动使用命令(模块的拓展名为.ko) 1. insmod 命令加载 (使用示例:insmod first_dr 阅读全文
posted @ 2018-09-22 15:23 陆小果哥哥 阅读(2034) 评论(0) 推荐(0)
摘要: (一)构造函数:用来在创建对象时初始化对象, 即为对象成员变量赋初始值 (二)构造函数的命名必须和类名完全相同 (三)更对具体的查看:构造函数 (四)直接分析程序 运行结果 解析上面程序: 1. 当程序运行到四点时候,就会自动调用第一点无参构造函数,打印Person() 2. 当运行到第5点时候,就 阅读全文
posted @ 2018-09-22 15:21 陆小果哥哥 阅读(182) 评论(0) 推荐(0)
摘要: 1. 什么是“引用”?申明和使用“引用”要注意哪些问题? 答:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声 阅读全文
posted @ 2018-09-22 15:19 陆小果哥哥 阅读(126) 评论(0) 推荐(0)
摘要: (一)直接看代码 1 #include <iostream> 2 using namespace std; 3 int add(int a){ 4 a = a + 1; 5 return a; 6 } 7 int add(int *a){ 8 *a = *a + 1; 9 return *a; 10 阅读全文
posted @ 2018-09-22 15:16 陆小果哥哥 阅读(107) 评论(0) 推荐(0)
摘要: (一)源码下载 (一) 函数的重载:同一个命名函数,通过传入参数的不同,调用不一样的函数 上面程序的运行结果: (二)函数只能通过参数的不一样重载函数,不能通过返回参数的不一样重载函数 运行结果报错 1 #include <iostream> 2 using namespace std; 3 int 阅读全文
posted @ 2018-09-22 15:13 陆小果哥哥 阅读(141) 评论(0) 推荐(0)
摘要: (一)引入namespace原因: 假如有很多跟人共同完成一项工程,工程中难免会有函数定义一样的名称,不可能一个一个的询问这个函数 你定义过了没有,所以引入namespace 1 #include <stdio.h> 2 #include "person.h" 3 #include "dog.h" 阅读全文
posted @ 2018-09-22 15:02 陆小果哥哥 阅读(195) 评论(0) 推荐(0)
摘要: (一)程序修改001_linuxC++之_类的引入 (二)修改成为.h和.c文件 1 #include <stdio.h> 2 #include "person.h" 3 4 int main(int argc,char ** argv) 5 { 6 Person per; 7 per.setNam 阅读全文
posted @ 2018-09-22 14:56 陆小果哥哥 阅读(154) 评论(0) 推荐(0)
摘要: (一) C++类的引入,图片的程序比较好看,文中程序不贴出来 (二) 知识点 1. 成员函数的存取权限:公有的(public),保护的(protectd),私有的(private) 2. 第27行this->age是类中的。Age是第20行输入的Age 1 #include <stdio.h> 2 阅读全文
posted @ 2018-09-22 14:50 陆小果哥哥 阅读(206) 评论(0) 推荐(0)
摘要: 以下内容为转载: 注:非常感谢博主“希望之光”,文章转自他的博客:http://blog.chinaunix.net/uid-20379123-id-1956584.html ARM的六大类指令集 LDR、LDRB、LDRH、STR、STRB、STRH ARM微处理器支持加载/存储指令用于在寄存器和 阅读全文
posted @ 2018-09-22 14:47 陆小果哥哥 阅读(2378) 评论(0) 推荐(0)
摘要: 目的:实现keil4和keil5的共存 1. Keil4 主要用来开发 C51 程序 2. Keil5 也就是 MDK 主要用来开发 ARM 芯片,如 STM32 系列芯片 3. 资料下载地址:链接:https://pan.baidu.com/s/1crMZ3U8eAHe3C7lVHCDOxw 密码 阅读全文
posted @ 2018-09-22 14:46 陆小果哥哥 阅读(752) 评论(0) 推荐(0)
摘要: 测试电脑:win7 64位操作系统 下载地址: 链接:https://pan.baidu.com/s/1xkyhF6pdkx_kZiNjFireZw 密码:mvpp 阅读全文
posted @ 2018-09-22 14:45 陆小果哥哥 阅读(380) 评论(0) 推荐(0)
摘要: 研究的目的和意义 传统照明电路只是由简单的开关组成,并不适合于目前大房子,如别墅,跃层等有楼上楼下的房子,也存在关灯不方便,造成关灯不及时而浪费电等问题。随着科学和技术的发展,人们对生活品质的要求也越来越高,对照明的控制人们希望使用方便甚至是随心所欲,传统的照明系统已经远远满足不了现代人的需要,于是 阅读全文
posted @ 2018-09-22 14:41 陆小果哥哥 阅读(254) 评论(0) 推荐(0)
摘要: 1. 研究目的和意义: 随着我国经济不断的发展,跻身到全球第二大经济体.我国人民的生活日益改善,人们自我保健意识和卫生知识水平不断提高。但在不断走向现代化的过程中,人们的生活越来越忙,工作压力也越来越大,也就引发了一系列的问题。如:在医院买药之后忘记食用,以至于影响病情恢复等。为解决上面列举的问题, 阅读全文
posted @ 2018-09-22 14:40 陆小果哥哥 阅读(731) 评论(0) 推荐(0)
摘要: 1. 研究目的和意义: 随着科技的不断的进步与发展,中国在这文化不断进步潮流之中不断的向富强民主文明和谐美丽的社会主义现代化强国迈进脚步。随着我国综合国力的不断加强,人民的生活水平不断的提升。人们对生活住宅从以前最简单的满足居住生活逐渐转向对生活住宅的的要求安全,舒适,快捷,方便。其中安全性是首要的 阅读全文
posted @ 2018-09-22 14:39 陆小果哥哥 阅读(280) 评论(0) 推荐(0)
摘要: 1.研究的目的和意义: CC2530芯片构成ZigBee协调器和ZigBee无线传感器节点来获取车辆信息,经过数据处理后实时反馈给协调器,再经过串口传至上位机,最后在上位机监控平台上实现对车辆信息的实时监控和存储。该系统能够即时的显示车辆从驶入车库到驶出车库全过程中的信息并同步存入数据库信息表中,从 阅读全文
posted @ 2018-09-22 14:38 陆小果哥哥 阅读(296) 评论(0) 推荐(0)
摘要: 一.项目简介 现代化农业智能监测系统通过远程测控终端可实现对农业生产基地的监视与控制。监测系统通过传感器对农业生产基地的光照强度,温度,空气湿度,土壤温湿度等数据进行实时的采集,通过ARM芯片将采集数据进行信息处理并发送至控制终端。在控制终端中,通过显示屏可查询各种农作物生长的最适生长环境 ,和生长 阅读全文
posted @ 2018-09-22 14:21 陆小果哥哥 阅读(334) 评论(0) 推荐(0)