- 博客(91)
- 收藏
- 关注
原创 TensorFlow和它的弟弟们
TensorFlow、TensorFlow Lite和TensorFlow Lite Micro是Google针对不同资源环境和应用场景推出的深度学习解决方案。TensorFlow适用于资源丰富的环境,TensorFlow Lite适用于移动设备和嵌入式设备,而TensorFlow Lite Micro则专为资源极度受限的微控制器等小型设备设计。这三者共同构成了Google在深度学习领域的完整产品线,以满足不同场景下的需求。
2024-08-20 23:00:59
436
原创 单片机GPIO模式和应用
可以实现“线与”功能,即多个开漏输出的引脚可以直接相连,只有当所有引脚都输出高电平时,总线才为高电平。定义:推挽输出是一种输出模式,其中引脚可以输出高电平或低电平,且两种电平状态下都具有较强的驱动能力。定义:上拉输入模式下,引脚内部通过上拉电阻连接到高电平,当外部没有信号输入时,引脚保持在高电平状态。定义:下拉输入模式下,引脚内部通过下拉电阻连接到低电平,当外部没有信号输入时,引脚保持在低电平状态。定义:开漏输出模式下,引脚只能输出低电平,不能主动输出高电平,需要外部上拉电阻才能将电平拉高。
2024-08-09 18:09:53
582
原创 SWDIO管脚作为GPIO
下面是使用FRDM-K32L2B3开发板和SDK中的frdmk32l2b_gpio_led_output程序做了一些测试,configure SWDIO pin as GPIO pin的流程。2.修改Demo程序,在程序中设置SWDIO对应的管脚为GPIO管脚,并把管脚设置为低电平。4.对J11 的2管脚进行电压测量,电压变为了0。则设置SWDIO pin为GPIO成功。注意上面步骤设置成功后下次使用SWDIO下载程序到芯片时会失败。3.通过MCUXpresso下载程序到开发板。
2024-07-15 22:58:17
281
原创 SD card知识总结
SD总线模式中有4条数据线;SPI总线模式中仅有一条数据线(MOSI和MISO不能同时读数据,也不能同时写数据)。SDIO全称(Secure Digital I/O),一般控制器会有这个SDIO接口和SD卡通信。控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种是SDIO接口。2.SDIO接口:传输速度上较快,接口相对复杂,设计和实现成本较高。超过 2TB,最高 128TB。超过 2GB,最高 32GB。超过 32GB,最高 2TB。二、SDIO接口通信。
2024-07-13 16:17:54
295
原创 配置内核,编译内核,出错fatal error: sys/types.h: No such file or directory #include <sys/types.h>
但是:suo apt-get install libc6-dev安装这个时候又报错了,真是一个坑接着一个坑。已经可以查到许多types.h的文件了。安装libc6-dev,完成后使用命令。解决办法:更新系统软件源。
2024-04-25 15:59:41
801
原创 V4L2驱动
这个结构体用啥管理呢,用v4l2_ctrl_handler管理,这个v4l2_ctrl_handler是个指针我感觉,指向这个结构体,然后就是这样子的。关键函数有:v4l2_device_register可以得到/创建一个结构体就是 V4l2_decice。3、设置这个videv_device结构体,用vfd表示这个videv_device结构体。用的分配函数为video_device_alloc函数,alloc就是分配内存的意思。v4l2_ctrl结构体,结构体中定义的了一些内容可以对应音量、亮度啥的。
2024-04-08 21:52:16
201
原创 Ubuntu连不上外网的问题—ping不通baidu.com
主要我到了上面的步骤还是不能上网,然后设置了一下主机VMware Virtual Ethernet Adapter for VMnet8网络。首先,定位问题,再问我出现的问题中,认为是NAT设置的问题,只要NAT设置好就可以连接网络。从终端进行设置,ip地址不要和上面设置成一样的,但是网关设置成一样192.168.213.2。如果不知道咋改,直接选择还原默认设置,记录一下默认的IP地址和子网掩码。然后再记录一下默认的网关192.168.213.2。到了这里应该就可以上网了。然后,设置我的DNS。
2024-03-26 00:30:33
2579
原创 字符驱动程序-LCD驱动开发
在这个驱动开发的时候,内核中已经有个fbmem.c文件函数把上面的框架弄好了,只需要我们做修改就OK了,fbmem.c这个文件不通用,不能用到所有的MPU和LCD上,所以需要我们修修改改。使用register_framebuffer(struct fb_info *fb_info)函数 (还没清除为啥是这个函数)不同的硬件会在驱动程序中加入不同的fb_info结构体,通过这个fb_info去操作硬件。这个结构体中有操作硬件的函数,比如drv_open、drv_read。如何使用到不同的LCD上呢?
2024-03-25 17:28:15
634
原创 LINUX锁的介绍和使用
用排队等待的方式解决多核CPU互斥问题,这种情况下,两个CPU都要执行一个函数,用这个自旋锁就可以让其中一个CPU静静的等待一会。可是这种方法也有不足之处,就是函数要短一些,一般不超过5行,不然等待的CPU有些浪费资源了。可能是在一个CPU上,那spin_lock做法就是比较狠了,直接的禁止抢占,禁止别的进程调度这个驱动函数。有时候写的驱动函数不知道在一个CPU运行还是在两个CPU运行可咋整。信号量:semaphore 和 互斥量:mutex。还是用来解决互斥的问题的。1、自旋锁 2、睡眠锁。
2024-03-24 14:01:18
249
原创 同步与互斥
2、大于ARMv6内核,大概就是使用内联汇编代码,检测执行的这个程序是否被抢占,抢占的话就重新再执行,就是可以检测是否被抢占,而且汇编代码效率高,也可防止其它核抢占了资源,引起问题。1.小于ARMv6的内核,函数执行的时候关闭中断就行,好像就只有单核,不支持SMP,只要防护好家贼就行。用atomic去解决。
2024-03-22 12:11:29
166
原创 编码器信号模拟电路设计 软件+硬件
设计一个编码器模拟电路。为什么要设计这样一个电路呢,就要看它有什么用处了。一些自动化设备在开发调试过程中,需要获取传动机构的相位和速度信号,而直接对机器测量费时费力,测量参数固定,所以需要设计一个电路对编码器的信号进行模拟。---1.停止,开启、某一转速时刻机器电机信号测量费劲,2、机器最大转速800转,想要开发1000转的一个机器,脉冲信号测不出来。下图就是编码器的一个实物,固定在电机的一端,主要功能可以将旋转位移转换成一串数字脉冲信号,根据这个脉冲信号信号可以得出电机旋转的方向、旋转角度、速度。
2024-03-14 17:58:32
364
原创 驱动开发-系统移植
需要移植三部分东西,Uboot ,内核 ,根文件系统 (rootfs) ,这三个构成了一个完整的Linux系统。把这三部分学明白,系统移植就懂点了。
2024-01-26 22:12:12
1019
原创 WPS通配符匹配数字
代表回车符,用于匹配换行符。这样,它将只匹配数字前没有换行符的情况下符合条件的数字。请注意,不同版本的 Word 可能对于通配符的支持有所不同,因此可能需要根据实际情况进行调整。在 Word 中,通配符无法直接区分数字前是否有换行符或其他特定字符。但是,可以使用特殊的控制字符,如。换句话说,它用于查找形如 3 开头或者 6 开头的四位数字。代表换行符,在通配符模式中间来匹配特定情况。
2024-01-09 17:18:21
1450
原创 Freertos学习
实时操作系统,要求一个高的实时性,就不是像在一个死循环中放俩函数了。而是创建俩任务,也叫做俩进程,高速的轮流执行,提高实时性。
2023-08-18 11:30:02
346
原创 FreeRTOS问题
比如,当一个运行着的任务被其它高优先级的任务抢占,当前任务的 CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 CPU 的控制权并运行。又比如,如果中断服务程序使一个高优先级的任务进入就绪态,中断完成时,被中断的低优先级任务被挂起,优先级高的那个任务开始运行。1.首先执行的最高优先级的任务 Task1,Task1 会一直运行直到遇到系统阻塞式的 API 函数,比如延迟,事件标志等待,信号量等待,Task1 任务会被挂起,也就是释放 CPU 的执行权,让低优先级的任务得到执行。
2023-08-16 17:03:42
1955
原创 SPI-FlexSPI
SPI 高速全双工通信总线数据输出-主设备数据输出,从设备数据输入数据输入-主设备数据输入,从设备数据输出时钟信号-由主设备产生片选信号,主设备控制这是一个主机的通讯时序。NSSSCKMOSI信号都由主机控制产生,而MISO的信号由从机产生,主机通过该信号线读取从机的数据。MOSI与MISO的信号只在NSS为低电平的时候才有效在SCK的每个时钟周期MOSI和MISO传输一位数据。观察图中的标号处,MOSI及MISO的数据在SCK的上升沿期间变化输出,
2023-08-15 17:16:32
368
原创 嵌入式准备
用const修饰的变量是不可变的如果const位于*的左侧,eg:const int* a,则const就是用来修饰指针所指向的变量,此时为常量指针,即指针指向*a为常量;如果const位于*的右侧,eg:int* const a,const就是修饰指针本身,此时为指针常量,即指针本身a是常量。// 常量指针;指针指向的内容不能变,*p不能变// 指针常量;指针本身不能变, p不能变用const修饰函数参数,传递过来的参数在函数内不可以改变。
2023-08-07 17:31:58
834
原创 Linux嵌入式项目-智能家居
订阅会根据不同的消息主题去订阅,会有一个while(1)死循环,订阅到消息后然后找到消息的主题,然后执行相应的函数topic1_handler,这个应该叫响应函数吧,实现了一个信号与曹的机制,"topic1"是信号,topic1_handler槽函数。建立连接后,会创建订阅死循环线程,主要功能有:读数据,处理数据、保持活性、检查错误。客户端创建了两个线程,一个线程用于发布消息,一个线程用于监听订阅消息。使用的通信传输协议 MQTT/FTP/SSH。四、单片机和linux联网的区别。//创建一个发布线程。
2023-07-12 23:12:04
1984
原创 某芯片公司实习面试
1、简历中有过一次实习,对实习内容问的很深入,会让画图和一些细节性质的问题,能把实习内容将的很清楚最好。面试官会介绍一些工作内容,问你想法,考验表达能力,问你能否接受这个工作的意思,聊了一些其它的。举办方、自己的主要工作、主要工作的一些技术问题、遇到的问题,主控板型号、厂家。3、也问一些简历自己写的技能,这些技能在哪里用到的会问。2、简历中有一次比赛,问了一些问题。4、后续就是问你对公司、岗位了解程度。5、你问一些问题,最后结束。
2023-04-06 09:59:07
180
原创 IMX6Ull点亮LED
设置寄存器的寄存器有两个,一个是设置寄存器-用来设置值;一个是清除寄存器-用来清除设置值。2、设置GPIO模式 //是做为GPIO,还是做为串口引脚,做为信号线。1、管脚使能 //有些为了省电,默认没有使能。这样比较低效,有更好的办法,就是修改设置寄存器的寄存器的值。1、看原理图,确定控制LED的主芯片引脚。2、看主芯片手册,确定如何设置控制引脚。3、设置GPIO输入输出模式。上述操作都是对寄存器操作。要领,不要影响其他位。
2023-03-26 21:45:02
238
原创 Ubuntu连不上网,ping: baidu.com: 未知的名称或服务
ping: baidu.com: 未知的名称或服务ping不通的话应该就是Ubuntu连不上网。
2023-03-21 21:38:01
4029
原创 第一个驱动程序
drv_read这个驱动函数因该就是我们需要去编写的程序,用来控制硬件,但是又不准确,如何写看下面,这个一定要理解。但是,中间会经过内核,找到对应的程序,看是调用普通程序,还是调用驱动程序。首先,APP会写出open函数去调用驱动程序。最后,驱动程序也有与之对应的open函数。看图说话,首先是APP如何操作驱动。
2023-03-20 21:34:03
63
原创 Makefile实战
比较重要的一个是需要一个,生成a.o文件的时候不仅会依赖a.c还会依赖啊啊a.h,b.h,c.h那么下面这个makefile文件就会出问题,因为没有依赖上.h文件。因为啥呢,当修改.h文件的时候,这个makefile,并不知道修改了.h这个依赖文件,所以要对,makefile文件进行修改。把生成b.o文件的依赖都给加上 b.o:b.c b.h,,这样加上,当我们修改b.h的时候,就需要重新生成目标b.o了,.c也就重新被编译了,那修改的.h文件也就被找到编译了。
2023-03-19 15:33:13
567
原创 Makefile
linux没有编译软件IDE,比如说VS,Pycharm,需要自己去编写makefile去实现这个IDE的功能,比如写好makefile之后,输入一个make命令,就会去执行makefile文件,就相当一个IDE,实现了预处理--编译--汇编--链接这些东西,组织管理程序,先执行哪个后执行哪个,一个make就完成了。但是呢,如何知道哪个.c文件被修改了呢,那就要比较.c文件和.o文件的保存时间了,如果有一个.c文件的保存时间比它的.o文件更新,那这个.c文件就是被修改了。2、实战写一个makefile。
2023-03-17 15:43:30
434
原创 gcc编译
2、当文件多的时候,就要先汇编再链接了,防止有一个.c文件出现问题的时候要重新汇编链接所有文件了。主要就是对标准库的处理,包含头文件,找到头文件的位置,比如输入输出流。自我理解,需要把高级语言,编译成成机器能识别的语言,或者文本。把.o目标文件链接成一个APP文件,就是一个可执行的应用程序。如果是交叉编译链,肯定去交叉编译链里面去搜索这些头文件。1.预处理---编译---汇编---a.o目标文件。2.预处理---编译---汇编---b.o目标文件。把.s汇编文件变成.o目标文件,但是没有做链接。
2023-03-16 21:49:56
348
原创 QT中使用chart清除内容,二次画图
用chart当第一次读取文本数据画折线图后,再次读取文本数据画折线图时候,发现十分困难,有的说用replace,但是看着十分麻烦。直接把创建的表格对象删除,再利用新数据二次创建图,就ok了。
2023-02-24 10:52:08
1546
原创 cesium世界坐标系的x,y,z转换成经纬度
/我的需要180 - 计算的度数。//startPoint = [x,y,z],存放世界坐标系中的坐标点。需要把下(x,y,z)世界坐标系数据转换成(经度,维度,高度)console.log(lat,"世界坐标系转回来")
2023-02-22 15:08:52
1753
原创 经纬度坐标点和距离之间的转换
弧度之间的差值,就是弧度角,然后弧度角*地球半径就是,两个坐标点之间的弧度长。//输入参数是两个坐标点的经纬度。纬度每隔0.00001度,距离相差约1.1米;经度每隔0.00001度,距离相差约1米;每隔0.0001度,距离相差约10米;每隔0.001度,距离相差约100米;每隔0.01度,距离相差约1000米;每隔0.1度,距离相差约10000米。每隔0.0001度,距离相差约11米;每隔0.001度,距离相差约111米;每隔0.01度,距离相差约1113米;每隔0.1度,距离相差约11132米。
2023-02-21 20:54:37
1545
编码器信号模拟电路设计 软件+硬件
2024-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人