自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 Linux启动配置

很多厂家都是通过修改此文件进行配置,一般包括rcS一个脚本文件,脚本里面去加载不同脚本(通过文件名来过滤、设置启动顺序),还包括关闭退出的一些处理。BIOS/UEFI设置:在计算机启动时,进入BIOS或UEFI设置界面,确保启动顺序中的第一个选项是硬盘或SSD,以便从存储设备启动Linux。目录下,可以通过修改这些文件来配置启动时要运行的服务、启动优先级等。内核参数配置:Linux系统的内核可以通过启动参数进行配置,例如设置内存大小、网卡驱动、磁盘调度算法等。参数来配置内核启动参数。

2024-04-12 18:08:11 144

原创 STM32定时器使用与计算

分频 Prescaler:20 含义:184MHz / (20+1) = 8MHz, 也就是说该定时器以每秒8M次脉冲触发,计数时间单位 = 1/8M = 0.125us。以TIM11为例,可以看到是挂载在APB2下面,由前面的Clock Configuration 的配置,可以知道TIM11的输入频率为184MHz,请记住此值!prescaler 是用来分频来自APBx的时钟频率,然后提供给定时器,作为定时器的心跳。另外,我的MCU有那么多的TIM可以用,我怎么知道该TIMx挂在哪个APB下面呢?

2024-02-22 16:38:15 330

原创 STM32 ADC采样调试笔记

最近在搞STM32L051系列一个小MCU,要用这个去采集两路ADC作为输入。期间也碰到过一些问题,顺便记录下。ADC采集原理不说了,主要采集电压,用数字进行细分,这样就可以知道输入电压多少了,网上也有很多相关文章。我这边主要以下几个问题或知识点1.采集模块添加2.采集前初始化代码添加3.多通道采集顺序混乱问题

2024-01-06 12:18:56 1240

原创 直流电机驱动开发笔记

接触有两种方式:一种是驱动芯片,这种一般封装好,都很小或相对很小,这种内部集成了H桥,可支持步进电机也可以直流电机,例如L298N之类的,但他们一般驱动能力有限,小电机问题不大,稍微大一点比如100w以上的电机,就会有问题。MARK知识点:电机在启动瞬间会有比较大的电流,这个大电流可能会导致芯片触发限流,如果是仅仅限流到还好(起来过程稍微慢点),如果是反向限流就不行了,这样电机可能永远起不来。还有一种是用MOS搭建的,有简单的,有复杂的,相对来说,可驱动比较大一点电机,一般100w以上没有问题。

2023-12-29 15:47:17 1175

原创 电机驱动开发

总的来说,对软件而言,关心的有这几个:VREF1~VREF4、OUTx、Ixx、PHASE1~PHASE4,这几个(后面两组是用来Control input控制输入的,也就是开关)。高逻辑电平设置的是半步进模式,低逻辑电平设置的是全步进模式。高逻辑电平设置的是慢衰变模式,低逻辑电平设置的是快衰变模式。●EN 逻辑输入:它是芯片使能输入。很多情况下,电机不仅仅是转与不转的关系,还应该有其他要求,因此需要程序或芯片来实现驱动功能。就好比流程图一样,左边是我们要输入的(通过MCU),右边是控制输出的。

2023-12-13 20:31:22 1257

原创 STM32F407 串口使用DMA方式通信

DMA的原理,就是利用寄存器方式进行读写,这样的好处就是相对于中断触发(往往一个字节字节的就中断一次),CPU中断次数大大降少,提高了效率,但也影响了实时性。总体来说,对于一般的应用,瑕不掩瑜,值得使用。本文是基于串口1的,实际上串口1也是printf重定向接口,貌似没有什么冲突。原则上:1. 串口接收采用DMA+空闲中断的方式2. 串口发送就是直接发送方式这样的方式,符合一般项目需求。也分两部分:STM32CubeMx端配置+代码的处理。

