
编程经验
文章平均质量分 72
fhqlongteng
非著名软件专家,物联网物联传媒专家评委,中国cortex-M3第一人,精通嵌入式产品软件硬件设计,服务过知名通信企业,开发过光通信产品的软件,熟悉光通信产品的技术原理与应用,掌握产品的整个解决方案;服务过国有大型煤炭设备研发企业,开发过煤矿装备智能控制设备,全面负责产品软件的架构设计与开发,现服务于物联网高科技公司,负责技术产品的规划,设计,研发,制造,推广,带领一群优秀的小伙伴从事物联网产品,特别是智慧农业产品的设计。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
rtthread编程及软件包使用经验
本篇博文主要用于记录在使用rt thread系统中遇到的一些问题,经验,软件bug及使用技巧,长期更新。 rt thread操作系统版本:3.1.21、2019.11.25 modbus软件包,mbrtu_m.c函数238行中/*RT_ASSERT(( eSndState == STATE_M_TX_IDLE ) || ( eSndState == STATE...原创 2019-11-25 11:13:39 · 9557 阅读 · 0 评论 -
一篇文章讲清楚I2C通信及软件编程--附开源软件I2C驱动程序
1、导读 如果你想深入了解和学习I2C通信,请阅读全篇文章,如果你只是要临时快速的完成I2C通信外设的驱动,可以直接看代码,复制到你的工程中去,编译,调试很快就解决问题。本文重点还是想教你真正的理解了I2C通信的原理与编程,I2C通信一要掌握原理,二要自己真正的去编程实践,如果你看完本篇文章,你能自己编写一个软件模拟I2C驱动程序,你就真正的掌握了I2C通信原理。2、I2C通...原创 2019-08-06 11:46:36 · 7553 阅读 · 0 评论 -
一种动态分配内存错误的解决办法
一款2年前开发的无线网络通信软件在最近的使用过程中出现网络中传感器离线的问题,此软件之前已经使用的几年了,基本功能还算稳定。这次为什么出了问题。先派工程师去现场调试一下,初步的结果是网络信号弱,并且有个别主干网络设备离线不工作。这次网络的中的传感器数量与比前比相差不多,但是传感器数据的上报间隔较短。原创 2025-04-30 17:23:45 · 805 阅读 · 0 评论 -
Linux USB转串口设备路径的查找方法
串口设备在系统上电时,由于驱动加载的顺序不能会出现串口设备号不一样的情况,比如接了A串口,B串口到USB接口上,可以在系统上加载出来的串口为变化,有时A串口是/dev/ttyUSB0, 有时B串口是/dev/ttyUSB0。因此应用程序可以通过唯一的USB设备路径来查找到USB转串口设备,当然也可以查找到其他USB设备,可以编写一段程序,在/sys/bus/usb/device目录查找每一个文件夹,当找到文件夹中对的usb PID, VID与目标设备相符时,就是找到了这个USB设备的对应路径。原创 2024-04-30 17:59:11 · 2079 阅读 · 0 评论 -
Ubuntu 自启动应用程序的方法
自启动应用程序可以在/etc/rc.local文件中调用脚本来启动应用程序,另外也可以自行编写一个服务来启动应用程序。rc.local脚本本身也是被一个rc.local的服务来调用的。如下图,可以看出rc-local.servce服务调用/etc/rc.local脚本中的相关程序来启动应用。编写一个服务程序用于启动一个/home/eiota/test.py程序,服务文件的内容如下,放在/lib/systemd/system目录下。后面设备再开机就能实现服务的自动启动了。后面设备再开机就不自动启动了。原创 2024-04-01 10:25:18 · 1017 阅读 · 0 评论 -
RK3568 解决MIPI屏幕开机只显示uboot logo的问题
之前写过一篇文章介绍了RK3568驱动MIPI屏幕的方法,这次产品迭代,硬件改版,选型的新的屏幕了。所以再次开启调试屏幕的过程。本以为会和上次一样会轻车熟路,事情总是事与愿违,同样的路,遇到新的坑。原创 2023-12-29 17:34:13 · 4328 阅读 · 0 评论 -
优化python程序执行速度
从以上结果可以看出,处理100万个数据时,list速度最快,用时0.126秒,bytearray,居中,用时0.270秒, bytes最慢,用于98秒。根据程序的处理数据的需要,代码改动少的情况下使用bytearray来处理,可以提高处理速度。分析代码,代码中变量self.recv_msg使用bytes字节串来存储接收到的数据,程序首先从蓝牙设备中读取数据存储在recv_data字节串中,之后遍历整个字节串,把数据放到self.recv_msg中去。蓝牙接收程序的代码如下。原创 2023-10-31 16:50:09 · 269 阅读 · 0 评论 -
RK3568蓝牙程序开发过程
服务器的程序代码如下,代码在服务器端建立一个zsm-server的服务器,对应的uuid为00001101-0000-1000-8000-00805F9B34FC。本文开发使用python语言开发,安装bluez库,可以使用pip install PyBluez来安装,如果安装不上的话,可以使用sudo apt install python3-bluez来安装。先启动设备A的服务器程序,再启动设备B的客户端程序,如果一切正常的话,设备B会收到发送出去的数据,再接收到服务器返回来的数据。原创 2023-08-09 20:58:02 · 1342 阅读 · 0 评论 -
RK3568 AP6275S蓝牙驱动程序调度过程
今年3月份调度了RK3568驱动程序,当时由于时间的问题,AP6275S蓝牙驱动程序没有调试成功。当时仔细检查的设备树的配置。AP6275S使用外部时钟,RK3568程序工作后,hciconfig查看不到蓝牙设备。后来,又对比一个硬件的原理图与开发板的原理图,发现AP6275S的蓝牙串口的RTS,CTS未连接,因此修改硬件飞线连接,蓝牙还是没有设备出来。原创 2023-05-30 18:49:28 · 4623 阅读 · 0 评论 -
OV13850摄像头显示效果调试
简单介绍ov13850摄像头的显示图片亮度的调试方法原创 2023-03-17 16:58:04 · 3852 阅读 · 5 评论 -
RK3568驱动OV13850摄像头模组调试过程
品牌:Omnivision型号:CMK-OV13850接口:MIPI像素:1320WOV13850彩色图像传感器是一款低电压、高性能1/3.06英寸1320万像素CMOS图像传感器,使用OmniBSI+?技术提供了单-1320万像素(4224×3136)摄像头的功能。通过串行摄像头控制总线(SCCB)接口的控制,它提供了全帧、下采样、开窗的10位MIPI图像。原创 2023-03-06 18:32:42 · 7566 阅读 · 12 评论 -
RK3568移植5G通信模组
5G通信模组在RK3568上的移植调试过程原创 2023-02-24 17:53:15 · 3830 阅读 · 1 评论 -
RK3568 MIPI驱动JD9365A触摸屏调试过程
RK3568驱动MIPI屏幕的调试过程原创 2023-02-22 10:26:50 · 6776 阅读 · 2 评论 -
RK3568连接MIPI屏幕的旋转方法
硬件使用天启的ITX-3568Q板子,软件使用ubuntu 20.04.5,桌面使用lxqt桌面。外接10寸 mipi屏幕。屏幕由于竖屏,所以画面是竖着显示的。如下图: (1)通过系统设置来进行旋转显示,旋转显示对LCD设备的显示进行旋转和对电容触摸屏进行旋转。 A、旋转屏幕的方法可以通过系统菜单,如下图,菜单的修改操作实际也是修改的lxqt-config-monitor.conf文件。 B、旋转屏幕的方法通过修改配置文件,文件位于:/home/fi原创 2022-12-06 18:36:40 · 5342 阅读 · 4 评论 -
ubuntu16 ARM 4G双网卡的上网配置
经过以上一系列的操作,可以启动4G网卡了。通过分析quectel-CM的程序代码,关于ip与路由的设置是由default.script文件来实现的,所以修改4G卡的跃点为10, 由于4G网卡获取 dns服务器后改resolv.conf文件时,保留原来的有线网卡使用的dns。根据quecel-CM启动的记录可以查看到,这两个dns是4G网卡的设置的,原来的默认的有线网卡的DNS地址没有了。经过以上设备查看路由配置可以看到eth2 4G网卡的跃点10,有线网卡eth0为50,上外网使用4G网卡。原创 2022-11-02 15:18:25 · 4193 阅读 · 2 评论 -
ubuntu16 ARM更改时区的方法
移植ubuntu16到ARM上时默认的时间是不对的,显示的是UTC的时间与北京时间相差8个小时,修改时间可以使用timedatectl。原创 2022-10-27 10:11:18 · 1617 阅读 · 0 评论 -
imx6ull驱动开发经验
这个问题是由于板子上运行的内核中符号表中device_create函数没有或对应不上,我这个板子运行的内核是在家中电脑上编译出来,目前测试的驱动文件是在公司的电脑上编译出来,两个内核源代码有细微一的区别导致的。2、加载驱动文件chrdevbase.ko文件时,先使用depmod生成依赖文件时,提示无modules.order, modules.builtin无这两个文件。解决办法:重新配置内核,修改为只选择ARMv7, 通过menuconfig修改,如下图:编译内核后再编译驱动程序就可以了。原创 2022-10-26 18:25:16 · 1908 阅读 · 2 评论 -
vscode 使用makefile 在线调试运行C/C++程序的方法
上一篇文章vscode在线调试C/C++程序的方法中介绍了调试程序的方法,由于文章中使用的编译程序规则是调用task.json中来实现的,不适用于一般的程序。目前大多数程序都是来使用makefile来进行编译来调试的,本文将介绍使用vscode调用makefile来实现程序编译,最后来实现程序调试的方法。原创 2022-10-18 15:10:57 · 11971 阅读 · 0 评论 -
vscode在线调试运行C/C++程序的方法
不得不说vscode软件是我见过的最强大的代码编辑工具,在使用vscode之前一直使用source insight来看代码。从使用vscode看代码来,写代码以后,发现这个软件真是太好用,支持各种编程语言,C, python, java等,最关键的它还能调用调试器软件,实现python程序的在线调试,实现C语言程序的在线调试。之前一篇博文。本文重点介绍使用vscode在线调试C程序的方法。原创 2022-09-15 14:38:23 · 4501 阅读 · 0 评论 -
IAR软件生成库文件.a的license限制
如下图,产品工程由于编译源代码一直都没有问题,而下面提示的是代码限制是由于为库文件的原因,所以猜测是库文件的原因。其次查看库文件的内容,使用比较工具软件可以查看,发现库文件的编译的IAR软件为9.1,我使用的软件为8.4那是不是由于不同版本的原因导致的,再让A公司使用同样的版本来编译,测试依然不行。首先通过最简单的大小比较,以前能用的库文件为23KB,后面提供的库文件都比这个大,是不是由于大小的原因呢,让对方公司把一个库文件拆成2个库文件,并且降低每个库文件的大小,测试依然不行。原创 2022-09-02 10:18:11 · 953 阅读 · 0 评论 -
linux shell守护脚本的详解
在linux系统中运行一个应用程序,通常需要使用一个shell脚本程序来启动应用程序,并且监控应用程序是否在运行,如果应用程序故障自己退出就需要通过shell脚本程序来启动它。其实shell脚本程序就是一个很简单的程序逻辑来监测一个复杂的应用程序,类似于在嵌入式软件开发中单片机中使用看门狗来监测程序是否运行,不运行了就复位芯片让程序重新运行的功能。看来在所有软件开发的过程中都存在看门狗这个角色。...原创 2022-08-12 18:38:28 · 817 阅读 · 0 评论 -
python调用C语言程序的实现过程
python语言的优点很多,当然也有缺点,由于是解释形脚本语言,所以它的执行程序的效率没有C语言快,操作系统硬件相关的操作接口程序都是C程序接口,所以对于一些特殊的应用与操作就要调用C语言程序来实现。...原创 2022-07-21 18:22:03 · 2556 阅读 · 0 评论 -
STM32 USB高速USB端口加持4G联网
关于STM32F4USB驱动程序(FULL SPEED)目前是可以用,但是有很多问题,比如NAK的问题,导致U盘读写出错。USB底层驱动程序中进行OUT传输时必须增加一个1ms延时的问题。等等储多问题。本文高速USB的驱动程序参考了网友@sakumisu的文章:[基于 CherryUSB 调试 dwc2 usb host 笔记](https://club.rt-thread.org/ask/article/9c31ce71ead26c2b.html "基于 CherryUSB 调试 dwc2 usb hos原创 2022-07-07 16:10:38 · 1952 阅读 · 3 评论 -
ubuntu自动启动运行一个python脚本的方法
通过linux系统启动后会调用rc.local文件来实现,即在rc.local文件中增加启动shell脚本,如下图所示,调用一个mqtt.sh的脚本文件,其中 &表示在后台运行,脚本文件最后再调用你要启动的程序。 shell脚本程序的内容也比较简单,即调用要启动的程序,要增加&表示在后台运行。 python程序的单独运行测试,可以在命令行中输入:nohup ./mqtt_ultra.py &的方式来运行。有的文件运行需要切换到root权限来运行。nohup命令的意思不挂断运行,当你的程序有原创 2022-07-04 16:41:14 · 1953 阅读 · 0 评论 -
MQTT协议栈原理及交互流程图
图解MQTT协议栈的原理及交互流程图原创 2022-06-24 11:47:00 · 1559 阅读 · 0 评论 -
C语言0长度数组的妙用
0长度数组的意思是数组的长度为0,比如int a[0],它编译后不占用内存空间,即sizeof(a) = 0。C99规定可以为变长数组int len ; int array[len];也就是说数组是程序运行时候才指定数组的大小。常见的是进行输入数据进行初始化。.........原创 2022-06-21 11:30:04 · 1328 阅读 · 0 评论 -
winUSB设备的开发方法
1、winUSB功能介绍winUSB设备在win10系统下自带驱动程序的,winUSB设备连接到USB后,可以直接被系统识别,无需安装驱动,实现了免驱的功能。就像键盘、鼠标插入到电脑上直接使用一下。winUSB设备使用BULK传输,具有传输数据量的优点,设备使用BULK IN, BULK OUT,CONTROL3个端点来进行通信。因此winUSB设备在开发USB产品时是一个很好的选择。2、winUSB软件选型 winUSB软件采用RT thread操作系统自带的USB device协议..原创 2022-05-11 12:01:39 · 5083 阅读 · 0 评论 -
windows 文件在linux下运行显示no such file or directory
1、产生问题的原因:linux系统和windosw系统对文件换行的处理不一样导致的,windows文件换行使用'\r\n',linux中使用'\n'。2、解决办法使用vi/vim打开文件,修改文件格式为unxi格式,原来的格式为dos格式(windows):set ff=unix : 告诉 vi 编辑器,使用unix换行符:wq 保存退出 这就是说,把一个文件从一种系统移到另一种系统,就有换行符的麻烦。如:用 vi 来尝试编辑一个采用 MS-DOS 格式的文件,你将会....原创 2022-04-14 16:07:41 · 2615 阅读 · 0 评论 -
解决STM32虚拟U盘枚举过慢的问题
虚拟U盘,枚举速度过慢原创 2022-03-31 16:00:20 · 2394 阅读 · 1 评论 -
4G物联网设备使用经验--深刻的教训
我在一个运行三年的物联网设备采用一4G模块(L501)用于通信,4G模块的具有基站定位功能,使用此功能用来定位设备的安装位置。4G的模块AT指令初始化,关联了基站定位的初始化,初始化成功后,才进行联网操作。在2022年1月24日,设备发现无法联网,离线。经过联系模块厂家,厂家说基站定位功能是他们向高德地图购买的服务,无法定位的原因是由于调用次数过多的原因,需要等待时间来恢复。 这一天陆续有多台设备由于断网后自动重新连接导致无法定位成功而无法联网,客户陆续打来电话。做好远程长级的程序关闭......原创 2022-01-25 12:59:58 · 3269 阅读 · 0 评论 -
打包Python脚本快速启动的方法
1、打包python脚本的方法 打包Python脚本程序为可执行文件exe一般使用pyIntaller,本文介绍的打包的程序源码请参考:分享自己使用python+pyserial+pyQT5写的串口调试助手_fhqlongteng的博客-优快云博客_python 串口调试助手2、遇到的问题 本博客中make_exe.bat脚本中,-F参数是生成一个exe文件,在单独生成一个exe文件时,启动时很慢,大约有5秒的时间才启动,这个时间太长了。原因是单独打包成一个e...原创 2021-10-27 20:53:58 · 988 阅读 · 0 评论 -
C语言float,hex, dec几种格式的转换
1、测试代码#include <stdio.h>int main(){ signed short a = 0; float temp = 1.0; unsigned char *ptemp; /* 我的第一个 C 程序 */ a = (0xff<<8) | 0x37; printf("a(dec)=%d.%d, a(hex)=%x! \n",a/10, a%10, a); a = -201; printf("a(dec.原创 2021-10-26 16:19:55 · 1942 阅读 · 0 评论 -
记一次解决MQTT软件包内存泄露的心路历程
1、技术背景 物联网产品使用的mqtt连接功能采用的kawii-mqtt软件包,具体的软件包地址在:[kawii mqtt软件包地址](https://github.com/longtengmcu/kawaii-mqtt),当出基于此软件包开发时,解决了此软件包的许多问题(可查看git 提交记录),包括内存泄漏问题,现在已经成功应用在产品上,并且稳定运行。目前的产品应用是mqtt做的长连接,即创建连接后,应用程序不会主动断开连接,可以稳定运行。 最近开发产品由于要做低功耗...原创 2021-09-27 14:49:11 · 6865 阅读 · 4 评论 -
usb rndis主机接收数据错误的分析
1、背景 本程序是一个stm32 usb host驱动4G rndis模块的程序,具体可以参考首创STM32 USB主机驱动4G rndis设备_fhqlongteng的博客-优快云博客。这个程序在最近移植到真实的产品硬件上面做应用功能测试。测试发现产品在执行特定的操作时,出现4G 模块usb设备主动断开usb连接的情况。2、问题原因浅析 如下图的软件是用于测试4G模块实现的真实产品的功能的测试软件,点击“读取设备时间”,会通过4G网络读取到设备的RTC时间,点击“开关”按...原创 2021-09-06 13:12:40 · 1236 阅读 · 3 评论 -
orCAD软件安装导致Git需要输入密码的问题
最近在电脑上安装了orCAD软件来查看原理图和PCB文件,安装后发现git push代码时要求提示输入密码,那么输入了密码也提示不正确,导致无法上传代码。查看了网上的各种操作,均无法解决,什么重新生成SSH密钥的这些操作全部不行。在git bash的生成密钥的操作中,偶然看到了提示信息中显示出一个路径:D:\orcad\Cadence\SPB_Data\ssh,我分析可能是这里出问题,安装orcad后,软件可能修改了环境变量,导致git bash,git gui在读取ssh密钥时读取到了orcad目...原创 2021-09-06 11:36:54 · 302 阅读 · 1 评论 -
一键编译同时生成hex bin文件的方法
1、功能需求 在嵌入式软件开发过程中通常需要同时生成hex文件,bin文件,hex文件用于仿真器烧写程序使用,bin文件用于执行串口在线升级时使用。在本项目的使用的hex文件包括boot.hex, app.hex两个文件,烧写时需要把这两个文件合并成一个文件。bin文件需要进行特殊的处理(增加文件头与MD5校验码),用于在串口升级使用。本项目中使用IAR编译器,IAR编译器无法通过工程设置同时生成HEX,BIN文件,同时生成hex,bin文件无法直接使用,需要进行进一步的处理。本文通过采用批处理...原创 2021-02-27 23:34:31 · 3156 阅读 · 5 评论 -
实战--根据hard fault打印的寄存器信息分析代码异常地址
1、前言 阅读本文请需要先了解一下技术原理,请阅读一下这篇文章:https://blog.youkuaiyun.com/fhqlongteng/article/details/112756689。2、故障时的寄存器信息 程序在运行中串口打印出如下信息,程序进入hard fault中断并打印出异常点的寄存器数据。[E/NET_SW] Invalid low power sensor data on the uart2 channelpsr: 0x21000200r00: 0x000...原创 2021-01-21 15:47:03 · 4384 阅读 · 0 评论 -
Cortex-M内核硬件故障问题的分析方法
1、Hard fault中断 Cortex-M内核具有一个不可以关闭的硬件错误中断(Hard fault),这个中断的功能就是当内核运行到了错误的代码会导致产生硬件故障,进而引发中断,用于指示程序出现了重大不可修复的异常,需要程序员去重点关注与处理。本文以结合实际的故障代码来带你分析一下硬件故障产生的种类及如何根据异常的现象寄存器信息来分析找到出现故障问题的代码位置。2、Hard fault的种类 产生硬件故障的原因有,除法的除数为0、总线错误(非法的内存地址访问),非对齐...原创 2021-01-17 21:22:37 · 2745 阅读 · 0 评论 -
rt thread 3.1.3版本操作系统定时器卡死的问题
1、操作系统定时器 操作系统定时器是由rt thread内核提供的一个定时功能,支持硬件定时器或软件定时器。最后在一个产品的使用了多个定时器来实现数据通信指示灯的功能,原理是创建一个周期定时器,创建一个单次定时器,当有数据通信时,启动周期定时器来控制灯闪烁,启动单次定时器来超时关闭灯和周期定时器。当有数据再次到来时重新启动,达到了闪灯的效果。2、定时器卡死的问题 这个定时器由2个不同优先级的线程调用,在程序经过长时间运行后,会出现定时器卡死,即程序一直运行在rt_timer_...原创 2021-01-14 23:11:52 · 2939 阅读 · 0 评论 -
音频codec调试心得
本文介绍了一个CODEC芯片TLV320AIC3204音频CODEC的调试经验,记录一下芯片的调试过程中的一些心得。1、硬件电路 一个驱动的调试离不开硬件的电路的结构的与原理,调试驱动前要首先详细的了解驱动电路的原理,原理图如下: codec芯片的型号是TLV320AIC3204,这是TI公司的一款音频处理芯片,可以连接3路模拟mic输出,2路音频输出可以驱动耳机和扬声器。与MCU的数字接口是I2S接口,可以采集语音和播放语音,芯片的配置接口支持I2C和SPI接口,...原创 2020-09-13 20:13:00 · 10491 阅读 · 3 评论