自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6.实战SR501人体红外感应,引入中断和异步通知

这个模块有人会输出高电平,无人会输出低电平,按照之前的方法read话,只能获取当前状态,需要一直轮询才能实时知道有人无人的变化,中断是一种高效的机制,能够在保证系统响应速度的同时,最大限度地提高 CPU 资源的利用率。在共享中断的情况下,用于区分是哪个设备引发了中断。这里我并没有一直在读取sr501的电平,是硬件电平变化产生了一个中断后,由cpu去唤醒对应的中断处理函数,细节就不深究。: 表示需要唤醒一个线程来处理该中断,用于更复杂的处理逻辑。:指向设备的指针,用于共享中断的情况下区分设备。

2024-07-23 11:51:29 396

原创 5.操作led

确定好GPIO编号后,接下来就是要确定led驱动程序的功能,这里我希望它能开关led,以及能读取led的状态。套用到我们的驱动程序中就是,在init函数中请求GPIO并设置方向为输出,在exit函数中释放GPIO,在read函数中获取GPIO的值,在write中设置GPIO的值。gpio_get_value读,gpio_set_value写。gpio_direction_input输入,gpio_direction_output输出。想要操作led,首先要找到原理图,查找GPIO对应的GPIO引脚。

2024-07-17 14:59:40 171

原创 4.自动生成class和device

现在insmod驱动后,就会在/dev/下自动生成hello节点(/dev/hello),/sys/class/下生成hello目录并在hello目录下生成一个hello设备的信息目录(/sys/class/hello/hello)第三章里面,我们使用mknod创建设备节点,常规操作是在驱动init的时候就创建好,使用class_create和device_create创建。

2024-07-01 11:33:15 226

原创 3.用户程序与驱动交互

用户app与驱动交互最常见的做法是insmod驱动后,生成一个设备节点,app通过open,read等系统调用去操作这个设备节点,这里先用mknode命令调试。使用mknode后生成了/dev/hello节点,写入数据到hello节点中,查看dmesg的输出发现调用了驱动的open write release。分别调用 ./hello_test /dev/hello 123 和 ./hello_test /dev/hello 后,查看dmesg输出显示。驱动程序请使用第二章。

2024-06-28 17:40:05 1277

原创 2.最简单的hello驱动

第三步实现这些read,write等函数。点到file_operations结构体定义的地方,把函数原型复制过来,例如read函数,改写一下成hello_read,依次把write,open,release函数补上,这里不操作任何东西,添加一些打印即可。第四步实现init和exit函数,这里我参考的是/Linux-4.9.88/drivers/char/mbcs.c中的init和exit。写驱动最快的方法就是抄内核中的其他驱动,这里选择的是/Linux-4.9.88/drivers/char/mem.c。

2024-06-28 11:12:43 251

原创 1.驱动程序框架

在linux下,一切皆文件。当我们write一个文件时,内核通过文件的file_operations结构体(include/linux/fs.h)来找到对应的驱动函数,最终调用的是存储介质(ssd,硬盘等)驱动提供的write函数(这中间有很多步骤暂时先不关注)。不同的驱动要提供自己的open,read,write,ioctl等接口。当驱动insmod的时候,通过model_init()宏来初始化驱动。当驱动rmmod的时候,通过model_exit()宏来清理驱动。驱动是用来控制和操作硬件的软件。

2024-06-28 09:40:42 188

原创 Makefile语法

1. %通配所有字符 例如 %.o表示.o文件 %.c表示所有.c文件2. $@表示目标文件3.$<表示第一个依赖文件,$^表示全部依赖文件上一章的Makefile经过这些符号优化后可得这样做的好处是,不管增加多少个.c文件 不需要在修改Makefile了。

2024-06-27 14:54:39 173 1

原创 Makefile核心

原理是test文件依赖于a.o b.o 但是a.o和b.o不存在,那么就要生成a.o和b.o,所以看到的顺序是先生成a.o,再生成b.o,最后链接成test。因为a.c文件修改时间大于a.o的时间,所以重新生成a.o,a.o的文件修改时间又大于test文件,所以重新生成test文件。我想把a.c b.h b.c打包成一个可执行程序test,那么test应该依赖于a.o b.o。因为a.o和b.o没有更新。修改一下a.c,添加一个空格后保存,重新make结果如下。a.o依赖于a.c,b.o依赖于b.c。

2023-05-05 13:52:17 463

原创 QML与C++通信

前提:1.C++的类必须继承自QObject2.类中必须有Q_OBJECT宏如果QML要访问C++中的数据,那么需要使用Q_PROPERTY宏去注册属性,IDE自动补全的格式如下:Q_PROPERTY(type name READ name WRITE setname NOTIFY nameChanged)第一个参数是该属性的数据类型,可以是QT内置的,也可以是用户自定义的。第二个参数是提供一个读数据的接口,需要用户自己完成。READ必须要有第三个参数是写数据的...