2023-09-19 19:35:29 1499

原创 SFUD、FlashDB测试demo

搭建好SFUD、FLASHDB之后,参考下本文的业务代码往往我们都不知道业务代码怎么写其实还是缺少一个Adapter层,至于如何编写DBAdapter,相信有很多策略,实际落地还需要大量业务代码支撑,否则,算不了掌握DB

2023-09-16 10:13:25 616

原创 移植FlashDB、SFUD到STM32f407

FlashDB是个好东西,但第一次接触还是避免不了走弯路,本人也是走了一会的弯路。由于芯片本身不同,这里芯片不仅仅是FLASH芯片,还包括MCU,因此要实现自己的代码,需要做相应的改进(调整)。本文是基于STM32F407芯片,记录哪些地方需要改进的

2023-09-12 20:26:54 1145 2

原创 JTAG无法进入app的断点问题解决

这个地址是bootloader的程序地址,用的是官方的bootloader,也没有改动啥,尝试不同工程代码都是这样的。通过JTAG口,可以对STM32进行在线调试,主要还是APP的调试,一般来说都是没有问题的。进入debug模式的时候,发现程序一直在bootloader里面运行!可以确定,App是正确写入到芯片的(断开JTAG是可以全速运行的)确认:响应的pack是安装的,最新也安装,也一样。main 函数里面断点 死活进不去。2. 理论上其他地方不要改动的。官方demo程序也是一样现象。

2023-09-11 12:23:02 156

原创 搭建STM32F407的SPI-Flash(基于STM32CubeMX)

网上有不少驱动程序,可以去下载,大部分都可以用。此时,SPI1会默认关联三个IO口,好像是PA5~7,注意:默认跟原理图是不一致的!所有操作都是以上套路,知道就好,网上down个驱动,就可以操作了。这里还要手动再配一下,这个地方搞了好久,一开始没有注意到!网上有不少例子,都对,但对我来说碰到几个坑,避免以后再犯错,mark下。切记,要根据原理图来配置,千万不用使用默认。切记,要根据原理图来配置,千万不用使用默认。切记,要根据原理图来配置,千万不用使用默认。片选那边IO,到还好,在GPIO里面配置。

2023-09-06 20:41:20 619

原创 搭建STM32F407的Freertos系统(基于STM32CubeMX)

本人长期开发Linux、Windows上应用软件,一直以来MCU开发有所接触,但较少(最近项目需要,小公司么,都得会,被逼的),好在有STM32CubeMX这样工具,貌似就是我想要的工具。本次demo目标立下:1. 搭建或移植FreeRTOS到STM32上,毕竟对于长期在Linux环境开发(虽然也号称嵌入式),什么中断、拉高拉低,一直来没有搞的明明白白。有个RTOS会方便很多2. printf重定向到串口1,可以实现打印输出3. 有个任务:定期拉高LED,然后反转,比较方便的看看程序运行情况。

2023-09-02 11:59:09 1238

原创 Linux下如何修改CPU 电源工作模式

在Linux下,如何防止CPU主动降频?如何设置电源-CPU工作模式?

2023-08-16 21:17:14 1415

原创 中文输入法开发-关键代码

中文输入法开发核心关键代码介绍当然主要是交互这块,至于字典里如何查询也是一门行道

2023-07-26 09:32:47 374

原创 Qt图片编辑 - 在直线添加文字

本文介绍了在Qt环境下,如何输出与直线跟随的文字,主要是跟随直线的角度处理

2023-07-22 10:40:15 314

原创 Qt画图框架,实现自己的画图框架

这个用于判断是否落在本区域,本区域范围由你自己定义,这里是返回QRect,也就是也还比较麻烦,比如我们希望不是落在Item的方形区域,实际需要希望落在Item的边缘(线条附近),但边缘不可能是Rect的。这个比较麻烦的地方,是View的压缩比例改变之后,要如何展现的问题。什么view,canvas都好理解,只要控制好职责范围,就能很好编写这两个派生类的代码,对应用而言,关键是Item的实现,理论上Item才是五彩斑斓的世界。类型,这个仅仅是类型,根据不同类型处理是否可获得焦点、调整大小之类的。

