自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STM32 “段”知识总结

总体结构图通常stm32在keil里编译完后被分成5个内存段(堆、栈、bss段、data段、text段)具体描述如下:

2021-09-16 21:17:03 233

原创 linux驱动开发笔记_等待队列

2021-03-18 21:51:07 105

原创 linux驱动开发_阻塞与非阻塞

阻塞与非阻塞概念在阻塞访问时,不能获取资源的进程将进入休眠,它将CPU资源“礼让"给其他进程。因为阻塞的进程会进入休眠状态,所以必须确保有一个地方能够唤醒休眠的进程,否则,进程就真的“寿终正寝”了。唤醒进程的地方最大可能发生在中断里面,因为在硬件资源获得的同时往往伴随着一个中断。非阻塞的进程则不断尝试,直到可以进行I/O。相关概图用户空间阻塞与非阻塞读写示例阻塞访问:非阻塞访问:除了在打开文件时可以指定阻塞还是非阻塞方式以外,在文件打开后,也可以通过ioctl ()和fcntl ()改变读

2021-03-18 20:24:08 119

原创 linux驱动开发笔记_完成量

完成量(completion)概念Linux提供了完成量(Completion,关于这个名词,至今没有好的翻译,笔者将其译为“完成量”,它用于一个执行单元等待另一个执行单元执行完某事。相关函数1.定义完成量2.初始化完成量下列代码初始化或者重新初始化my_completion这个完成量的值为0(即没有完成的状杰):3.等待完成量这个函数用于等待一个完成量被唤醒。4.唤醒完成量前者只唤醒一个等待的执行单元,后者释放所有等待同一完成量的执行单元。实际用例进程P2,在程序中开始时,触

2021-03-18 17:18:30 156

原创 linux驱动开发_互斥体

互斥体与信号量只取0、1时有相同的表现形式。相关代码1.定义互斥结构体,并初始化2.获取互斥体mutex_lock () 与mutex_lock_interruptible () 的区别:前者引起的睡眠不能被信号打断,而后者可以。mutex_trylock ()用于尝试获得mutex,获取不到mutex时不会引起进程睡眠。3.释放互斥体完整使用案例: 互斥体是进程级的,用于多个进程之间对资源的互斥,虽然也是在内核中,但是该内核执行路径是以进程的身份,代表进程来争夺资源的。如果竞争失败

2021-03-18 16:56:58 199

原创 linux驱动开发笔记_信号量

信号量概念信号量(Semaphore)是操作系统中最典型的用于同步和互斥的手段,信号量的值可以是0、1或者n。①如果信号量S的值大于零,该进程继续执行。②如果S的值为零,将该进程置为等待状态,排入信号量的等待队列,直到V操作唤醒之。相关函数1.定义信号量2.初始化信号量该函数初始化信号量,并设置信号量sem的值为val。3.获得信号量该函数用于获得信号量sem,它会导致睡眠,因此不能在中断上下文中使用。该函数功能与down类似,不同之处为,因为down ()进入睡眠状态的进程

2021-03-18 11:08:11 103

原创 linux驱动开发笔记_顺序锁

顺序锁简介顺序锁(seqlock)是对读写锁的一种优化,若使用顺序锁,读执行单元不会被写执行单元阻塞,也就是说,读执行单元在写执行单元对被顺序锁保护的共享资源进行写操作时仍然可以继续读,而不必等待写执行单元完成写操作,写执行单元也不需要等待所有读执行单元完成读操作才去进行写操作。但是,写执行单元与写执行单元之间仍然是互斥的,即如果有写执行单元在进行写操作,其他写执行单元必须自旋在那里,直到写执行单元释放了顺序锁。对于顺序锁而言,尽管读写之间不互相排斥,但是如果读执行单元在读操作期间,写执行单元已经发生了

2021-03-17 22:51:55 91

原创 linux驱动开发笔记_自旋锁

自旋锁介绍自旋锁(spin lock)是一种典型的对临界资源进行互斥访问的手段。如果A执行单元首先进入例程,他将持有自旋锁,当B执行单元试图进入同一个例程时,将获悉自旋锁已经被持有,然后需要等待A单元释放后,方可进入。相关操作函数1.定义自旋锁spinlock_t lock; 2.初始化自旋锁spin_lock_init(lock);3...

2021-03-16 21:51:40 271

原创 linux驱动开发笔记_ioctl函数

1.相关概念ioctl 是设备驱动程序中设备控制接口函数。某些设备除了开关、读写功能外,可能还有其它的功能,比如说设置串口波特率、设置马达的转速等等。1.用户空间函数#include <sys/ioctl.h> int ioctl (int fd, unsigned int cmd, ...)参数描述fd打开文件描述符cmd交互协议,设备驱动将根据cmd执行相应的操作…可变参数arg,依赖cmd中指定的长度以及类型ioctl()函数执行

2021-01-29 17:52:36 300

原创 Linux驱动开发笔记_工作队列&共享队列

1.工作队列1.工作队列运行在特殊的内核进程中;2.工作队列函数可以修休眠;3.工作队列中的任务函数不能访问用户空间;4.工作队列是延迟操作的一种方法;1.创建工作队列#define create_workqueue(name) \ alloc_workqueue("%s", WQ_MEM_RECLAIM, 1, (name)) #define create_singlethread_workqueue(name) \ alloc_ordered_workqueue(

2021-01-27 23:01:46 239

原创 linux 驱动开发笔记_内核定时器&tasklet

1.判断内核代码的状态in_interrupt()1.判断内核自己是否处于中断上下文中;2.无需输入参数;3.如果处理器运行在中断上下文就返回非零值。(包含硬件中断和软件中断)。in_atomic()1.判断是否位于原子上下文中;2.无输入参数;3.调度不被允许时,返回非零值。(包含硬/软中断、拥有自旋锁的的时间点)。2.内核定时器使用1.创建结构体(定时器)struct timer_list {…unsigned long expires; //期望运行

2021-01-27 17:23:33 174

原创 ARM 中断发生时 PC,LR,SPSR,CPSR寄存器相关问题总结

问:ARM在从SVC模式,进入IRQ中断时,现场是如何保存的?答:在保存现场时,处于svc模式下时,cpsr寄存器是写入irq模式下的spsr_irq寄存器,而不是svc模式下的spsr_svc,这样,在中断模式下恢复的话,将spsr_irq寄存器里的内容写入cpsr,就能恢复到svc模式了,因为,spsr_irq寄存器里的内容就是svc模式下的状态。另外 ,PC指针地址,在中断发生时会向LR寄存器赋值,但是赋值对象也不是LR_svc寄存器,而是在IRQ模式下的LR_irq寄存器。因此,在进入中断IR

2020-09-16 15:16:03 4744 1

原创 Git使用总结

1.Github下载和安装git安装包下载(无限速):git安装一路默认安装就可以了。2.Git软件配置Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。$ git config --global user.name "Your Name"$ git config --global user.email "[email protected]"3.Git使用流程1.选择一个目录(空目录或有文件的目录)2.将目录初始化为Git可以管理的仓库初始化方法:$

2020-08-08 23:35:58 82

原创 微信小程序低功耗蓝牙(BLE)开发总结

1.开发准备低功耗蓝牙模块:(链接)蓝牙模块购买通道相关参数数据(UUID表):## 2.蓝牙开发推荐流程图

2020-07-13 21:32:49 3301 1

转载 串口助手(简洁版)上位机软件零基础教程( C# + visual studio2017 )(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-09-07 15:38:18 1546

转载 串口助手(简洁版)上位机软件零基础教程( C# + visual studio2017 )(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-09-07 15:35:52 4314 2

空空如也

空空如也

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

TA关注的人

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