2023-05-05 11:01:55 214

原创 交叉编译Python3.9.2到arm

删除掉Makefile中 -m64 字段。2.交叉编译openssl。3.交叉编译python。1.交叉编译zlib。

2023-05-05 10:59:51 917

原创 QT socket客户端

#include "widget.h"#include "ui_widget.h"#include <QTcpSocket>#include <QHostAddress>Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); clientSocket = new QTcpSocket(this); ...

2021-10-21 15:04:18 394

原创 QT快捷键记录

1.添加函数注释 函数上一行输入 /** 按下回车自动生成

2021-04-12 11:02:56 108

原创 Python3 列表边遍历边删除 使用列表表达式

使用列表表达式即可边遍历边删除MyList = [{"test": "666"}, {"test": "123"}, {"test": "123"}, {"test": "123"}]MyList = [x for x in MyList if x["test"] != "666"]输出[{'test': '123'}, {'test': '123'}, {'test': '123'}]

2021-03-17 17:12:40 208

原创 QT各种数据类型转换笔记

1.QString 和QJsonArray 互转QString str = "hello world";QByteArray ba = str.toUtf8(); //方法一,转成utf-8ba = str.toLatin1(); //方法二,如果遇到ascii之外的字符,转换可能会不完整str = QString(ba);//QByteArray转回QString ...

2021-03-08 17:20:09 353

原创 ubuntu QT如何安装QMQTT

1.从官方git上下载qmqttgit clone https://github.com/qt/qtmqtt.git2.切换到与自己QT版本相匹配的qtmqtt版本,我这里是5.14.1git checkout 5.14.13.执行qmake指令,然后make && make install即可。qtmqtt会自动安装到Qt Creator的路径下qmakemake && make install...

2021-01-29 17:31:58 1971 8

转载 C笔记:使用数组名的注意事项

转载自https://blog.youkuaiyun.com/chocolate2zz/article/details/608033181.数组名不是指针;2.数组名可以当做一个指针常量使用;3.指向数组的指针,就紧紧是一个指针;4.当函数形参使用数组名是,其会被转换成一个单纯的指针。以下是证明上面四点的论据:1. 首先数组名不是指针,这很容易证明。#include <string.h>#include <stdio.h>int main(){ ...

2020-12-16 10:53:03 540

原创 VScode在ubuntu和windows下回退前进快捷键

一:ubuntu回退ctrl+alt+-前进ctrl+alt+-二:windows回退alt+←前进alt+→

2020-11-10 09:54:44 6934

原创 python3 利用subprocess关闭进程

subprocess模块可以生成新的进程,连接到它们的input/output/error管道,同时获取它们的返回码。我们利用subprocess.getoutput(cmd)函数:执行cmd命令,返回值为命令执行的输出结果(字符串类型);注:执行失败,不会抛出异常。我们要关闭一个进程,首先要找到这个进程的pid号,pgrep能获取到指定程序名的进程号。然后调用subprocess...

2020-04-22 16:22:20 7698 1

原创 python logging的简单用法笔记1

logging是个python自带的日志相关模块,无需安装,最简单的使用方法如下:import logginglogging.debug('123')logging.info('123')logging.warning('123')logging.error('123')logging.critical('123')输出结果如下:WARNING:root:123ER...

2020-04-22 10:02:52 226

原创 低版本的openwrt添加openwrt19的支持的python3软件包

openwrt的扩展软件包放在feeds目录下,python相关的包在feeds/packages/lang/python下。原本openwrt18是不支持python-pyserial的,只要从openwrt19中的feeds/packages/lang/python/python-pyserial文件夹复制到openwrt18的feeds/packages/lang/python的目录...

2020-03-03 15:16:16 1540

原创 openwrt下shell笔记

项目需要在openwrt下写个shell守护脚本来维护程序运行,借此机会学习下shell。shell里面:1.变量赋值等号两边不能有空格2.执行命令结果赋值给变量用``或者$(),例如`ls /etc`,$(ls /etc)3.使用变量用$变量名,或者${变量名},建议后者。因为如果字符串里面使用变量的话,单引号字符串会原样输出单引号里面的字符。4.字符串分单引号和双引号两种,...

2019-12-25 11:13:30 2478

原创 python中如何使用mqtt的简易教程

学习新知识最好的方法就是去看源码,看官方示例!!!https://pypi.org/project/paho-mqtt/1.安装mqtt开源库paho-mqtt:pip install paho-mqtt2.官方订阅代码示例:创建一个客户端只需要6步,如下:ClientYou can use the client class as an instance, w...

2019-12-14 10:13:01 2328

原创 Python3利用os.walk()获取当前目录下的全部文件

我这里有一个test目录,test目录下有一个名为test1的文件夹和名为1,2的两个文本文件。我只想要这两个文本文件的名字,可以用os.walk()来提取。代码如下:import osfilename = './test'filename, *_= os.walk(filename,topdown=True)*_, filenames = filename...

2019-09-30 09:05:35 1605

转载 Navicat 连接MySQL 8.0.11 出现2059错误解决方法

参考原文https://www.cnblogs.com/lifan1998/p/9177731.html使用Navicat Premium 连接MySQL时出现如下错误:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_passwordjiejue1解决办法:更换加密规则mysql -u...

2019-09-26 10:35:08 251

原创 pip install遇到Read Time Out错误解决方法

今天在公司新买的服务器上安装requests库时出现了一个错误:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.这个错误是由于国内连接国外的镜像比较慢造成的。在使用pip的时候加上--defaul...

2019-09-23 15:53:11 4273

原创 Python3 返回字符串中某个给定字符的全部索引

通常情况下,我们用find可以获取字符串中某个给定字符的索引,但是find方法只能给出字符串中第一次出现此字符的索引,如果我们需要获取给定字符的全部索引的话,目前想到了两个方法。第一种.最笨的方法:去循环遍历字符串,找到相等的位置就记录下来·。def find_all(data, s): r_list = [] for r in range(len(data)):...

2019-09-19 14:59:55 11328

原创 python3获取字典中最大值的对应键

有时我们需要字典中数值最大的那个键的名字,使用max(dict, key=dict.get)函数非常的方便。eg:prices = { 'A':123, 'B':450.1, 'C':12, 'E':444,}max_prices = max(prices, key=prices.get)print(max_prices)输出结...

2019-09-12 14:38:15 3937

原创 Python3使用threading.Timer实现循环任务

上篇说道要每三天更新一次epo文件,下载搞定了,现在来弄循环。现在来说一下简单粗暴的方式。函数内新建一个定时线程,然后调用函数本身。import threadingimport timeimport requestsglobal urldef download(url): req = requests.get(url) filename = url.spl...

2019-09-11 16:55:45 5084 3

原创 python3下载指定url的内容

今天老板给了我一个epo文件的下载地址http://wepodownload.mediatek.com/EPO_GR_3_1.DAT,需要每隔三天下载一次。Python中有一个高度封装好的requests库可以满足这个需求。pip install requests即可下载,windows下如果提示拒绝访问,大概率是因为python选择了为所有用户安装,用管理员打开cmd输入pip inst...

2019-09-11 16:15:55 5613

原创 Python字符串按照指定索引切片

a = '123:234*2222:888*44444:777*00000:999'strlist = list()while True: if a.find('*') != -1: strlist.append(a[:a.find('*')]) a = a[a.find('*') + 1:] else: strlist...

2019-09-10 16:09:14 2308

原创 Python多线程UDP服务器

从socketserver.BaseRequestHandler继承并重写handle方法。import socketserverclass MyUDPServer(socketserver.BaseRequestHandler): def handle(self): recvdata = bytes.decode(self.request[0]...

2019-09-10 15:50:13 1553

转载 Python3.7安装pycurl

https://www.jianshu.com/p/b1d5e58bad2c在别的博客看到的,亲测有用。

2019-06-28 10:22:31 1340

原创 Python3读写CSV文件

CSV模块提供的常见函数有:1.csv.write(csvfile,dialect='excel',**fmtparams)返回一个writer对象。2.csv.reader(csvfile,dialect ='excel',** fmtparams)返回一个reader对象。3.classcsv.DictWriter(f,fieldnames,restval ='',ex...

2019-06-27 16:22:39 500

原创 Python中range()的用法

range(start, stop[, step])会返回一个可迭代的对象(不是列表,无法打印,强制打印可以用list()函数)start:开始计数stop:结束计数step:步长,元素间的间隔print(type(range(10)),list(range(10)))<class 'range'> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]...

2019-06-20 20:26:52 219

原创 Python在多线程中使用time.sleep()

time.sleep(secs)函数会挂起线程secs秒,只对当前线程起作用。放在一个线程里并不会影响其他线程运行。测试代码如下:import threadingimport timedef thread1(): while True: time.sleep(1) print(time.strftime('%H:%M:%S'),'hahaha')...

2019-06-20 19:26:55 14951

原创 Python中time模块获取当前时间

time模块提供了一系列与时间相关的函数。常见的有:time.time()返回当前时间的时间戳time.localtime(sece)返回本地时间,如果未提供参数secs或None,则使用time.time()返回的当前时间time.strftime(format[,t])返回格式化后的时间,如果未提供参数t,则使用time.localtime()返回的当前时间。import ...

2019-06-20 15:09:41 21893

原创 python输出异常模块traceback的常见用法

traceback模块可以打印出程序当前具体的异常信息。常用的函数是:traceback.format_exc()以字符串返回异常信息traceback.print_exc()直接打印出异常信息测试代码如下:import tracebackimport serialtry: ser = serial.Serial('COM13', 115200) ser =...

2019-06-20 14:04:46 7013 4

空空如也

空空如也

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

TA关注的人

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