2023-07-10 09:19:43 312

原创 判断当前鼠标位置是否落在直线上面

1. 线段的两个点,start、end点,的坐标是已知的。如图,虚线所示,这个才是我们想要的边缘效果。那么,平行线的起点、终点的坐标都知道了。2. 那么,线段长度L也是已知的。红色框就是直线的边缘,很显然这不是我们想要的。

2023-07-03 09:24:36 170

原创 Qt画图功能实现

Qt的屌性,一般仅提供非常通用一些功能,但也不错了,比如说最复杂的坐标转换,Qt本身就提供了,这样大大方便我们专注于自己的“元件”这个按字面意思是画布,也就是说我们背景,自成一套坐标体系,跟显示坐标、图形坐标不一样。Qt图形框架由三部分组成:(详细介绍,csdn已经很多了,这里仅仅罗列下)对,是框架,基本上连demo都算不上,所以存在很多工作需要完善。那么,我们自己搞一个这样的软件,是否可行?实际使用的时候,发现微信截图编辑功能挺好用的,功能也很清爽。包括传统的围绕画图软件,也是挺好用的。

2023-07-03 08:30:17 333

原创 Draw.io 高阶用法

还有一种图形,本身就自带3D效果的组合图像,默认模板的确效果还可以,但随着大小拖动,效果就变样了,此时需要调整黄色 菱形。drawio是一款非常不错画流程图的软件,而且是免费的,但大部分图形以2D为主,有时候 却需要一些3D效果来增强方案。如果是长方形,也需要菱形替代,需要调整输入数字比例。如果是正方形效果,可用菱形替代,方法参考圆形。选择图形,然后黄色小菱形,拖动这个,可实现角度调整。需要变成这样,看起来更3D。调整图像角度,模型的角度(3D)

2023-06-19 08:37:04 2750

原创 视频采集到录制 - MP4生成

如果不设置时间戳,那么回放的时候会很奇怪,视频一会快一会慢(当然相差不大,裸眼很难分辨出来),但回放时间很真实,例如明明录制了30分钟,但实际回放的时候,只有29分钟。因此要设置时间戳,时间戳的原点是创建通道的,后面每写入一帧数据,带入时间戳(相对第一个点的时间偏移)音频跟视频是分开两个通道的,因此,时间戳也是分开累计,同理,视频跟音频同步,也是基于时间戳!注意,他的参数含义,网上很多例子都是44.1k,因此,而参数里如果不细究,这个就会被忽略。采用的方案,是通过mp4v2的库,进行合并。

2023-06-05 09:07:49 870

原创 视频采集到录制 - 音频采集到降噪

但要注意一次性输入长度,这个很多地方都提到(降噪输入长度=输出长度,只是降噪算法有自己的长度要求,一般来说这个一次长度跟采集PCM原始长度是不一致的)每次输入PCM长度都是固定的,也就是说不足或存在多路,需要自己进行内存维护,否则达不到预期效果(百思不得其解),一般不会报错,只是编码出来的数据很奇怪。一般采集音频都需要降噪,降噪算法很多,这里推荐rnnoise,这个基于神经网络,比较优秀,就是比较占资源,且搭建rnn环境也比较麻烦。注意是单通道,48k,如果输入44.1k也可以,但效果不好。

2023-05-29 08:59:45 819

原创 视频采集到录制 - 采集到显示碰到一些难点

