- 博客(143)
- 资源 (11)
- 收藏
- 关注
原创 MDK的编程过程和变量存储位置
1 参考书籍《零死角玩转STM32-F429》2 编程过程 首先我们简单了解下 MDK 的编译过程,它与其它编译器的工作过程是类似的,该过程见图 51-1。 (1) 编译, MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个 c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代...
2018-05-14 15:02:43
3280
1
原创 STM32的Systick时钟
参考资料:《零死角玩转STM32F103-霸道》1 Systick时钟简介 SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。 SysTick是属于CM...
2018-05-07 14:37:15
2533
原创 Undefined symbol f_unlink
今天在使用Fatfs文件系统的时候,调用f_unlink函数,编译总是报错,通过查找,发现f_unlink在ff.h中已经声明,并且也实现过了,但是无法调用。 参考这篇文章 http://www.aiuxian.com/article/p-1961858.html 将_FS_MINIMIZ的值改为0即可
2018-04-29 16:58:03
954
原创 STM32F103-基本定时器
参考书籍《零死角玩转 STM32F103—指南者 》 一,STM32的定时器分类 STM32有8个定时器,分为三种:基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO...
2018-04-22 22:14:23
7735
原创 C++笔记-引用提高篇
1 可以定义指针的引用,但不能定义引用的引用using namespace std;int main(){ //可以定义指针的引用,但不能定义引用的引用 int a; int *p=&a; int * &rp=p; //OK int b; int &rb=b; int & &rrb=rb; ...
2018-04-20 20:22:09
341
原创 Linux设备模型-总线,设备和驱动
1 参考书籍参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院2 范例代码/*vbus.c*/#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/device.h>/*用于匹配驱动和设备的函数*/static int vbus_match(struct de
2018-01-29 10:48:32
327
原创 高级I/O操作-阻塞型I/O
1 参考书籍参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院 2 休眠程序的唤醒通常有两种 (1) 在中断处理程序负责唤醒 (2) 指定进程的最长休眠时间,超时后进程自动苏醒3 范例代码/*阻塞型I/O*//*vser.c*/#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#i
2018-01-28 22:51:55
410
原创 高级I/O操作-非阻塞型I/O
1 参考书籍 参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院 2 简介 如果应用程序以非阻塞的方式打开设备文件,当资源不可用时,驱动就应该立刻返回并用一个错误码EAGAIN来通知应用程序此时资源不可用。 3 范例代码/*非阻塞型I/O*//*vser.c*/#include <linux/init.h>#include <linux/kernel.h>#inc
2018-01-28 16:55:46
388
原创 高级I/O操作-ioctl设备操作
1 ioctl设备操作 参考书籍 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院2 虚拟串口中添加unlocked_ioctl后的代码vser.h/*vser.h*/#ifndef _VSER_H#define _VSER_Hstruct option{ unsigned int datab; unsigned int parity; unsigned int s
2018-01-28 16:01:49
609
原创 Linux中断下半部——工作队列
1 参考书籍 《Linux设备驱动开发详解》 宋宝华 机械工业出版社 《嵌入式Linux驱动开发教程》 华清远见嵌入式学院 电子工业出版社 2 工作队列 下面的代码用于定义一个工作队列和一个底半部执行函数struct work_struct my_wq; /*定义一个工作队列*/void my_wq_func(struct work_struct *work); /*定义一个
2018-01-25 17:00:49
555
原创 混杂设备驱动
1 定义在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),但次设备号不同,我们称这类设备为混杂设备(miscdevice)。所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查找到相应的混杂设备2 开发流程3 相关结构体和函数Linux内核使用struct miscdeivce来描述一个混杂设备struct miscdevice { i
2018-01-24 10:42:21
358
原创 Linux编程之使用多路复用
1 推荐博客 https://www.cnblogs.com/Anker/archive/2013/08/14/3258674.html 我自己select()函数的使用和使用多路复用改写服务端代码理解的还不是特别深入,推荐上面的博客。 2 使用select()函数改写服务端源代码 服务端:/*net_selecy.c*///多路复用#include <stdio.h> #in
2018-01-19 16:59:49
582
原创 Linux编程之僵尸进程
1 僵尸进程概述 2 僵尸进程产生的条件 3 如何避免僵尸进程 僵尸进程产生的原因是系统保留了终止进程的状态信息以便于让父进程获得,而父进程在子进程结束之后没有及时回收资源,因此想要避免僵尸进程只需要让父进程及时”收尸“即可。wait()和waitpid()函数,不仅可以获得子进程的返回状态,更重要的是可以回收子进程的资源,也能有效的避免僵尸进程。 一个可行的办法是使用异步的方法
2018-01-19 10:51:09
298
原创 Linux编程之守护进程
1 守护进程的概述2 编写守护进程 (1)fork()创建子进程,exit()使父进程退出 (2)setsid()创建新会话 (3)chdir(“/”)设置工作目录 (4)umask(0)重设文件权限掩码 (5)close()关闭文件描述符3 实例 按照以上步骤创建守护进程,然后让该进程每隔10s向日志文件/tmp/dameon.log写入一句话 //守
2018-01-19 09:39:08
491
原创 linux信号通信---信号集函数组
信号处理的方法主要有两种,一种是使用signal()函数,另一种是使用信号集函数组。实例#include #include #include /*自定义的信号处理函数*/void my_func(int sign_no){ if(sign_no == SIGINT) { printf("\ni have get SIGINT\n");
2018-01-18 21:47:00
551
原创 linux网络编程之异步通信机制
内核通过使用异步I/O,在某一进程需要处理的事件发生(例如,接收到新的连接请求)时,向该进程发送一个SIGIO信号。这样,应用进程不需要不停地等待着某些事件的发生,而可以往下运行,以完成其他的工作。只有收到从内核发来的SIGIO信号时,才去处理它(例如,读取数据)。 异步I/O:使用fcntl()函数实现高效率的异步I/O,首先必须试用fcntl的F_SETOWN命令,使套接字归属于当前进程,以
2018-01-18 17:13:19
2430
原创 linux网络高级编程之非阻塞
在实际应用中,常常遇到多个客户端连接服务器的情况。如果资源没有准备好,则调用该函数的进程将进入睡眠状态,这样就不能处理其他请求了。有三种解决I/O多路复用的方式,分别为非阻塞和异步处理,以及多路复用处理。实例采用fcntl()函数将套接字设置为非阻塞I/O/*nonblock_server.c*//*nonblock_server.c*//*server.c*///使用fcntl()将套接字设
2018-01-18 16:15:16
622
原创 linux编程——套接字编程
一 TCP协议socket编程流程图二 编程实例/*server.c*//*server.c*///tcp网络协议编程#include #include #include #include #define PORT 4321#define MAX_QUE_CONN_NM 5#define BUFFER_SIZE 1024int main(){ int
2018-01-18 15:32:34
428
原创 多线程实验之”生产者——消费者“问题
一 实例 参考书籍《从实践中学linux应用程序开发》/*producer-customer.c*/#include #include #include #include #include #include #include #include #include #include #include #define MYFIFO "myfifo" /*缓冲区有名管道
2018-01-17 19:24:30
1556
1
原创 线程之间的同步与互斥
一 互斥锁 互斥锁机制主要包括以下基本函数 互斥锁初始化 pthread_mutex_init() 互斥锁上锁 pthread_mutex_lock() 互斥锁判断上锁 pthread_mutex_trylock() 互斥锁解锁 pthread_mutex_unlock() 删除互斥锁 pthread_mutex_destory()二 实例 在
2018-01-17 14:28:39
469
原创 linux多线程编程
一 线程 线程就是“轻量级”的进程,线程与创建它的进程共享代码段和数据段,线程拥有自己独立的栈。 ------此处建议参考《计算机操作系统》(第三版)汤小丹
2018-01-17 10:04:07
400
1
原创 消息队列编程
一 消息队列 消息队列就是一些消息的列表,用户可以在消息队列中添加消息和读取消息灯。消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO更具有优势。同时,这些消息又是存在于内核中的,由“队列ID”来标识。二 函数学习三 实例 在该实例当中,发送端发送的消息类型设置为该进程的进程号(也可以取其他值),因此接受端根据消息类型来确定消息发送者的进程号。mess
2018-01-16 16:57:32
711
原创 共享内存
一 共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存,这是传递数据的一种非常有效地方式。 共享存储区(Shared Memory)机制是UNIX 系统中通信速度最高的一种通信机制。该机制一方面可使若干进程共享主存中的某个区域,且使该区域出现在多个进程的虚地址空间中。另一方面,在一个进程的虚地址空间中又可连接多个共享存储区,每个共享存储区都有自己的名字
2018-01-16 10:40:39
872
原创 信号量互斥编程
一 公示栏问题1 公示栏问题程序化 两个同学交叉的使用公示栏发布公告,导致两者的信息发布的都不对 astudent: class match cancel bstudent: english examastudent://a student 写入数据后进行休息,然后再进行写入数据#include#include#includevoid main(){
2018-01-15 20:07:35
455
原创 准备考研
家里的网速实在太差,准确来说是没有网,哈哈。现在躲在网吧写这篇博客,其实我的优快云不是怎么火,也不什么大V。准备考研,所以可能就不更新我的优快云博客了。本来也是不打算考研的,因为家里人身体不太好。再就是考研又不是那么好考。最终决定考研是因为觉得自己会的东西实在太少,想找一个相对自由的环境再学更多东西。最后,无论考研还是工作,加油!
2017-02-03 14:56:17
843
3
原创 STM32启动文件分析
;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************;* File Name : startup_stm32f10x_hd.s;* Author : MCD Application Team;* Version : V3.
2017-01-13 15:23:28
1383
原创 STM32F1的I/O最大能承受多大电压
1 大部分端口是能够承受+5V电压的,但是也有一些是不能的。2 具体哪些能够承受+5V电压,要参考相应的数据手册,以STM32F103xC 系列的来看,参考数据手册 这里的FT就表示能承受+5V电压 PS:在今天的实际使用中,我的STM32芯片承受的电压到了4V多,但是芯片依然能正常工作。
2016-12-30 23:38:38
12090
原创 letcode-TwoSum
题目:Given an array of integers, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two numbers such that they add up to the targ
2016-12-11 22:03:32
593
原创 BJT三极管和FET场效应管的几个问题讨论
1 场效应管主要有两种类型,分别是JFET和MOSFET。2 三极管的内部工作原理就是对基极和发射极之间的流过的电流进行不断地监视,并控制集电极-发射极之间的电流源,使基极-发射极间电流的十至数百倍的电流在集电极和发射极之间流动。换言之,晶体管是用基极电流来控制集电极-发射极电流的器件。3 晶体管有一个箭头方向,可以理解为在晶体管的基极-发射极间加入了一个二极管,而箭头
2016-12-10 09:39:28
4641
原创 四轴飞行器之电调篇
电调是驱动电机用的调速器。电调对应使用的电机不同,分为有刷电调和无刷电调。目前我使用的四轴的电机为有刷直流电机,无刷电机的操作相对来说比较麻烦,有刷电机就是四驱车上的那种。有刷电机一般需要一个功率器件去驱动,通过调节PWM信号的脉冲宽度来控制各个电机的转速。 电调的作用:电机的电流很大,通常每个电机正常工作时的平均电流在3A左右,如果没有电调的存在,飞控板I/O根本无法承受这样大
2016-12-10 08:52:34
15310
原创 I2C器件的从设备地址的设置(以AT24C02为例)
1 AT24C02的硬件连接电路图2 从设备地址 在进行I2C通信时,主机发送启动信号后,再发送寻址信号。器件的地址有7位和10位,以7为地址寻址为例,寻址信号由一个字节构成,高7位为地址位,最低位为方向位,用来表示主机与从器件的数据传输方向,方向位0代表主机接下来对从器件进行写操作,方向位为1,表明主机接下来对器件进行读操作。 AT24C02的高4位是固定的,为
2016-11-24 20:59:47
27040
2
原创 STM32的SRAM和FLASH--概述
1 STM32片内自带SRAM和FLASH,FLASH是用来存储程序的,SRAM是用来存储程序运行中的中间变量,通常不同型号的STM32的SRAM和FLASH大小是不相同的,以我手边的STM32F103VET6来看,根据数据手册可以看到 FLASH存储器又成为闪存,它与EEPROM都是掉电后数据不丢失的存储器,但是FLASH得存储容量都普遍的大于EEPROM,,在存储控制上,最主要的
2016-11-20 11:09:57
17856
转载 每天读一遍,思考一下:我是否浮躁?
每天读一遍,思考一下:我是否浮躁? 1、不要看到别人的回复,第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,就会知道自己和别人思路的差异。 2、初学者请不要看太多的书,那会误人子弟的,先找一本好书系统的学习。很多人用了很久都是只对部分功能熟悉而已,不系统还是不够的。 3、看帮助。不要因为很难,而自己又是初学者所以就不看。帮助永远是最好的参考手册,
2016-11-17 20:36:19
595
原创 printf("%s")导致内存泄露
今天在写一个小程序的过程中发现这样一个问题,printf("%s")竟然导致了内存泄露。#include#define BUFF_SIZE 200int main(){ char buff[BUFF_SIZE]; int i=0; printf("请输入字符串\n"); gets(buff); printf("输入完毕\n"); printf("您输入的数据为:\n")
2016-11-13 21:33:33
4849
2
原创 stm32与sim900之GPRS通信(电脑串口与SIM900通信)
注意:1 sim900在进行GPRS通信的时候最大电流可以到90MA.瞬间电流SIM900模块可能高达2A@4V,即输入端电流瞬间值可能高达740mA@12V,故给模块选择电源的时候,要能满足瞬间电流峰值。以上这段话摘录自正点原子的SIM900用户手册,也就是说你在用SIM900这个模块进行GPRS数据传输时,要保证能给这个模块提供2A左右的电流,在实际的测试当中,如果提供的电流过
2016-11-12 10:18:51
15928
5
原创 STM32F407多通道ADC采样程序
注意STM32F407在进行AD采样时,如果引脚是浮空的,这个时候采集到的电压并不是01 ADC引脚的初始化void Lsens_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOF时钟 /
2016-11-07 17:04:55
24086
6
原创 这个项目流产了
今天老师告诉我们我们手头搞的这个项目流产了,对方可能是不想继续做下去了。 现在的进度是程序部分我已经负责写完了,就剩下投板子和后期的现场调试,但是今天上午老师突然通知说这个先停手不做了。 本来是计划一周更新一次自己的博客,这个周实在是太忙了,这两三个周吧,基本上都是我自己在搞程序。 明天周天,现在这个项目又催的不是很着急,我会在下个周把这个为完成的项目中用
2016-11-06 20:39:04
1957
转载 Flash与SRAM的区别?
转载自 百度知道 https://zhidao.baidu.com/question/217331887.html?skiptype=2flash写入的内容不会因电源关闭而失去,读取速度慢,成本较低,一般用作程序存储器或者低速数据读取的情况。sram有最快的读写速度,但电源掉落后其内容也会失去,价格昂贵,一般用作cpu的二级缓存,内存条也不用这个,适合高速数据读取的场合。
2016-10-27 11:51:47
10326
stm32低功耗之待机模式
2016-09-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人