
嵌入式应用开发实战
文章平均质量分 89
以实战为线索,日常的工作经验总结。
特立独行的猫a
csdn技术男猫哥,高级嵌入式软件工程师、c++软件工程师、全栈工程师。专注分享c++、QT、嵌入式linux、Android、HarmonyOS、前端小程序、AIoT(物联网+人工智能)、单片机、通信技术、开发工具等相关内容。
展开
-
Protocol Buffers在MCU上的nanopb介绍及使用详解
Protocol Buffer是谷歌推出的,和开发语言无关、平台无关、可扩展的机制,用于序列化结构化数据——像XML,但它更小、更快、更简单。关键特点:1、跨平台。2、可扩展。3、序列化结构化数据。4、使用简单。支持最常使用的语言1、C++2、C#3、Java4、Pythonnanopb 是一个非常轻量级的 C 库,用于 Protocol Buffers 的序列化和反序列化。它专为嵌入式系统设计,可以运行在内存和存储空间有限的环境中。原创 2025-03-03 20:15:00 · 1688 阅读 · 0 评论 -
海康ARM64平台网络SDK问题分析,大公司也犯这种低级错误
家里有个海康的网络摄像机,虽然有手机app可以远程访问,但是不方便定制。了解到海康提供有网络sdk,,接口功能丰富且强大。正好手边有全志的okt507开发板闲置,周末可以搞些事情玩。但是竟发现海康提供的arm64平台下的sdk有这等问题,印象中海康实力还不错,这太不应该了吧。原创 2024-10-01 11:15:32 · 1418 阅读 · 4 评论 -
嵌入式Linux的QT项目CMake工程模板分享及使用指南
CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建),大多的IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake等,如果自己动手写 makefile,会发现makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。原创 2024-05-08 21:45:00 · 1902 阅读 · 0 评论 -
嵌入式linux之QT交叉编译环境搭建(最简单实测通用版)
这里总结下用于嵌入式linux下的QT交叉编译环境搭建,留作备忘,分享给有需要的小伙伴。不管你的是什么嵌入式linux环境,实测过的通用方法总结。原创 2023-08-24 22:45:00 · 3938 阅读 · 0 评论 -
iMX6ULL 库移植 | Libgpiod 库的交叉编译及使用指南(linux)
libgpiod简介GPIO口的操作,是很常见的功能。传统的GPIO sysfs接口已被弃用。自Linux 4.8起,内核提供了全新的操作gpio的方式libgpiod(C library and tools for interacting with the linux GPIO character device),当然也更高效,推荐使用。libgpiod简介libgpiod - 用于与Linux GPIO字符设备进行交互的C库和工具(gpiod代表GPIO设备)原创 2023-08-23 21:45:00 · 4246 阅读 · 0 评论 -
iMX6ULL QT环境配置 | CMake在Linux下的交叉编译环境搭建及使用
习惯了使用cmake,再也不想回到手写makefile的年代了。相比手写makefile,使用cmake则像是实现了机动化,管理项目工程的编译变得很简单了。况且cmake很流行,linux下的很多软件源码包,很多也都使用了cmake的方式编译。因此这里总结下嵌入式linux环境下如何使用cmake,以及嵌入式qt的cmake配置。原创 2023-08-22 22:30:00 · 1595 阅读 · 0 评论 -
MQTT 常用客户端库介绍 (全面涵盖c,c++,java,c#,python)
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的即时通讯协议,物联网通信的主流协议之一。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器的通信协议。原创 2023-08-18 23:15:00 · 10383 阅读 · 3 评论 -
STM32的国产替代,盘点下我知道的国产MCU
电子元件涨价和缺货是多少嵌入式工程师的痛,一年内上游厂家晶圆产能告急能有数十次之多。而MCU更是重灾区,且不说国内有超75%的市场都是被国外产品占据,就是本国内的代理和供应商也是漫天要价,而交期更是长达7个月之久,现金结算、超额定金、再三加价更是司空见惯,所以国产化替代可以说是每个企业都想完成的“梦想”,现在这个梦想正在一点一点的走进现实,那么就让我来盘点一些我所知道的MCU国产化替代。原创 2022-11-30 21:23:06 · 26487 阅读 · 1 评论 -
在嵌入式linux上玩OpenGL
在我的嵌入式linux上板子资源和性能还是有限。想玩下OpenGL,倒不是板子flash或内存太小,而是底层图形接口是基于framebuffer的dev/fb0的,在标准的OpenGL下不支持。网上了解到在嵌入式linux或单片机上,可以跑OpenGL的一个子集,叫做TinyGL。OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。原创 2022-09-07 22:40:51 · 4708 阅读 · 0 评论 -
Go或者C中调用Lua业务脚本,实现终端应用的热更新方案
随着5G网络的普及,大胆预测未来智能终端架构发展的两个方向。一是随着5G的普及,联机类的业务,终端设备上的业务会轻量化,即瘦客户端的思想。业务在后台实现,终端仅成为操作实体的媒介,这样维护量将大大降低,业务都在后台嘛。二是脱机类,空闲联机的业务,终端可实现轻量化,热更新应用。把业务模块化,组件化,脚本化。每次升级不用整个都升级,可能仅需要写好业务脚本把轻量的几K的脚本下发下去实现应用的热更新,用户无感知。借用docker的图标来说下,它的图标很形象,一个大船拖动了很多的集装箱。以此类比现实世界,原创 2020-09-09 21:26:23 · 1407 阅读 · 0 评论 -
推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植
玲珑GUI介绍玲珑GUI是一套使用简单、低价的单片机GUI解决方案。可以用来代替串口屏、组态,降低产品成本,产品软硬件自主可控。 配套界面开发软件,图形化编辑界面,生成C代码。如其名字玲珑小巧,代码量不大,纯c语言写的,适用各类资源受限的单片机mcu,且开源免费。(协议使用Apache License, Version 2.0,可以二次开发类GPL,非二次开发类使用Apache,多许可协议的方式,简言之使用它做产品UI得开源,要想闭源,得经授权)。资料地址教程地址:玲珑GUI教程 · 语雀原创 2021-12-08 19:57:53 · 6923 阅读 · 0 评论 -
给自己立一个要求,如何保持进化?
我要给自己立一个要求,看书的时间大于手机的时间。你会发现一个现象,在这个社会上,越是有成就的人物越爱看书,反倒是一无所成的人天天刷抖音,这就是差别。社会是分层的,层级就是由人的不同思维习惯这么产生的。跟你的出生,所处的环境,学历背景等关系都不大。那些总是爱抱怨的人,把自己的失败归结于外因的人,从思维认知上就决定了他不可能取得多大成就。他们的思维大都固化,甚至有的都相信了玄学。于是给自己找个理由说,说这就是我的命,我这辈子就这样了。要具备一种成长型思维,越早明白越好。比如对孩子的教育这件事上,如果你看到原创 2021-06-29 07:01:57 · 1185 阅读 · 0 评论 -
嵌入式linux应用开发之常用shell脚本总结
总结下日常工作中,常用的linux下的shell脚本。linux的shell脚本很强大,可以用来做一些特殊功能。shell脚本语法虽然很简单,但是有时候把经常忘,还得再写一遍且验证ok才能用,这里总结下留作备忘。关于shell脚本的学习不需要太刻意,根据需要来。看的多用的多了自然就会了,至少能看懂吧。目录启用硬件IO口开机后应用启动其它应用服务触发执行其它应用拷贝U盘中的文件到设备中拷贝U盘数据Linux应用开机自启动Linux的引导过程rc和rcS脚本简化常原创 2021-11-25 18:12:50 · 3597 阅读 · 1 评论 -
多文件目录Makefile的写法
多个文件目录下Makefile的写法1、前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile。关于Makefile的详细内容可以参考网上流传非常广泛的《跟我一起写Makefile》http://blog.youkuaiyun.com/haoel/article/details/2886/,作者是个大牛,非常佩服。2、原创 2016-07-13 13:25:30 · 1078 阅读 · 0 评论 -
别忘了给gcc编译器工具链加上-fno-common选项
还记得上篇文章中,AddressSanitizer(ASAN)linux下的内存分析神器的问题的文章吧,其中记录了一个明显的代码bug,若不加这个-fno-common选项,那么程序简直就是明显的错误,但可能还未被发现。举个栗子:int a[5];int b[5];memcpy(a,"1234567890",10); //明显越界了还不报错。多出来的拷贝到哪了?可能在 b[5]中。甚至 b[6]= 1这样超过数组的赋值也不会报错。因此,保险起见,别忘了给你的linux应用,交叉编原创 2020-07-24 20:41:32 · 5301 阅读 · 0 评论 -
玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏
移植移植infoNES模拟器到嵌入式linux上,并增加支持声音输出和按键代码放在了github上。https://github.com/yongzhena/infoNES先来个效果截图:按键驱动源码:#include <linux/module.h>#include <linux/kernel.h>#include <...原创 2019-09-26 19:02:26 · 2190 阅读 · 0 评论 -
记一个AddressSanitizer(ASAN)linux下的内存分析神器的问题
感谢万能的互联网,我向google工程师们提出的issue很快就得到了回复,解决了我的问题。我的问题是这样的:AddressSanitizer can't detect some global buffer overflow! #1285Closedyangyongzhenopened this issueyesterday· 1 commentyangyongzhencommentedyesterday what a pity! AddressSanitizer...原创 2020-07-24 20:28:34 · 1816 阅读 · 0 评论 -
移植lua5.2和luasocket库到嵌入式linux,使能强大的lua脚本和网络功能
在嵌入式linux上,想最简单方便的使用网络资源,如Ftp,http,和socket,用c实现容易吗?解析json,用c实现容易吗?不如用dkjson.lua这个库。所以,使用lua脚本强大的网络模块,能给嵌入式linux应用开发带来不少方便。且lua很容易和c集成到一块儿,实现一些强大功能。以下记录下移植luasocket网络库到嵌入式linux开发板的过程:首先下载源码,地址在...原创 2020-09-10 22:10:56 · 1365 阅读 · 8 评论 -
littlevgl(Lvgl)最新版V7.4移植
LittleVGL最新已经更新到V7,网上大多数移植教程的版本比较老,很多特性没有,界面也不够酷炫。原子最近更新的 LittleVGL 教程则是基于V6版本的,基本上搬过来全是报错,无法参考。新旧版本一致还是有很大区别的,这里介绍下最新版本的移植要点,针对嵌入式linux的framebuffer(dev/fb0)移植。当然最最新的版本是V7.4.0,源码可以在github下载https://github.com/lvgl/lvgl。关于lvgl的官网及介绍,在https://lvgl.io,On原创 2020-09-01 12:16:16 · 5502 阅读 · 6 评论 -
基于FTP协议实现指定终端的日志自动上送方案
日志是应用程序的镜子,重要性不言而喻。日志是排查问题的一种有效的和快速的途径。以往现场出了问题,都需要外办的到处跑,去采集设备日志,再提供给研发分析处理。且采日志的过程是繁琐的,需要带电脑带工具以及一系列的繁琐操作,效率很低下,也很很辛苦。终端抓包和抓取日志确实是个效率很低下的问题。浪费外办运维人员的时间和精力,也浪费开发人员的精力。这中间会不少折腾,浪费的时间也是成本,出差的费用...原创 2019-11-06 18:23:11 · 2310 阅读 · 0 评论 -
sm2,sm3,sm4国密算法的纯c语言版本,使用于任何嵌入式平台
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。SM1为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA...原创 2019-09-05 19:35:03 · 14803 阅读 · 13 评论 -
sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)
终于搞定了sm2算法在smt32单片机上的移植。之前的动态内存分配,在上面总是莫名其妙的崩。不知道堆和栈空间该改多大合适。且总共64K的内存,太受限了。几次想放弃,最后还是坚持了一下,终于搞定啦!看miracl库官方说明文档,是使用了内存吃紧的设备的。可以使用静态内存分配。但是文档上介绍的太简单了,一笔带过。还得自己调试这摸索。文档中描述:受限环境在版本5的中,有一个对...原创 2019-09-06 16:35:44 · 13830 阅读 · 52 评论 -
玩转easyARM imax283A开发版(一),移植madplay让板子支持mp3音乐播放
很早之前买过一个ZLG的开发版,挺便宜的。带液晶屏和扩展板才120元。拿来做些小玩意儿玩儿。最近移植madplay让板子支持mp3音乐播放,音质还不错!cd /home/yang/imax283/ctools/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/binexport PATH=$PATH:...原创 2019-09-25 19:02:19 · 969 阅读 · 0 评论 -
小工具分享,电脑模拟pos机工具
小工具分享,在电脑上实现模拟pos的功能。除了界面,一个pos机的所有功能都有了。功能上的模拟,实现: M1,CPU卡片消费,银联卡消费,记录存储,与前置通信下载参数,上传记录,银联后台通信(签到,下载CA和IC卡参数,电子现金记录上送)记录分析,执行LUA脚本指令等,,关于卡片消费的实现,配置一读卡服务的地址,卡片消费时通过TCP连接到接有读卡器的电脑上,远程操作读卡器实现。...原创 2019-01-09 09:55:21 · 2305 阅读 · 3 评论 -
嵌入式应用软件架构设计
要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行。如果没有好的架构,移植将会是一件很痛苦的事情。如果没有好的架构,复用是最大的难题,没法更大限度的复用原有的代码。如果没有好的架构,一旦驱动改了,所有的地方都要改,费时费力且很容易出错。如果没有好的架构,应用层中穿插着硬件驱动层的代码,看着会是一片混乱,逻辑不清,代码维护起来会很困难。这里总结下我的嵌入式程...原创 2017-08-09 18:02:33 · 25184 阅读 · 6 评论 -
嵌入式linux之go语言开发(八)存储模块的封装(二)
接着上一篇的继续,使用go实现一个适用于嵌入式上的存储模块。简单易用,使用简单方便。由于在终端上,不需要执行复杂的sql查询,多表级联查询等。就是用来存储记录的,因此设计为存储到表里的都为二进制的字节流。还有一个原因是终端上记录字段变动频繁,不适合动不动就更改数据库的表结构吧。如果想要方便记录的解析,可以结合protobuf把数据序列化为字节流存储进去。以下为按照这个思路的实现的存...原创 2019-08-15 18:33:55 · 3991 阅读 · 0 评论 -
嵌入式linux之go语言开发(八)存储模块的封装(一)
在嵌入式终端设备上,免不了要存储记录、上传记录、查看记录等操作。我称之为储存模块。怎样的操作接口,最好用?最方便?首先想到的是使用嵌入式数据库sqllite,没错,选他作为存储媒介,用go调用也是很方便的。但是,这还远远不够。原生的sql操作,若不做个封装,将会是很难用。另外,已经有很多ORM框架,即对象关系映射,将面向对象语言程序中的对象自动持久化到关系数据库中,就满足要求了吗?...原创 2019-08-09 18:38:03 · 932 阅读 · 1 评论 -
让Vim打造成强大的IDE,附_vimrc的配置和使用
最近在搞linux,没有好用的IDE,想到了VIM.配置 了下VImrc文件。发现挺好用的。这里总结下使用方法。首先环境准备,下载windows下的VIM .GVIM。我的版本是V7.4.然后把_vimrc配置文件放到安装目录下。这个配置文件是之前别人写好的,用着有点儿问题特意改了下。稍后附件中会附带这个。直接能用。这里总结下 使用方法,省的时间一长又忘记了。进入目录的方法:原创 2017-11-23 19:35:28 · 2273 阅读 · 0 评论 -
让终端支持播放mp3,移植mp3解码库libmad和madplay到嵌入式linux
libmad简介MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。LIBMAD 提供 24-bit 的 PCM 输出,完全是定点计算,非常适合没有浮点支持的平台上使用。使用 libmad 提供的一系列 API,就可以非常简单地实现 MP3数据解码工作。移植涉及到的库:zl...原创 2017-11-10 21:43:59 · 8042 阅读 · 0 评论 -
正确使用Qt多线程
摘要: run()是线程的入口,就像main()对于应用程序的作用。QThread中对run()的默认实现调用了exec(),从而创建一个QEventLoop对象,由其处理该线程事件队列(每一个线程都有一个属于自己的事件队列)中的事件。QThread的常见特性:run()是线程的入口,就像main()对于应用程序的作用。QThread中对run()的默认实现调用了exec(),从而转载 2017-10-24 21:44:47 · 1902 阅读 · 0 评论 -
ucgui在嵌入式linux下的移植
前几天在研究minigui,照着官方的步骤编译,竟然一堆错,不是缺这库,就是缺那库。好不容易快到了最后一步,竟然再链接时告诉我用的64位系统不兼容32位的minigui。这是让我再重装个32位系统么。想出来个helloworld,在编译环境上都浪费不少时间,太坑。无意间发现了一个好东西,ucgui,这在原来单片机stm32上跑过,以及ucosII。之前也用过。ucgui占用资源很少,在st原创 2017-10-28 22:12:28 · 4860 阅读 · 0 评论 -
车载机串口转TCP通信工具稳定版出来啦
这个工具是用QT做的一个串口转TCP小工具。功能是让车载机,可以不用流量卡,用串口线接电脑,利用电脑的网络去跟后台通信。做这个目的很简单,我平常因为调试通信总找不到流量卡而苦恼,干碎做个工具让机器利用下电脑的网络,提高下工作效率。外办同事如果遇到机器流量卡欠费了,或机器通信故障了,记录不用全采,不用分析入库了。操作很简单,把机器设置为串口通信,拿来一根串口线接机器和电脑,电原创 2017-10-10 09:10:59 · 902 阅读 · 0 评论 -
支付宝二维码脱机认证库测试(linux_x86平台验证)
最近在调试支付宝给提供的二维码脱机认证库,他们给提供了几个文档和 libposoffline.so库文件。要想在andorid或linux上做支持支付宝扫码付的应用,必须会调用他们给的二维码脱机认证库。以下是一个在linux调用成功的例子:如图:附上代码,其实很简单,就是 linux下调用so动态库的一个例子:主要就是要包含 #include 和调用 hand原创 2017-07-04 11:40:09 · 3762 阅读 · 0 评论 -
我的小工具,c语言实现模拟POS机补采记录入库
好多地方问车载机串口全采和U盘采集的原始数据,能否入采集库。采集部门做的有专门的数据分析入库工具。但是这个工具不是标准的,每个地方都要根据记录格式修改,需要采集部门配合。若是直连银联的方式,车载机全采出来的数据,更没办法同步到库里了。因此想到一个办法,在电脑上做一个工具,模拟车载POS机与采集服务或银联后台通信。把全采的记录上传上去。想用C#或java做个工具,但是这样原来的c代码原创 2015-12-12 16:45:32 · 2058 阅读 · 2 评论 -
我的小工具,用C和python实现远程读卡器,远程读写消费卡片
晚上睡不着,想着白天工作上的事,让现场同事配合抓包,读取一下卡上数据,但现场同事连串口助手都没听说过。想到可以做一个远程读卡器。尽管可能行不成产品,但是对调试现场读卡之类的程序太有用了。这个远程读卡器就是一普通usb口或串口的读卡器,只不过配合一个电脑软件作为tcp服务器。这样,程序员可以在公司电脑上运行程序连到服务器上。服务器端操作控制现场的读卡器。想抓包现场卡上数据,很easy了。封装一些原创 2016-05-24 14:59:34 · 8981 阅读 · 1 评论 -
c语言身份证号码验证
#include#include//校验省份代码/** * * 省、直辖市代码表: * 11 : 北京 12 : 天津 13 : 河北 14 : 山西 15 : 内蒙古 * 21 : 辽宁 22 : 吉林 23 : 黑龙江 31 : 上海 32 : 江苏 * 33 :原创 2016-12-02 11:13:39 · 9480 阅读 · 1 评论 -
ZeroMQ研究与应用分析
ZeroMQ概述ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。2 系统架构2.1总体架构ZeroMQ几乎所有的I/O操作都是异步的,主线程不会被阻转载 2016-07-13 14:56:18 · 733 阅读 · 0 评论 -
让终端支持https,移植OpenSSL和libcurl到嵌入式linux,遇到的问题总结
从官网下载openssl源码和 libcurl源码。OpenSSL顺利交叉编译通过。版本:OpenSSLopenssl-1.1.0c.tar.gz版本curl版本 curl-7.57.0.tar.gztar -axvf .....准备开始交叉编译OpenSSL在openssl解压目录下,使用config命令CC=arm-linux-gcc ./config no-asm shared --...原创 2018-04-18 11:08:47 · 8525 阅读 · 18 评论 -
啥是HTTPS,通俗易懂的解释
[ 注:转载请注明来源:http://blog.youkuaiyun.com/zgwangbo , 也可关注微信: simplemain]我们现在经常听说谁谁谁密码被盗了,谁谁谁信息又被劫持了。其中有一个原因:绝大部分网站用的是http这个明文协议。你以为很安全的在password框里填了隐藏的密码,他却一字一句明明白白的写到了网络上。于是乎好多网站开始从http迁移到https(至少登录部分)。我也准备做同...转载 2018-04-20 13:48:36 · 7959 阅读 · 0 评论 -
嵌入式linux之go语言开发(六)几行代码实现终端的远程日志诊断
日志是应用的镜子,可以发现应用中的问题,重要性不言而喻。以往设备有问题了,是如何诊断的?我们是现场人员到现场,又是配合抓包,又是配合提供机器日志,效率极其低下。如今都物联网时代了,能让数据跑路的还让人去跑路,不合适吧。日志应能实现手工触发上送,或应用中出现严重问题时主动上送,或者远程控制其是否上送。试想,如果能让问题出现在被客户发现之前,提前被开发人员获知,主动的解决问题,那么无疑...原创 2019-08-06 17:15:55 · 4819 阅读 · 0 评论