有了背景的灰度,此时,还要考虑临界点(比如128以上是白色,如果实际刚好是127-129项目中用到相机后端处理,走了一些弯路,也遇到不少问题(解决了不少问题),特意写下本文记录下当时点点滴滴。讲一下背景,公司自研相机,用于一些高端场合,因此对后端处理也非常讲究采集-显示 基本方案:前端模拟信号(BNC)PCIE采集图像应用层通过PCIE采集卡(驱动)获取YUV图像YUV转码BGRBGR进行OSD叠加BGR显示到UI方案很简单,也很常规一种解决办法,但仍然碰到许多问题

2023-05-15 09:33:44 461

原创 编译opencv4.7.0 + opencv_contrib 记录

最近一个项目需要涉及到图像拼接算法,网上了解一番,也大致有思路:1. 利用surf算法查找特征点2. 过滤掉一些,获取good点3. 然后进行配准(图像扭曲),对接4. 形成最终拼接图片这些工作,最简单也是最快捷的方式就是opencv于是就开始研究opencv,windows版本可以直接在官网上下载,也可以在国内一些镜像网站上下载,这里需要注意,如果直接msi版本的话,是不支持surf算法。拼接的时候,需要surf,因此需要自己手动编译一个库出来。

2023-05-14 10:59:00 1073 2

原创 视频采集到录制

Sensor - 采集卡 - 编码 - OSD - H264编码 - MP4编码 - 存储文件(文件系统)Sensor - 采集卡 - 编码 - 算法 - 结果反馈 - 一般还需要实时显示。视频从摄像头或相机上取视频流,并最终录制到文件,这是一个复杂的过程,也是最核心的监控关键流程。虽然,到目前为止,我们都是站在巨人肩膀上的,但仍然需要深入、深入,需要很多努力,才能玩得转。从目前架构而言,基本上都是定型了,一般情况下,很少有机会能够接触到全链路的开发。其中对每个流程精通,都是足够一个程序员活得很滋润!

2023-05-08 08:56:25 79

原创 修改亮度、对比度、色调、饱和度,达到预期效果

用户态可以通过v4l2自带工具进行一些UVC相机参数的设定,包括采集卡驱动之类,也可以通过v4l2自带工具进行参数设定。通过修改这些参数的值,可以弥补相机本身彩色部分自带不足。

2023-05-05 20:26:35 1854

原创 Linux操作GPIO口或I2C

主板这侧通过I2c通讯协议,操作芯片(例如PCA9555、PCA9534之类)寄存器的值,由芯片控制其外接IO,这种芯片逻辑结构非常简单,有扩展8路IO、也有16路的,像某些主板或开发板都是通过类似信息扩展然后支持触摸屏等外设,内核挂载个驱动即可,因此,如果我们自己要控制的话,就需要了解I2C通讯协议以及相关知识。20: -- UU UU -- -- -- -- -- -- -- -- -- -- -- -- -- //此时,0x21 0x22 以及 0x51 都是链接i2c。

2023-04-17 10:07:04 1083

原创 嵌入式Linux下开发中文输入法

近期由于项目需求:设备端需要中文输入而手头又没有现成可用的中文输入法,因此就想办法看看能否捣鼓一个出来。当然,开始是没有任何信心的,也深知输入法别看他很小的一个东西,但内部涉及内容还是非常多的,很多知识平常也怎么涉及,知识储备有限。 总之,这是个挑战任务,公司其他同事资源基本上也帮不上忙。 面对未知时间,还是得首先静下心来梳理下、分析下,这样才好各个突破。

2023-04-01 14:42:36 842 2

原创 Linux下,几个关于容量获取命令

Linux下存在很多命令,其中也存在很多获取容量的命令开发应用的经常会碰到一些需求,例如: 1. 获取下当前设备存储空间,例如,总大小多少,剩余大小多少之类 类似,还有检测U盘(外部存储器)的容量怎么样,总大小,剩余之类等 2、判断U盘是否插入,或判定USB接口是否插入 或判定哪个USB插入哪个设备 3. 甚至,通过指定USB口去控制外部设备连接(开关电源) 4. 获取某个文件夹的大小

2023-03-27 08:45:11 2509

原创 一些好用的命名单词

/这个这个,虽然没有太多歧义,也不太可能冲突,但但这名字脑壳疼。的确,编码N年,到头来发现起始给变量(类)起个名字的确很难,仿佛比写个算法都难,往往酝酿了很久,结果还是差一点意思。总是觉得哪里不爽,要么太简单,要么太长,要么太普通。当然不应该千变一律,可以组合,但要琢磨琢磨,就好比写个诗一样,每个字都是有特定,换个近义词,总是不够意思。//num 虽然是number缩写,但太普通了,也缺少点意思,有点歧义。int n = 0;一般来说最佳名词,由一、两个单词组成,超过3个就显得臃肿了。

2023-03-25 14:48:14 560

原创 Linux 进程启动方法

1. 调用系统命令,完成一些操作,或判定结果 或获取结果2. 作为启动进程,调用第三方进程,并监控进程是否退出3. 加载升级进程,升级进程kill调用者或调用者自行退出,完成升级

2023-02-20 08:59:53 1315

原创 Linux配置 自启动,碰到一些问题

最近在搞一个arm-linux,发现自动运行与手动运行,竟然效果是不一样,在解决问题的同时,也顺便把Linux启动相关一些知识梳理一遍。问题1:在/etc/init.d/ 新建一个S90startapp, 并且添加启动程序的路径。此时,会发现该程序启动失败,并提示如下信息:qt.qpa.plugin: Could not find the Qt platform plugin "e...

2023-02-18 16:30:00 714

原创 针对启动程序闪退问题,写了个脚本

传统方法,就是人工运行,高级AI判断是否程序正常启动,若不是,则停止人工运行。程序发现在启动时,偶现闪退现象,需要定位问题所在以及跟踪原因。那么能否用shell脚本来实现呢?这样更加灵活点,也省去了很多编译 工作。这样可行是可行的,就是很麻烦,如果本身概率就很小,也很难持续这样操作。如果存在,kill掉,再次运行。如何写判定、如何写while。写个程序,运行待测试程序。如果不存在,则退出程序。

2023-02-16 21:15:14 217

原创 程序参数解析

也可以没有参数,但要注意有参数时,参数与选项之间不能有空格(有空格会报错的哦),这一点和一个冒号时是有区别的。argc 是表示有多少参数,包含当前进程。也就是说,不带任何参数,argc==1。C++程序都是通过main函数启动的,大部分的程序都是支持输入参数。前面两个参数都很好理解,就是main输入参数,一模一样。两个冒号的就表示这个选项的参数是可选的,即可以有参数。--参数,这个参数不再是一个字符,是个字符串。那么,我们程序,怎么处理这些呢?一个冒号的意思,就是必须输入项。-参数 但不需要输入项。

2023-02-07 18:09:18 440

原创 Linux配置应用自启动,碰到一些问题

“Available platform plugins are: linuxfb, minimal, offscreen, vnc, wayland-egl, wayland.” 解决办法“warning: setlocale: LC_ALL: cannot change locale (zh_CN.utf8)” 原因分析

2023-02-03 09:21:57 1470

原创 ZYNQ FSBL源码分析

zynq在运行完芯片内固化的bootRom之后运行的是FSBL程序(first stage boot loader),uboot由FSBL调起,官方说法中将uboot叫做SSBL(second stage boot loader).FSBL 是ZYNQ的bootloader虽然不是第一个启动的,但属于用户可以更改的启动程序,因此对源码分析是非常有必要的(在FSBL之前有bootRom,这个已经固化)代码为自动生成的main.c源码。

2022-10-10 10:16:59 1160

原创 vivado 2022与2018之间差异

最近接触vivado,目前最新的版本为2022.1的版本,但网上的很多例子都是基于2018的版本的,因此在操作的时候,会比较麻烦。2018:相当于一个工程里面的一部分,因此,很多关联都开始帮你建立好,platform也默认帮你建立好。2022:vitis 官网是号称是独立的,因此,在更多意义上,这个是跟vivado是同一级别的。正因为独立,第一次使用vivado的硬件环境,需要先建立platform,否则比较尴尬。-----主要是两个一级菜单位置也不一样,第一次使用的时候,会有点懵逼。

2022-09-27 20:41:17 13404 2

原创 关于动态规划算法

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。每次走完都要走 m+n-2 步骤,根据一层层深度,实际上这个是离散数据的问题。此时n=18,m=9,相当于18*17........10 这个数字非常大。3 3 那么n=4,m=2,即 4*3/(2*1) = 6。3 7,那么n=8,m=2,即 8*7/(2*1) = 28。相当于 C(m+n-2, min(m-1,n-1))3 2 那么n=3,m=1,即3/1 = 3。1. 向右 -> 向下 -> 向下。

2022-09-16 23:28:40 226

原创 Set与二分法效率

stl中有set用于匹配是否存在,内部利用rbtree机制,是一种高效算法但在c语言环境下,stl是不能直接使用,因此需要用其他算法来代替,二分法也是一种快速排序方法,代码逻辑也比较简单。由于项目中,会碰到协议的筛选,例如跟进协议ID筛选,然后需要继续处理;此时由于前端输入是广播数据,往往大部分数据都是"不需要处理"的,如果不进行优化,此处效率的确低下.本来没有这篇作业的,由于测试结果并不是set效率都高于二分法的测试条件限制: 先看数据截图:二分法数据测试被测数组长度为 102被测数组长度为

2022-07-05 20:08:02 319

原创 私有文件系统搭建(一)

文件系统给人的感觉就是不明觉厉的东西,但肯定是存在的,或者使用过的一般使用者也很难发现其存在,更不可能知道其工作原理。那么有必要了解下文件系统的概念文件系统是干什么?1. 归类,这样就比较有序,看起来也很顺眼。2. 快速查找,不用从头到尾去找,比如先到哪里,然后再到哪里,这样一层层分下去,查找速度快了几何倍。3. 设置边界,防止冲突,比如如果没有管理,那么已经存放的地方,很可能会被覆盖掉,这样也不是我们想要的结果。总的来说,文件系统主要也是起到这些作用。当然,

2021-06-26 13:48:01 272

原创 error: unable to find string literal operator ‘operator““PRIu64 解决办法以及原因

移植一份代码,出现一串error: unable to find string literal operator ‘operator""PRIu64’ with ‘const char [31]’, ‘long unsigned int’ arguments printf("Free sectors %10"PRIu64"\n", free_sectors);实际对应的源码位置PRIu64 应该未知正常情况下,一般我们要打印一个64整数int64_...

2021-05-18 17:35:11 2115 1

原创 看似没啥作用的花括号,其实也有用处的。

今天在研究别人的代码,发现有处代码感觉有点冗余,好像有点多余,正想删除,但仔细一看,这样写也是有目的。比如说如下代码//.....mInit = false;CallFun();{ CTest a; mClose = 1; mOpenFile = 100;}CallFun33();//....从逻辑角度来看,{ } 里的代码是100%会被执行到就算没有 { },也是一样会执行到这样的代码,往往第一感觉...

2021-04-28 19:45:34 157

STM32 SPI flash 驱动程序,包括自动擦除写入接口 支持HAL,FreeRtos下使用

非常简单,测试过可用,也比较稳定 支持W25Q系列Flash,W25Q64、W25Q128、W25Q256等等 带demo程序,可参考

2023-09-07

GenCP协议文件,英文版,V1.3

GenCP协议1.3,英文版

2022-10-27

CMMI3级访谈问题 中文版

CMMI3级访谈问题 中文版,比较齐全欢迎参考

2015-11-03

空空如也

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

TA关注的人

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